summaryrefslogtreecommitdiff
authorbaocheng sun <baocheng.sun@amlogic.com>2020-02-26 03:13:26 (GMT)
committer sky zhou <sky.zhou@amlogic.com>2020-05-21 12:03:54 (GMT)
commit0564fd8966311481ed9d1c3a548115e51258aaab (patch)
treeb40cc70e639bf182cb094bef505291297cf7df6e
parent77582805274ba08fcfb9b4cb85dd2658493eaa5e (diff)
downloadhwcomposer-0564fd8966311481ed9d1c3a548115e51258aaab.zip
hwcomposer-0564fd8966311481ed9d1c3a548115e51258aaab.tar.gz
hwcomposer-0564fd8966311481ed9d1c3a548115e51258aaab.tar.bz2
hwc: porting android p hotplut solution [1/5]
PD#SWPL-21279 Problem: Porting android p hotplug solution Solution: Porting android p hotplug solution. The primary display in framework will not be recreated. Verify: newton Change-Id: I9b80c8524535afb4ad2b24da22ad9d45e74e85c9 Signed-off-by: baocheng sun <baocheng.sun@amlogic.com>
Diffstat
-rw-r--r--hwc2/FixedSizeModeMgr.cpp18
-rw-r--r--hwc2/Hwc2Display.cpp28
2 files changed, 7 insertions, 39 deletions
diff --git a/hwc2/FixedSizeModeMgr.cpp b/hwc2/FixedSizeModeMgr.cpp
index f512b3b..9913a35 100644
--- a/hwc2/FixedSizeModeMgr.cpp
+++ b/hwc2/FixedSizeModeMgr.cpp
@@ -16,15 +16,6 @@
#define DEFUALT_DPI (159)
#define DEFAULT_REFRESH_RATE (60.0f)
-static drm_mode_info_t defaultMode = {
- "dummy_hdmi",
- DEFUALT_DPI,
- DEFUALT_DPI,
- 720,
- 480,
- DEFAULT_REFRESH_RATE
-};
-
FixedSizeModeMgr::FixedSizeModeMgr() {
}
@@ -59,10 +50,8 @@ int32_t FixedSizeModeMgr::update() {
if (mConnector->isConnected() && 0 == mCrtc->getMode(realMode)) {
if (realMode.name[0] != 0) {
mCurMode.refreshRate = realMode.refreshRate;
- mCurMode.dpiX = realMode.dpiX;
- mCurMode.dpiY = realMode.dpiY;
- mCurMode.pixelW = mFbWidth;
- mCurMode.pixelH = mFbHeight;
+ mCurMode.dpiX = ((float)mCurMode.pixelW / realMode.pixelW) * realMode.dpiX;
+ mCurMode.dpiY = ((float)mCurMode.pixelH / realMode.pixelH) * realMode.dpiY;
strncpy(mCurMode.name, realMode.name , DRM_DISPLAY_MODE_LEN);
MESON_LOGI("ModeMgr update to (%s)", mCurMode.name);
useFakeMode = false;
@@ -70,7 +59,8 @@ int32_t FixedSizeModeMgr::update() {
}
if (useFakeMode) {
- mCurMode = defaultMode;
+ mCurMode.refreshRate = DEFAULT_REFRESH_RATE;
+ mCurMode.dpiX = mCurMode.dpiY = DEFUALT_DPI;
strncpy(mCurMode.name, "NULL", DRM_DISPLAY_MODE_LEN);
}
diff --git a/hwc2/Hwc2Display.cpp b/hwc2/Hwc2Display.cpp
index 3a5ceaa..25d8841 100644
--- a/hwc2/Hwc2Display.cpp
+++ b/hwc2/Hwc2Display.cpp
@@ -236,19 +236,9 @@ hwc2_error_t Hwc2Display::setVsyncEnable(hwc2_vsync_t enabled) {
void Hwc2Display::onHotplug(bool connected) {
bool bSendPlugOut = false;
MESON_LOGD("On hot plug: [%s]", connected == true ? "Plug in" : "Plug out");
- /*
- * call hotplug out of lock, SF may call some hwc function to cause deadlock.
- * When a display is connected, First onHotplug DISCONNECT for the dummy config
- * Swap out dummy display for the newly-connected display. OnHotplug CONNECT for
- * the newly-connected display will be called onModeChanged function when the
- * displayPip is Ready.
- */
- if (connected)
- mObserver->onHotplug(false);
{
std::lock_guard<std::mutex> lock(mMutex);
-
if (connected) {
mSignalHpd = true;
return;
@@ -259,17 +249,9 @@ void Hwc2Display::onHotplug(bool connected) {
}
}
- /*
- * call hotplug out of lock, SF may call some hwc function to cause deadlock.
- * When a display is disconnected:
- * onHotplug DISCONNECT for the current display
- * Swap in dummy config [only 1 config 720x480, with no HDR capabilities]
- * onHotplug CONNECT for the dummy config
- */
- if (mObserver) {
+ /*call hotplug out of lock, SF may call some hwc function to cause deadlock.*/
+ if (bSendPlugOut) {
mObserver->onHotplug(false);
- mModeMgr->update();
- mObserver->onHotplug(true);
}
}
@@ -315,6 +297,7 @@ void Hwc2Display::onModeChanged(int stage) {
mPowerMode->setConnectorStatus(true);
if (mSignalHpd) {
bSendPlugIn = true;
+ mSignalHpd = false;
} else {
/*Workaround: needed for NTS test.*/
if (HwcConfig::primaryHotplugEnabled()
@@ -335,11 +318,6 @@ void Hwc2Display::onModeChanged(int stage) {
}
/*call hotplug out of lock, SF may call some hwc function to cause deadlock.*/
if (bSendPlugIn && mModeMgr->needCallHotPlug()) {
- if (mSignalHpd == false)
- mObserver->onHotplug(false);
- else
- mSignalHpd = false;
-
MESON_LOGD("onModeChanged mObserver->onHotplug(true)");
mObserver->onHotplug(true);
} else {