diff options
author | William Tai <williamtai@google.com> | 2021-09-22 17:02:53 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-09-22 17:02:53 +0000 |
commit | 068ff850e794dce76f85b58371c65b9f7ea27a8a (patch) | |
tree | 04e88819d4a0af8420d0dcc65c46ffbf86c052a8 /libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp | |
parent | e0ab7c698b31e95170191f97af3aa982c25cdbe3 (diff) | |
parent | a77baa577fbe1b8c0b3718b366d76013191033c2 (diff) |
libhwc2.1: update panel brightness when brightness level dirty set am: e3770ba8cf am: 00bbf8af7e am: a77baa577f
Original change: https://googleplex-android-review.googlesource.com/c/platform/hardware/google/graphics/common/+/15729947
Change-Id: I65397ed1531f7c5fffab6990bb8f0d81842eb673
Diffstat (limited to 'libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp')
-rw-r--r-- | libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp index 147ac70..184dbe7 100644 --- a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp +++ b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp @@ -745,6 +745,8 @@ int32_t ExynosDisplayDrmInterface::setPowerMode(int32_t mode) if (mode == HWC_POWER_MODE_OFF) { mBrightnessState.reset(); mBrightnessCtrl.reset(); + mBrightnessLevel.store(0); + mBrightnessLevel.clear_dirty(); mExynosDisplay->requestEnhancedHbm(false); mExynosDisplay->requestLhbm(false); mExynosDisplay->notifyLhbmState(mBrightnessCtrl.LhbmOn.get()); @@ -1650,7 +1652,7 @@ int32_t ExynosDisplayDrmInterface::deliverWinConfigData() : brightnessState_t::MIPI_SYNC_LHBM_OFF; } - if (mBrightnessCtrl.LhbmOn.is_dirty() || mBrightnessLevel.is_dirty()) { + if (mBrightnessCtrl.LhbmOn.is_dirty()) { auto dbv = mBrightnessLevel.get(); if (mBrightnessCtrl.LhbmOn.get()) { uint32_t dbv_adj = 0; @@ -1670,12 +1672,17 @@ int32_t ExynosDisplayDrmInterface::deliverWinConfigData() mDrmConnector->brightness_level(), dbv)) < 0) { HWC_LOGE(mExynosDisplay, "%s: Fail to set brightness_level property", __func__); } - mBrightnessLevel.clear_dirty(); mBrightnessCtrl.LhbmOn.clear_dirty(); } - // only allow to set hbm on for mipi sync when dim SDR transition - if (mBrightnessCtrl.HbmMode.is_dirty() && mBrightnessState.dimSdrTransition()) { + /** + * TODO(b/200332096): + * + * Need to consider hbm sync between sysfs and drm commit later. + * + */ + if (mBrightnessCtrl.HbmMode.is_dirty() && mBrightnessState.dimSdrTransition() && + mBrightnessState.instant_hbm) { uint64_t hbmEnum = 0; std::tie(hbmEnum, ret) = halToDrmEnum(mBrightnessCtrl.HbmMode.get(), mHbmModeEnums); if (ret < 0) { @@ -1689,6 +1696,15 @@ int32_t ExynosDisplayDrmInterface::deliverWinConfigData() } mBrightnessCtrl.HbmMode.clear_dirty(); + if (mBrightnessLevel.is_dirty()) { + if ((ret = drmReq.atomicAddProperty(mDrmConnector->id(), + mDrmConnector->brightness_level(), + mBrightnessLevel.get())) < 0) { + HWC_LOGE(mExynosDisplay, "%s: Fail to set brightness_level property", __func__); + } + mBrightnessLevel.clear_dirty(); + } + // sync mipi command and frame when sdr dimming on/off if (!mipi_sync) { mipi_sync = true; @@ -2423,8 +2439,10 @@ int32_t ExynosDisplayDrmInterface::updateBrightness(bool syncFrame) { } } - if (mExynosDisplay->mBrightnessFd) + if (mExynosDisplay->mBrightnessFd && mBrightnessLevel.is_dirty()) { writeFileNode(mExynosDisplay->mBrightnessFd, mBrightnessLevel.get()); + mBrightnessLevel.clear_dirty(); + } return HWC2_ERROR_NONE; } |