libexternal: Call new IOCTL to commit on external display
From post() for external call the new ioctl MSMFB_OVERLAY_COMMIT
to update the external display.
The new IOCTL is faster than the default PAN and waits for DMAE to finish before
returning. This fixes tearing.
Bug: 7249589
Acked-by: Arun Kumar K.R <akumarkr@codeaurora.org>
Change-Id: Ic755e634d5f141a567c7d93f39c74bb087cd7044
diff --git a/libexternal/external.cpp b/libexternal/external.cpp
index 1c4a477..92a129b 100644
--- a/libexternal/external.cpp
+++ b/libexternal/external.cpp
@@ -1,3 +1,4 @@
+
/*
* Copyright (C) 2010 The Android Open Source Project
* Copyright (C) 2012, The Linux Foundation. All rights reserved.
@@ -421,6 +422,8 @@
}
// Store the external display
mExternalDisplay = connected;
+ ALOGD_IF(DEBUG, "In %s: mExternalDisplay = %d", __FUNCTION__,
+ mExternalDisplay);
const char* prop = (connected) ? "1" : "0";
// set system property
property_set("hw.hdmiON", prop);
@@ -461,12 +464,16 @@
return ret;
}
+/*
+ * commits the changes to the external display
+ * mExternalDisplay has the mixer number(1-> HDMI 2-> WFD)
+ */
bool ExternalDisplay::post()
{
if(mFd == -1) {
return false;
- } else if(ioctl(mFd, FBIOPUT_VSCREENINFO, &mVInfo) == -1) {
- ALOGE("%s: FBIOPUT_VSCREENINFO failed, str: %s", __FUNCTION__,
+ } else if(ioctl(mFd, MSMFB_OVERLAY_COMMIT, &mExternalDisplay) == -1) {
+ ALOGE("%s: MSMFB_OVERLAY_COMMIT failed, str: %s", __FUNCTION__,
strerror(errno));
return false;
}