diff --git a/libexternal/external.cpp b/libexternal/external.cpp
index cf84a39..4385a3d 100644
--- a/libexternal/external.cpp
+++ b/libexternal/external.cpp
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2010 The Android Open Source Project
- * Copyright (C) 2012, The Linux Foundation. All rights reserved.
+ * Copyright (C) 2012-2013, The Linux Foundation. All rights reserved.
  *
  * Not a Contribution, Apache license notifications and license are
  * retained for attribution purposes only.
@@ -28,6 +28,7 @@
 #include <utils/Log.h>
 
 #include <linux/msm_mdp.h>
+#include <video/msm_hdmi_modes.h>
 #include <linux/fb.h>
 #include <sys/ioctl.h>
 #include <sys/poll.h>
@@ -171,6 +172,15 @@
     // This helps for framework reboot or adb shell stop/start
     writeHPDOption(0);
 
+    // for HDMI - retreive all the modes supported by the driver
+    if(mHdmiFbNum != -1) {
+        supported_video_mode_lut =
+                        new msm_hdmi_mode_timing_info[HDMI_VFRMT_MAX];
+        // Populate the mode table for supported modes
+        MSM_HDMI_MODES_INIT_TIMINGS(supported_video_mode_lut);
+        MSM_HDMI_MODES_SET_SUPP_TIMINGS(supported_video_mode_lut,
+                                        MSM_HDMI_MODES_ALL);
+    }
 }
 
 void ExternalDisplay::setEDIDMode(int resMode) {
@@ -285,93 +295,40 @@
 
 ExternalDisplay::~ExternalDisplay()
 {
+    delete [] supported_video_mode_lut;
     closeFrameBuffer();
 }
 
-struct disp_mode_timing_type {
-    int  video_format;
-
-    int  active_h;
-    int  active_v;
-
-    int  front_porch_h;
-    int  pulse_width_h;
-    int  back_porch_h;
-
-    int  front_porch_v;
-    int  pulse_width_v;
-    int  back_porch_v;
-
-    int  pixel_freq;
-    bool interlaced;
-
-    void set_info(struct fb_var_screeninfo &info) const;
-};
-
-void disp_mode_timing_type::set_info(struct fb_var_screeninfo &info) const
+/*
+ * sets the fb_var_screeninfo from the hdmi_mode_timing_info
+ */
+void setDisplayTiming(struct fb_var_screeninfo &info,
+                                const msm_hdmi_mode_timing_info* mode)
 {
     info.reserved[0] = 0;
     info.reserved[1] = 0;
     info.reserved[2] = 0;
 #ifndef FB_METADATA_VIDEO_INFO_CODE_SUPPORT
-    info.reserved[3] = (info.reserved[3] & 0xFFFF) | (video_format << 16);
+    info.reserved[3] = (info.reserved[3] & 0xFFFF) |
+              (mode->video_format << 16);
 #endif
     info.xoffset = 0;
     info.yoffset = 0;
-    info.xres = active_h;
-    info.yres = active_v;
+    info.xres = mode->active_h;
+    info.yres = mode->active_v;
 
-    info.pixclock = pixel_freq*1000;
-    info.vmode = interlaced ? FB_VMODE_INTERLACED : FB_VMODE_NONINTERLACED;
+    info.pixclock = (mode->pixel_freq)*1000;
+    info.vmode = mode->interlaced ?
+                    FB_VMODE_INTERLACED : FB_VMODE_NONINTERLACED;
 
-    info.right_margin = front_porch_h;
-    info.hsync_len = pulse_width_h;
-    info.left_margin = back_porch_h;
-    info.lower_margin = front_porch_v;
-    info.vsync_len = pulse_width_v;
-    info.upper_margin = back_porch_v;
+    info.right_margin = mode->front_porch_h;
+    info.hsync_len = mode->pulse_width_h;
+    info.left_margin = mode->back_porch_h;
+    info.lower_margin = mode->front_porch_v;
+    info.vsync_len = mode->pulse_width_v;
+    info.upper_margin = mode->back_porch_v;
 }
 
-/* Video formates supported by the HDMI Standard */
-/* Indicates the resolution, pix clock and the aspect ratio */
-#define m640x480p60_4_3         1
-#define m720x480p60_4_3         2
-#define m720x480p60_16_9        3
-#define m1280x720p60_16_9       4
-#define m1920x1080i60_16_9      5
-#define m1440x480i60_4_3        6
-#define m1440x480i60_16_9       7
-#define m1920x1080p60_16_9      16
-#define m720x576p50_4_3         17
-#define m720x576p50_16_9        18
-#define m1280x720p50_16_9       19
-#define m1440x576i50_4_3        21
-#define m1440x576i50_16_9       22
-#define m1920x1080p50_16_9      31
-#define m1920x1080p24_16_9      32
-#define m1920x1080p25_16_9      33
-#define m1920x1080p30_16_9      34
-
-static struct disp_mode_timing_type supported_video_mode_lut[] = {
-    {m640x480p60_4_3,     640,  480,  16,  96,  48, 10, 2, 33,  25200, false},
-    {m720x480p60_4_3,     720,  480,  16,  62,  60,  9, 6, 30,  27030, false},
-    {m720x480p60_16_9,    720,  480,  16,  62,  60,  9, 6, 30,  27030, false},
-    {m1280x720p60_16_9,  1280,  720, 110,  40, 220,  5, 5, 20,  74250, false},
-    {m1920x1080i60_16_9, 1920,  540,  88,  44, 148,  2, 5,  5,  74250, false},
-    {m1440x480i60_4_3,   1440,  240,  38, 124, 114,  4, 3, 15,  27000, true},
-    {m1440x480i60_16_9,  1440,  240,  38, 124, 114,  4, 3, 15,  27000, true},
-    {m1920x1080p60_16_9, 1920, 1080,  88,  44, 148,  4, 5, 36, 148500, false},
-    {m720x576p50_4_3,     720,  576,  12,  64,  68,  5, 5, 39,  27000, false},
-    {m720x576p50_16_9,    720,  576,  12,  64,  68,  5, 5, 39,  27000, false},
-    {m1280x720p50_16_9,  1280,  720, 440,  40, 220,  5, 5, 20,  74250, false},
-    {m1440x576i50_4_3,   1440,  288,  24, 126, 138,  2, 3, 19,  27000, true},
-    {m1440x576i50_16_9,  1440,  288,  24, 126, 138,  2, 3, 19,  27000, true},
-    {m1920x1080p50_16_9, 1920, 1080, 528,  44, 148,  4, 5, 36, 148500, false},
-    {m1920x1080p24_16_9, 1920, 1080, 638,  44, 148,  4, 5, 36,  74250, false},
-    {m1920x1080p25_16_9, 1920, 1080, 528,  44, 148,  4, 5, 36,  74250, false},
-    {m1920x1080p30_16_9, 1920, 1080,  88,  44, 148,  4, 5, 36,  74250, false},
-};
-
 int ExternalDisplay::parseResolution(char* edidStr, int* edidModes)
 {
     char delim = ',';
@@ -475,42 +432,42 @@
 int ExternalDisplay::getModeOrder(int mode)
 {
     // XXX: We dont support interlaced modes but having
-    // it here for for future
+    // it here for future
     switch (mode) {
         default:
-        case m1440x480i60_4_3:
+        case HDMI_VFRMT_1440x480i60_4_3:
             return 1; // 480i 4:3
-        case m1440x480i60_16_9:
+        case HDMI_VFRMT_1440x480i60_16_9:
             return 2; // 480i 16:9
-        case m1440x576i50_4_3:
+        case HDMI_VFRMT_1440x576i50_4_3:
             return 3; // i576i 4:3
-        case m1440x576i50_16_9:
+        case HDMI_VFRMT_1440x576i50_16_9:
             return 4; // 576i 16:9
-        case m640x480p60_4_3:
+        case HDMI_VFRMT_640x480p60_4_3:
             return 5; // 640x480 4:3
-        case m720x480p60_4_3:
+        case HDMI_VFRMT_720x480p60_4_3:
             return 6; // 480p 4:3
-        case m720x480p60_16_9:
+        case HDMI_VFRMT_720x480p60_16_9:
             return 7; // 480p 16:9
-        case m720x576p50_4_3:
+        case HDMI_VFRMT_720x576p50_4_3:
             return 8; // 576p 4:3
-        case m720x576p50_16_9:
+        case HDMI_VFRMT_720x576p50_16_9:
             return 9; // 576p 16:9
-        case m1920x1080i60_16_9:
+        case HDMI_VFRMT_1920x1080i60_16_9:
             return 10; // 1080i 16:9
-        case m1280x720p50_16_9:
+        case HDMI_VFRMT_1280x720p50_16_9:
             return 11; // 720p@50Hz
-        case m1280x720p60_16_9:
+        case HDMI_VFRMT_1280x720p60_16_9:
             return 12; // 720p@60Hz
-        case m1920x1080p24_16_9:
+        case HDMI_VFRMT_1920x1080p24_16_9:
             return 13; //1080p@24Hz
-        case m1920x1080p25_16_9:
+        case HDMI_VFRMT_1920x1080p25_16_9:
             return 14; //108-p@25Hz
-        case m1920x1080p30_16_9:
+        case HDMI_VFRMT_1920x1080p30_16_9:
             return 15; //1080p@30Hz
-        case m1920x1080p50_16_9:
+        case HDMI_VFRMT_1920x1080p50_16_9:
             return 16; //1080p@50Hz
-        case m1920x1080p60_16_9:
+        case HDMI_VFRMT_1920x1080p60_16_9:
             return 17; //1080p@60Hz
     }
 }
@@ -532,7 +489,7 @@
 // Get the best mode for the current HD TV
 int ExternalDisplay::getBestMode() {
     int bestOrder = 0;
-    int bestMode = m640x480p60_4_3;
+    int bestMode = HDMI_VFRMT_640x480p60_4_3;
     Mutex::Autolock lock(mExtDispLock);
     // for all the edid read, get the best mode
     for(int i = 0; i < mModeCount; i++) {
@@ -562,11 +519,11 @@
 bool ExternalDisplay::isInterlacedMode(int ID) {
     bool interlaced = false;
     switch(ID) {
-        case m1440x480i60_4_3:
-        case m1440x480i60_16_9:
-        case m1440x576i50_4_3:
-        case m1440x576i50_16_9:
-        case m1920x1080i60_16_9:
+        case HDMI_VFRMT_1440x480i60_4_3:
+        case HDMI_VFRMT_1440x480i60_16_9:
+        case HDMI_VFRMT_1440x576i50_4_3:
+        case HDMI_VFRMT_1440x576i50_16_9:
+        case HDMI_VFRMT_1920x1080i60_16_9:
             interlaced = true;
         default:
             interlaced = false;
@@ -583,7 +540,6 @@
         ALOGD("In %s: FBIOGET_VSCREENINFO failed Err Str = %s", __FUNCTION__,
                                                             strerror(errno));
     }
-
     ALOGD_IF(DEBUG, "%s: GET Info<ID=%d %dx%d (%d,%d,%d),"
             "(%d,%d,%d) %dMHz>", __FUNCTION__,
             mVInfo.reserved[3], mVInfo.xres, mVInfo.yres,
@@ -592,17 +548,17 @@
             mVInfo.pixclock/1000/1000);
     //If its a new ID - update var_screeninfo
     if ((isValidMode(ID)) && mCurrentMode != ID) {
-        const struct disp_mode_timing_type *mode =
+        const struct msm_hdmi_mode_timing_info *mode =
             &supported_video_mode_lut[0];
-        unsigned count =  sizeof(supported_video_mode_lut)/sizeof
-            (*supported_video_mode_lut);
-        for (unsigned int i = 0; i < count; ++i) {
-            const struct disp_mode_timing_type *cur =
-                &supported_video_mode_lut[i];
-            if (cur->video_format == ID)
+        for (unsigned int i = 0; i < HDMI_VFRMT_MAX; ++i) {
+            const struct msm_hdmi_mode_timing_info *cur =
+                                        &supported_video_mode_lut[i];
+            if (cur->video_format == (uint32_t)ID) {
                 mode = cur;
+                break;
+            }
         }
-        mode->set_info(mVInfo);
+        setDisplayTiming(mVInfo, mode);
         ALOGD_IF(DEBUG, "%s: SET Info<ID=%d => Info<ID=%d %dx %d"
                  "(%d,%d,%d), (%d,%d,%d) %dMHz>", __FUNCTION__, ID,
                  mode->video_format, mVInfo.xres, mVInfo.yres,
@@ -703,54 +659,54 @@
 
 void ExternalDisplay::getAttrForMode(int& width, int& height, int& fps) {
     switch (mCurrentMode) {
-        case m640x480p60_4_3:
+        case HDMI_VFRMT_640x480p60_4_3:
             width = 640;
             height = 480;
             fps = 60;
             break;
-        case m720x480p60_4_3:
-        case m720x480p60_16_9:
+        case HDMI_VFRMT_720x480p60_4_3:
+        case HDMI_VFRMT_720x480p60_16_9:
             width = 720;
             height = 480;
             fps = 60;
             break;
-        case m720x576p50_4_3:
-        case m720x576p50_16_9:
+        case HDMI_VFRMT_720x576p50_4_3:
+        case HDMI_VFRMT_720x576p50_16_9:
             width = 720;
             height = 576;
             fps = 50;
             break;
-        case m1280x720p50_16_9:
+        case HDMI_VFRMT_1280x720p50_16_9:
             width = 1280;
             height = 720;
             fps = 50;
             break;
-        case m1280x720p60_16_9:
+        case HDMI_VFRMT_1280x720p60_16_9:
             width = 1280;
             height = 720;
             fps = 60;
             break;
-        case m1920x1080p24_16_9:
+        case HDMI_VFRMT_1920x1080p24_16_9:
             width = 1920;
             height = 1080;
             fps = 24;
             break;
-        case m1920x1080p25_16_9:
+        case HDMI_VFRMT_1920x1080p25_16_9:
             width = 1920;
             height = 1080;
             fps = 25;
             break;
-        case m1920x1080p30_16_9:
+        case HDMI_VFRMT_1920x1080p30_16_9:
             width = 1920;
             height = 1080;
             fps = 30;
             break;
-        case m1920x1080p50_16_9:
+        case HDMI_VFRMT_1920x1080p50_16_9:
             width = 1920;
             height = 1080;
             fps = 50;
             break;
-        case m1920x1080p60_16_9:
+        case HDMI_VFRMT_1920x1080p60_16_9:
             width = 1920;
             height = 1080;
             fps = 60;
diff --git a/libexternal/external.h b/libexternal/external.h
index 847b25c..ce8e5d7 100644
--- a/libexternal/external.h
+++ b/libexternal/external.h
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2010 The Android Open Source Project
- * Copyright (C) 2012, The Linux Foundation. All rights reserved.
+ * Copyright (C) 2012-2013, The Linux Foundation. All rights reserved.
  *
  * Not a Contribution, Apache license notifications and license are
  * retained for attribution purposes only.
@@ -25,6 +25,7 @@
 #include <linux/fb.h>
 
 struct hwc_context_t;
+struct msm_hdmi_mode_timing_info;
 
 namespace qhwc {
 
@@ -94,6 +95,8 @@
     int mHdmiFbNum;
     int mWfdFbNum;
     int mExtDpyNum;
+    // Holds all the HDMI modes and timing info supported by driver
+    msm_hdmi_mode_timing_info* supported_video_mode_lut;
 };
 
 }; //qhwc
