diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2021-07-23 09:30:26 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-07-23 09:30:26 +0000 |
commit | 050fd0d889e81fc46b25a6554ac68415438c7e0f (patch) | |
tree | 13f3a6c8207086fdc12b4cf6a8a3b957b9aea5f7 /libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp | |
parent | d3895f69faca62e9c5b90737079b107e5bc63cde (diff) | |
parent | 2cf4b4e9759823a33ade22f726e63ec59aacb0cb (diff) |
Merge "libhwc2.1: LHBM On Constraint" into sc-dev am: 2cf4b4e975
Original change: https://googleplex-android-review.googlesource.com/c/platform/hardware/google/graphics/common/+/15093523
Change-Id: Ie0aad2ef525c8009c299392cd22dff6607156a79
Diffstat (limited to 'libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp')
-rw-r--r-- | libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp index 4ecca66..57d79b4 100644 --- a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp +++ b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp @@ -699,6 +699,13 @@ int32_t ExynosDisplayDrmInterface::setLowPowerMode() { // Dots per 1000 inches mExynosDisplay->mYdpi = mm_height ? (mDozeDrmMode.v_display() * kUmPerInch) / mm_height : -1; + // force to turn off lhbm + if (mBrightnessCtrl.LhbmOn.get() == true) { + mExynosDisplay->clearReqLhbm(); + mExynosDisplay->updateBrightnessState(); + mLhbmForceUpdated = true; + } + return setActiveDrmMode(mDozeDrmMode); } @@ -791,6 +798,7 @@ int32_t ExynosDisplayDrmInterface::getDisplayConfigs( /* key: (width<<32 | height) */ std::map<uint64_t, uint32_t> groupIds; uint32_t groupId = 0; + uint32_t min_vsync_period = UINT_MAX; for (const DrmMode &mode : mDrmConnector->modes()) { displayConfigs_t configs; @@ -810,11 +818,14 @@ int32_t ExynosDisplayDrmInterface::getDisplayConfigs( configs.Xdpi = mm_width ? (mode.h_display() * kUmPerInch) / mm_width : -1; // Dots per 1000 inches configs.Ydpi = mm_height ? (mode.v_display() * kUmPerInch) / mm_height : -1; + // find min vsync period + if (configs.vsyncPeriod <= min_vsync_period) min_vsync_period = configs.vsyncPeriod; mExynosDisplay->mDisplayConfigs.insert(std::make_pair(mode.id(), configs)); ALOGD("config group(%d), w(%d), h(%d), vsync(%d), xdpi(%d), ydpi(%d)", configs.groupId, configs.width, configs.height, configs.vsyncPeriod, configs.Xdpi, configs.Ydpi); } + mExynosDisplay->setMinDisplayVsyncPeriod(min_vsync_period); } uint32_t num_modes = static_cast<uint32_t>(mDrmConnector->modes().size()); @@ -1033,6 +1044,18 @@ int32_t ExynosDisplayDrmInterface::setActiveDrmMode(DrmMode const &mode) { DrmModeAtomicReq drmReq(this); + if (mLhbmForceUpdated) { + if (mBrightnessCtrl.LhbmOn.is_dirty()) { + if ((ret = drmReq.atomicAddProperty(mDrmConnector->id(), mDrmConnector->lhbm_on(), + mBrightnessCtrl.LhbmOn.get())) < 0) { + HWC_LOGE(mExynosDisplay, "%s: Fail to set lhbm_on property", __func__); + } + mBrightnessCtrl.LhbmOn.clear_dirty(); + mExynosDisplay->notifyLhbmState(mBrightnessCtrl.LhbmOn.get()); + } + mLhbmForceUpdated = false; + } + if ((ret = setDisplayMode(drmReq, modeBlob)) != NO_ERROR) { drmReq.addOldBlob(modeBlob); HWC_LOGE(mExynosDisplay, "%s: Fail to apply display mode", |