diff options
author | Long Ling <longling@google.com> | 2021-10-13 21:03:28 -0700 |
---|---|---|
committer | Long Ling <longling@google.com> | 2021-10-15 14:55:28 -0700 |
commit | 4745dffda510018e6764e27ce10cadfc23113713 (patch) | |
tree | 29a7d2d7c1fa3ab90aba38c1172ee0d2cedf5feb /libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp | |
parent | 4b656e0d84856f5a5fa4beaae0d8e45a01ce3758 (diff) |
libhwc2.1: block brightness change if LHBM is in action
setDisplayBrightness and setLhbm both causes display brightness changed
and each go different path: sysfs or drm/kms. The drm/kms path is slower
and causes wrong brightness change order.
Block setDisplayBrightness when there is an LHBM action (turning on or
off).
Bug: 202350377
Change-Id: I4d0cd9a051e80cdb60194df7be03e681c83638d2
Diffstat (limited to 'libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp')
-rw-r--r-- | libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp index 997b3e1..e63c498 100644 --- a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp +++ b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp @@ -1654,6 +1654,7 @@ int32_t ExynosDisplayDrmInterface::deliverWinConfigData() if (mBrightnessCtrl.LhbmOn.is_dirty()) { auto dbv = mBrightnessLevel.get(); + auto old_dbv = dbv; if (mBrightnessCtrl.LhbmOn.get()) { uint32_t dbv_adj = 0; if (mExynosDisplay->getColorAdjustedDbv(dbv_adj)) { @@ -1668,7 +1669,7 @@ int32_t ExynosDisplayDrmInterface::deliverWinConfigData() } } - if ((ret = drmReq.atomicAddProperty(mDrmConnector->id(), + if ((dbv != old_dbv) && (ret = drmReq.atomicAddProperty(mDrmConnector->id(), mDrmConnector->brightness_level(), dbv)) < 0) { HWC_LOGE(mExynosDisplay, "%s: Fail to set brightness_level property", __func__); } @@ -1754,6 +1755,10 @@ int32_t ExynosDisplayDrmInterface::deliverWinConfigData() return ret; } drmReq.restorePset(); + if (out_fences[mDrmCrtc->pipe()] >= 0) { + fence_close((int)out_fences[mDrmCrtc->pipe()], mExynosDisplay, FENCE_TYPE_RETIRE, + FENCE_IP_DPP); + } if ((ret = updateColorSettings(drmReq, dqeEnable)) != 0) { HWC_LOGE(mExynosDisplay, "failed to update color settings, ret=%d", ret); return ret; |