summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-12-27 00:22:05 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-12-27 00:22:05 +0000
commitb86b442634ac0341df81c7e0407529790de04797 (patch)
tree5b4e79844ceeaba4dec55c96b3adf6529f13c752
parent5c6fb40507f34d71df62870825114d6ba9d5f942 (diff)
parent7c10792f83fea576d0b6044831cbf83d61cd8c74 (diff)
downloadcommon-b86b442634ac0341df81c7e0407529790de04797.tar.gz
Snap for 9438050 from 7c10792f83fea576d0b6044831cbf83d61cd8c74 to tm-qpr2-release
Change-Id: I9af0828edf81642f37fcb9b11debed38380199d9
-rw-r--r--libhwc2.1/libdevice/BrightnessController.cpp13
-rw-r--r--libhwc2.1/libdevice/BrightnessController.h1
-rw-r--r--libhwc2.1/libmaindisplay/ExynosPrimaryDisplay.cpp5
3 files changed, 15 insertions, 4 deletions
diff --git a/libhwc2.1/libdevice/BrightnessController.cpp b/libhwc2.1/libdevice/BrightnessController.cpp
index 434e63e..1057629 100644
--- a/libhwc2.1/libdevice/BrightnessController.cpp
+++ b/libhwc2.1/libdevice/BrightnessController.cpp
@@ -382,9 +382,10 @@ float BrightnessController::getSdrDimRatioForInstantHbm() {
}
void BrightnessController::onClearDisplay() {
+ resetLhbmState();
+
std::lock_guard<std::recursive_mutex> lock(mBrightnessMutex);
mEnhanceHbmReq.reset(false);
- mLhbmReq.reset(false);
mBrightnessFloatReq.reset(-1);
mInstantHbmReq.reset(false);
@@ -397,9 +398,6 @@ void BrightnessController::onClearDisplay() {
if (mBrightnessDimmingUsage == BrightnessDimmingUsage::NORMAL) {
mDimming.store(true);
}
- mLhbm.reset(false);
-
- mLhbmBrightnessAdj = false;
std::lock_guard<std::recursive_mutex> lock1(mCabcModeMutex);
mCabcMode.reset(false);
@@ -777,6 +775,13 @@ int BrightnessController::checkSysfsStatus(const char* file,
return ret == NO_ERROR;
}
+void BrightnessController::resetLhbmState() {
+ std::lock_guard<std::recursive_mutex> lock(mBrightnessMutex);
+ mLhbmReq.reset(false);
+ mLhbm.reset(false);
+ mLhbmBrightnessAdj = false;
+}
+
void BrightnessController::setOutdoorVisibility(LbeState state) {
std::lock_guard<std::recursive_mutex> lock(mCabcModeMutex);
mOutdoorVisibility = (state != LbeState::OFF);
diff --git a/libhwc2.1/libdevice/BrightnessController.h b/libhwc2.1/libdevice/BrightnessController.h
index 97f6ea0..1a19758 100644
--- a/libhwc2.1/libdevice/BrightnessController.h
+++ b/libhwc2.1/libdevice/BrightnessController.h
@@ -116,6 +116,7 @@ public:
}
int checkSysfsStatus(const char *file, const std::vector<std::string>& expectedValue,
const nsecs_t timeoutNs);
+ void resetLhbmState();
uint32_t getBrightnessLevel() {
std::lock_guard<std::recursive_mutex> lock(mBrightnessMutex);
diff --git a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplay.cpp b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplay.cpp
index 7d72633..594495b 100644
--- a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplay.cpp
+++ b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplay.cpp
@@ -343,6 +343,11 @@ int32_t ExynosPrimaryDisplay::setPowerDoze(hwc2_power_mode_t mode) {
mPowerModeState = mode;
}
+ // LHBM will be disabled in the kernel while entering AOD mode if it's
+ // already enabled. Reset the state to avoid the sync problem.
+ mBrightnessController->resetLhbmState();
+ mLhbmOn = false;
+
ExynosDisplay::updateRefreshRateHint();
return HWC2_ERROR_NONE;