hwc: Populate doze mode support for command mode panels alone.
-- In case doze is not supported, doze functionality will be
applied in ON state.
-- Disable async power mode.
CRs-Fixed: 2593633
Change-Id: I9b48e7a4767a5ad421970ad97aada49f79e03911
diff --git a/composer/hwc_session.cpp b/composer/hwc_session.cpp
index ac312a1..b4c94c7 100644
--- a/composer/hwc_session.cpp
+++ b/composer/hwc_session.cpp
@@ -181,7 +181,7 @@
g_hwc_uevent_.Register(this);
}
- int value = 1; // Default value when property is not present.
+ int value = 0; // Default value when property is not present.
Debug::Get()->GetProperty(ENABLE_ASYNC_POWERMODE, &value);
async_powermode_ = (value == 1);
DLOGI("builtin_powermode_override: %d", async_powermode_);
@@ -1127,13 +1127,27 @@
}
*out_support = 0;
- if (hwc_display_[display]->GetDisplayClass() == DISPLAY_CLASS_BUILTIN) {
- *out_support = 1;
- }
+ uint32_t config = 0;
+ GetActiveConfigIndex(display, &config);
+ *out_support = isSmartPanelConfig(display, config) ? 1 : 0;
return HWC2_ERROR_NONE;
}
+bool HWCSession::isSmartPanelConfig(uint32_t disp_id, uint32_t config_id) {
+ if (disp_id != qdutils::DISPLAY_PRIMARY) {
+ return false;
+ }
+
+ SCOPE_LOCK(locker_[disp_id]);
+ if (!hwc_display_[disp_id]) {
+ DLOGE("Display %d is not created yet.", disp_id);
+ return false;
+ }
+
+ return hwc_display_[disp_id]->IsSmartPanelConfig(config_id);
+}
+
int32_t HWCSession::ValidateDisplay(hwc2_display_t display, uint32_t *out_num_types,
uint32_t *out_num_requests) {
// out_num_types and out_num_requests will be non-NULL
@@ -3214,12 +3228,22 @@
}
bool isBuiltin = (hwc_display_[display]->GetDisplayClass() == DISPLAY_CLASS_BUILTIN);
+ int32_t has_doze_support = 0;
+ GetDozeSupport(display, &has_doze_support);
if (isBuiltin) {
capabilities->resize(4);
// TODO(user): Handle SKIP_CLIENT_COLOR_TRANSFORM based on DSPP availability
- std::vector<HwcDisplayCapability> caps{
- HwcDisplayCapability::SKIP_CLIENT_COLOR_TRANSFORM, HwcDisplayCapability::DOZE,
- HwcDisplayCapability::BRIGHTNESS, HwcDisplayCapability::PROTECTED_CONTENTS};
+ std::vector<HwcDisplayCapability> caps;
+ if (has_doze_support) {
+ caps = {
+ HwcDisplayCapability::SKIP_CLIENT_COLOR_TRANSFORM, HwcDisplayCapability::DOZE,
+ HwcDisplayCapability::BRIGHTNESS, HwcDisplayCapability::PROTECTED_CONTENTS};
+ }
+ else {
+ caps = {
+ HwcDisplayCapability::SKIP_CLIENT_COLOR_TRANSFORM,
+ HwcDisplayCapability::BRIGHTNESS, HwcDisplayCapability::PROTECTED_CONTENTS};
+ }
capabilities->setToExternal(caps.data(), caps.size());
}
return HWC2_ERROR_NONE;
diff --git a/composer/hwc_session.h b/composer/hwc_session.h
index 9079a91..680e54a 100644
--- a/composer/hwc_session.h
+++ b/composer/hwc_session.h
@@ -494,6 +494,7 @@
void NotifyClientStatus(bool connected);
int32_t GetVirtualDisplayId();
void PerformQsyncCallback(hwc2_display_t display);
+ bool isSmartPanelConfig(uint32_t disp_id, uint32_t config_id);
CoreInterface *core_intf_ = nullptr;
HWCDisplay *hwc_display_[HWCCallbacks::kNumDisplays] = {nullptr};