diff --git a/libhwcomposer/hwc.cpp b/libhwcomposer/hwc.cpp
index c28cf03..13d6274 100644
--- a/libhwcomposer/hwc.cpp
+++ b/libhwcomposer/hwc.cpp
@@ -24,6 +24,7 @@
 
 #include <overlay.h>
 #include <fb_priv.h>
+#include <mdp_version.h>
 #include "hwc_utils.h"
 #include "hwc_qbuf.h"
 #include "hwc_video.h"
diff --git a/libhwcomposer/hwc_copybit.cpp b/libhwcomposer/hwc_copybit.cpp
index 7892632..99aecca 100644
--- a/libhwcomposer/hwc_copybit.cpp
+++ b/libhwcomposer/hwc_copybit.cpp
@@ -380,7 +380,7 @@
 {
     // XXX : TODO , currently returning false for MDP4 targets,
     // This has to be modified after adding C2D support.
-    if(ctx->hasOverlay)
+    if(ctx->mMDP.hasOverlay)
         return false;
 
     framebuffer_device_t* fbDev = ctx->mFbDev;
@@ -397,7 +397,7 @@
             LINK_eglGetCurrentSurface == NULL )
         return false;
 
-    if(!ctx->hasOverlay) {
+    if(!ctx->mMDP.hasOverlay) {
         if (numYUVBuffers)
             return true;
     }
diff --git a/libhwcomposer/hwc_uimirror.cpp b/libhwcomposer/hwc_uimirror.cpp
index 3bbe30e..d2b766d 100644
--- a/libhwcomposer/hwc_uimirror.cpp
+++ b/libhwcomposer/hwc_uimirror.cpp
@@ -61,7 +61,7 @@
     sState = ovutils::OV_CLOSED;
     sIsUiMirroringOn = false;
 
-    if(!ctx->hasOverlay) {
+    if(!ctx->mMDP.hasOverlay) {
        ALOGD_IF(HWC_UI_MIRROR, "%s, this hw doesnt support mirroring",
                                                                __FUNCTION__);
        return false;
diff --git a/libhwcomposer/hwc_utils.cpp b/libhwcomposer/hwc_utils.cpp
index 0b62a98..dd890a9 100644
--- a/libhwcomposer/hwc_utils.cpp
+++ b/libhwcomposer/hwc_utils.cpp
@@ -40,8 +40,9 @@
     openFramebufferDevice(ctx);
     ctx->mOverlay = overlay::Overlay::getInstance();
     ctx->qbuf = new QueuedBufferStore();
-    ctx->mdpVersion = qdutils::MDPVersion::getInstance().getMDPVersion();
-    ctx->hasOverlay = qdutils::MDPVersion::getInstance().hasOverlay();
+    ctx->mMDP.version = qdutils::MDPVersion::getInstance().getMDPVersion();
+    ctx->mMDP.hasOverlay = qdutils::MDPVersion::getInstance().hasOverlay();
+    ctx->mMDP.panel = qdutils::MDPVersion::getInstance().getPanelType();
     ctx->mCopybitEngine = CopybitEngine::getInstance();
     ctx->mExtDisplay = new ExternalDisplay(ctx);
     MDPComp::init(ctx);
@@ -49,7 +50,7 @@
     init_uevent_thread(ctx);
 
     ALOGI("Initializing Qualcomm Hardware Composer");
-    ALOGI("MDP version: %d", ctx->mdpVersion);
+    ALOGI("MDP version: %d", ctx->mMDP.version);
 }
 
 void closeContext(hwc_context_t *ctx)
diff --git a/libhwcomposer/hwc_utils.h b/libhwcomposer/hwc_utils.h
index a6c1446..9ce0815 100644
--- a/libhwcomposer/hwc_utils.h
+++ b/libhwcomposer/hwc_utils.h
@@ -37,6 +37,14 @@
 namespace qhwc {
 //fwrd decl
 class QueuedBufferStore;
+class ExternalDisplay;
+class CopybitEngine;
+
+struct MDPInfo {
+    int version;
+    char panel;
+    bool hasOverlay;
+};
 
 enum external_display_type {
     EXT_TYPE_NONE,
@@ -57,8 +65,6 @@
 };
 
 
-class ExternalDisplay;
-class CopybitEngine;
 // -----------------------------------------------------------------------------
 // Utility functions - implemented in hwc_utils.cpp
 void dumpLayer(hwc_layer_t const* l);
@@ -102,8 +108,6 @@
 struct hwc_context_t {
     hwc_composer_device_t device;
     int numHwLayers;
-    int mdpVersion;
-    bool hasOverlay;
     int overlayInUse;
 
     //Framebuffer device
@@ -121,6 +125,8 @@
     // External display related information
     qhwc::ExternalDisplay *mExtDisplay;
 
+    qhwc::MDPInfo mMDP;
+
 };
 
 #endif //HWC_UTILS_H
diff --git a/libhwcomposer/hwc_video.cpp b/libhwcomposer/hwc_video.cpp
index 190e31b..5b20ba4 100644
--- a/libhwcomposer/hwc_video.cpp
+++ b/libhwcomposer/hwc_video.cpp
@@ -35,7 +35,7 @@
 //Cache stats, figure out the state, config overlay
 bool VideoOverlay::prepare(hwc_context_t *ctx, hwc_layer_list_t *list) {
     sIsModeOn = false;
-    if(!ctx->hasOverlay) {
+    if(!ctx->mMDP.hasOverlay) {
        ALOGD_IF(VIDEO_DEBUG,"%s, this hw doesnt support overlay", __FUNCTION__);
        return false;
     }
diff --git a/libqdutils/mdp_version.cpp b/libqdutils/mdp_version.cpp
index 25f1142..78ca52f 100644
--- a/libqdutils/mdp_version.cpp
+++ b/libqdutils/mdp_version.cpp
@@ -34,10 +34,11 @@
 ANDROID_SINGLETON_STATIC_INSTANCE(qdutils::MDPVersion);
 namespace qdutils {
 
-static int getMDPVersionFromFB()
+MDPVersion::MDPVersion()
 {
     int fb_fd = open("/dev/graphics/fb0", O_RDWR);
     int mdp_version = MDP_V_UNKNOWN;
+    char panel_type = 0;
     struct fb_fix_screeninfo fb_finfo;
     if (ioctl(fb_fd, FBIOGET_FSCREENINFO, &fb_finfo) < 0) {
         ALOGE("FBIOGET_FSCREENINFO failed");
@@ -61,18 +62,18 @@
         } else {
             mdp_version = MDP_V_UNKNOWN;
         }
+        int len = strlen("msmfbXX_");
+        if (mdp_version == MDP_V3_0_3)
+            len++;
+        panel_type = fb_finfo.id[len];
+
     }
     close(fb_fd);
-    return mdp_version;
-}
-
-MDPVersion::MDPVersion()
-{
-    mMDPVersion = getMDPVersionFromFB();
+    mMDPVersion = mdp_version;
+    mHasOverlay = false;
     if((mMDPVersion >= MDP_V4_0) || (mMDPVersion == MDP_V_UNKNOWN))
         mHasOverlay = true;
-    else
-        mHasOverlay = false;
+    mPanelType = panel_type;
 }
 }; //namespace qdutils
 
diff --git a/libqdutils/mdp_version.h b/libqdutils/mdp_version.h
index 5ec0c67..9137cd4 100644
--- a/libqdutils/mdp_version.h
+++ b/libqdutils/mdp_version.h
@@ -52,15 +52,29 @@
     MDSS_V5     = 500,
 };
 
+#define MDDI_PANEL       '1'
+#define EBI2_PANEL       '2'
+#define LCDC_PANEL       '3'
+#define EXT_MDDI_PANEL   '4'
+#define TV_PANEL         '5'
+#define DTV_PANEL        '7'
+#define MIPI_VIDEO_PANEL '8'
+#define MIPI_CMD_PANEL   '9'
+#define WRITEBACK_PANEL  'a'
+#define LVDS_PANEL       'b'
+
+
 class MDPVersion : public Singleton <MDPVersion>
 {
 public:
     MDPVersion();
     ~MDPVersion() { }
     int getMDPVersion() {return mMDPVersion;}
+    char getPanelType() {return mPanelType;}
     bool hasOverlay() {return mHasOverlay;}
 private:
     int mMDPVersion;
+    char mPanelType;
     bool mHasOverlay;
 };
 }; //namespace qdutils
