summaryrefslogtreecommitdiff
path: root/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp
diff options
context:
space:
mode:
authorLong Ling <longling@google.com>2021-10-13 21:03:28 -0700
committerLong Ling <longling@google.com>2021-10-15 14:55:28 -0700
commit4745dffda510018e6764e27ce10cadfc23113713 (patch)
tree29a7d2d7c1fa3ab90aba38c1172ee0d2cedf5feb /libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp
parent4b656e0d84856f5a5fa4beaae0d8e45a01ce3758 (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.cpp7
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;