summaryrefslogtreecommitdiff
path: root/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2021-07-23 09:30:26 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-07-23 09:30:26 +0000
commit050fd0d889e81fc46b25a6554ac68415438c7e0f (patch)
tree13f3a6c8207086fdc12b4cf6a8a3b957b9aea5f7 /libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp
parentd3895f69faca62e9c5b90737079b107e5bc63cde (diff)
parent2cf4b4e9759823a33ade22f726e63ec59aacb0cb (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.cpp23
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",