hwc: Add support for uneven split primary displays
Add support for unevenly split primary displays.
The driver provides info about the split via msm_fb_split sysfs node
For external we assume even split. If driver doesn't specify any split
for primary, we default to even split.
Change-Id: I4d541f41de2d7a5d2b62653fa33cab079a6d5d30
diff --git a/libqdutils/mdp_version.cpp b/libqdutils/mdp_version.cpp
index cac6b1d..16aee07 100644
--- a/libqdutils/mdp_version.cpp
+++ b/libqdutils/mdp_version.cpp
@@ -101,8 +101,8 @@
ptype = fb_finfo.id;
}
panel_type = *ptype;
-
}
+ mPanelType = panel_type;
close(fb_fd);
mMDPVersion = mdp_version;
mHasOverlay = false;
@@ -113,9 +113,26 @@
if(mMDPVersion >= MDSS_V5) {
//TODO get this from driver
mMDPDownscale = 4;
- }
- mPanelType = panel_type;
+ char split[64];
+ FILE* fp = fopen("/sys/class/graphics/fb0/msm_fb_split", "r");
+ if(fp){
+ //Format "left right" space as delimiter
+ if(fread(split, sizeof(char), 64, fp)) {
+ mSplit.mLeft = atoi(split);
+ ALOGI_IF(mSplit.mLeft, "Left Split=%d", mSplit.mLeft);
+ char *rght = strpbrk(split, " ");
+ if(rght)
+ mSplit.mRight = atoi(rght + 1);
+ ALOGI_IF(rght, "Right Split=%d", mSplit.mRight);
+ }
+ } else {
+ ALOGE("Failed to open mdss_fb_split node");
+ }
+
+ if(fp)
+ fclose(fp);
+ }
}
bool MDPVersion::supportsDecimation() {
diff --git a/libqdutils/mdp_version.h b/libqdutils/mdp_version.h
index f7b16fa..e26f4d3 100644
--- a/libqdutils/mdp_version.h
+++ b/libqdutils/mdp_version.h
@@ -74,6 +74,16 @@
#define WRITEBACK_PANEL 'a'
#define LVDS_PANEL 'b'
+class MDPVersion;
+
+struct Split {
+ int mLeft;
+ int mRight;
+ Split() : mLeft(0), mRight(0){}
+ int left() { return mLeft; }
+ int right() { return mRight; }
+ friend class MDPVersion;
+};
class MDPVersion : public Singleton <MDPVersion>
{
@@ -91,6 +101,8 @@
uint32_t getMaxMDPDownscale();
bool supportsBWC();
bool is8x26();
+ int getLeftSplit() { return mSplit.left(); }
+ int getRightSplit() { return mSplit.right(); }
private:
int mMDPVersion;
char mPanelType;
@@ -101,6 +113,7 @@
uint8_t mDMAPipes;
uint32_t mFeatures;
uint32_t mMDPDownscale;
+ Split mSplit;
};
}; //namespace qdutils
#endif //INCLUDE_LIBQCOMUTILS_MDPVER