summaryrefslogtreecommitdiff
path: root/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp
diff options
context:
space:
mode:
authorWilliam Tai <williamtai@google.com>2021-09-22 17:02:53 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-09-22 17:02:53 +0000
commit068ff850e794dce76f85b58371c65b9f7ea27a8a (patch)
tree04e88819d4a0af8420d0dcc65c46ffbf86c052a8 /libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp
parente0ab7c698b31e95170191f97af3aa982c25cdbe3 (diff)
parenta77baa577fbe1b8c0b3718b366d76013191033c2 (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.cpp28
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;
}