Merge "libhwc2.1: reset LHBM state while entering AOD mode" into tm-qpr-dev
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 @@
}
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 @@
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 @@
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 @@
}
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 @@
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;