summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-05-15 23:23:58 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-05-15 23:23:58 +0000
commit930acd1cc42ae632bcfd3757f0f5343714ddd5ff (patch)
treea9925f2e23311ffe3e231a7c60ca343548e6a3cc
parentee153fc46f3e526c0a2919016067663a72c7d7bf (diff)
parent61e9eb75ca40078f44c18bfaf21061eaef8b0a7b (diff)
Snap for 10136934 from 61e9eb75ca40078f44c18bfaf21061eaef8b0a7b to udc-release
Change-Id: I69c13efd5bae660c689e02ca6694dba03e9f96af
-rw-r--r--libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp25
-rw-r--r--libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.h1
-rw-r--r--libhwc2.1/libdisplayinterface/ExynosDisplayInterface.h1
-rw-r--r--libhwc2.1/libmaindisplay/ExynosPrimaryDisplay.cpp4
-rw-r--r--libhwc2.1/pixel-display-secondary.xml2
5 files changed, 32 insertions, 1 deletions
diff --git a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp
index 267b4b9..27d541b 100644
--- a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp
+++ b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp
@@ -1863,6 +1863,11 @@ int32_t ExynosDisplayDrmInterface::deliverWinConfigData()
(plane->id() != static_cast<ExynosPrimaryDisplay *>(mExynosDisplay)->mRcdId))
continue;
+ /* If this plane is not supported by the CRTC binded with ExynosDisplay,
+ * it should be disabled by this ExynosDisplay */
+ if (!plane->GetCrtcSupported(*mDrmCrtc))
+ continue;
+
if ((ret = drmReq.atomicAddProperty(plane->id(),
plane->crtc_property(), 0)) < 0)
return ret;
@@ -1995,6 +2000,21 @@ int32_t ExynosDisplayDrmInterface::clearDisplayMode(DrmModeAtomicReq &drmReq)
return NO_ERROR;
}
+int32_t ExynosDisplayDrmInterface::triggerClearDisplayPlanes()
+{
+ ATRACE_CALL();
+ DrmModeAtomicReq drmReq(this);
+
+ clearDisplayPlanes(drmReq);
+ int ret = NO_ERROR;
+ if ((ret = drmReq.commit(0, true))) {
+ HWC_LOGE(mExynosDisplay, "%s:: Failed to commit pset ret=(%d)\n",
+ __func__, ret);
+ return ret;
+ }
+ return ret;
+}
+
int32_t ExynosDisplayDrmInterface::clearDisplayPlanes(DrmModeAtomicReq &drmReq)
{
int ret = NO_ERROR;
@@ -2008,6 +2028,11 @@ int32_t ExynosDisplayDrmInterface::clearDisplayPlanes(DrmModeAtomicReq &drmReq)
(exynosMPP->mReservedDisplay != (int32_t)mExynosDisplay->mDisplayId))
continue;
+ /* If this plane is not supported by the CRTC binded with ExynosDisplay,
+ * it should not be disabled by this ExynosDisplay */
+ if (!plane->GetCrtcSupported(*mDrmCrtc))
+ continue;
+
if ((ret = drmReq.atomicAddProperty(plane->id(),
plane->crtc_property(), 0)) < 0) {
break;
diff --git a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.h b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.h
index bf5c9aa..78ed3e4 100644
--- a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.h
+++ b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.h
@@ -331,6 +331,7 @@ class ExynosDisplayDrmInterface :
int32_t panelVsize() { return mPanelResolutionVsize; }
int32_t getPanelResolution();
uint32_t getCrtcId() { return mDrmCrtc->id(); }
+ int32_t triggerClearDisplayPlanes();
protected:
enum class HalMipiSyncType : uint32_t {
diff --git a/libhwc2.1/libdisplayinterface/ExynosDisplayInterface.h b/libhwc2.1/libdisplayinterface/ExynosDisplayInterface.h
index d133774..2eabdfc 100644
--- a/libhwc2.1/libdisplayinterface/ExynosDisplayInterface.h
+++ b/libhwc2.1/libdisplayinterface/ExynosDisplayInterface.h
@@ -53,6 +53,7 @@ class ExynosDisplayInterface {
virtual int32_t updateHdrCapabilities();
virtual int32_t deliverWinConfigData() {return NO_ERROR;};
virtual int32_t clearDisplay(bool __unused needModeClear = false) {return NO_ERROR;};
+ virtual int32_t triggerClearDisplayPlanes() { return NO_ERROR; }
virtual int32_t disableSelfRefresh(uint32_t __unused disable) {return NO_ERROR;};
virtual int32_t setForcePanic() {return NO_ERROR;};
virtual int getDisplayFd() {return -1;};
diff --git a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplay.cpp b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplay.cpp
index b1b6aee..fb925db 100644
--- a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplay.cpp
+++ b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplay.cpp
@@ -277,6 +277,10 @@ int32_t ExynosPrimaryDisplay::setPowerOn() {
updateAppliedActiveConfig(0, 0);
int ret = NO_ERROR;
if (mDisplayId != 0 || !mFirstPowerOn) {
+ if (mDevice->hasOtherDisplayOn(this)) {
+ // TODO: This is useful for cmd mode, and b/282094671 tries to handles video mode
+ mDisplayInterface->triggerClearDisplayPlanes();
+ }
ret = applyPendingConfig();
}
diff --git a/libhwc2.1/pixel-display-secondary.xml b/libhwc2.1/pixel-display-secondary.xml
index 515bc21..ff313be 100644
--- a/libhwc2.1/pixel-display-secondary.xml
+++ b/libhwc2.1/pixel-display-secondary.xml
@@ -1,7 +1,7 @@
<manifest version="1.0" type="device">
<hal format="aidl">
<name>com.google.hardware.pixel.display</name>
- <version>7</version>
+ <version>8</version>
<fqname>IDisplay/secondary</fqname>
</hal>
</manifest>