diff options
5 files changed, 32 insertions, 1 deletions
diff --git a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp index 417b16b..f8ca948 100644 --- a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp +++ b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp @@ -1913,6 +1913,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; @@ -2045,6 +2050,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; @@ -2058,6 +2078,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 2a5f8a2..0ad50bc 100644 --- a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.h +++ b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.h @@ -343,6 +343,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> |