video: add short video mode decode to fbmon
authorErik Gilling <konkers@android.com>
Thu, 4 Nov 2010 20:48:53 +0000 (13:48 -0700)
committerErik Gilling <konkers@android.com>
Tue, 9 Nov 2010 21:54:42 +0000 (13:54 -0800)
Change-Id: Ida529e096688c231029628d3d16d6f8569bfe2c9
Signed-off-by: Erik Gilling <konkers@android.com>
drivers/video/fbmon.c
drivers/video/modedb.c
include/linux/fb.h

index a0b5a93b72d2f558059d0333a43b27eed7f74f19..0841e6b27e5c7a21684b36a745b514029044c39e 100644 (file)
@@ -976,6 +976,7 @@ void fb_edid_to_monspecs(unsigned char *edid, struct fb_monspecs *specs)
 void fb_edid_add_monspecs(unsigned char *edid, struct fb_monspecs *specs)
 {
        unsigned char *block;
+       unsigned char *dtd_block;
        struct fb_videomode *mode, *m;
        int num = 0, i, first = 1;
 
@@ -992,14 +993,42 @@ void fb_edid_add_monspecs(unsigned char *edid, struct fb_monspecs *specs)
        if (mode == NULL)
                return;
 
-       block = edid + edid[0x2];
+       block = edid + 0x4;
+       dtd_block = edid + edid[0x2];
+
+       DPRINTK("  Short Video Modes\n");
+       while (block < dtd_block) {
+               unsigned tag = block[0] >> 5;
+               unsigned len = block[0] & 0x1f;
+
+               block++;
+               if (dtd_block - block < len)
+                       break;
+
+               if (tag == 0x2) {
+                       for (i = 0; i < len; i++) {
+                               unsigned m = block[i];
+                               if (m > 0 && m < CEA_MODEDB_SIZE) {
+                                       memcpy(&mode[num], &cea_modes[m],
+                                              sizeof(mode[num]));
+                                       DPRINTK("  %d: %dx%d @ %d\n", m,
+                                               cea_modes[m].xres, cea_modes[m].yres,
+                                               cea_modes[m].refresh);
+
+                                       num++;
+                               }
+                       }
+               }
+
+               block += len;
+       }
 
        DPRINTK("  Extended Detailed Timings\n");
 
        for (i = 0; i < (128 - edid[0x2]) / DETAILED_TIMING_DESCRIPTION_SIZE;
-            i++, block += DETAILED_TIMING_DESCRIPTION_SIZE) {
-               if (!(block[0] == 0x00 && block[1] == 0x00)) {
-                       get_detailed_timing(block, &mode[num]);
+            i++, dtd_block += DETAILED_TIMING_DESCRIPTION_SIZE) {
+               if (!(dtd_block[0] == 0x00 && dtd_block[1] == 0x00)) {
+                       get_detailed_timing(dtd_block, &mode[num]);
                        if (first) {
                                mode[num].flag |= FB_MODE_IS_FIRST;
                                first = 0;
index cf68c0ba8d1bad5e2da826dc16c23c878d68b40a..209e6be1163e340275fa878f6df34bf25346f374 100644 (file)
@@ -402,6 +402,459 @@ const struct fb_videomode vesa_modes[] = {
          FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
 };
 EXPORT_SYMBOL(vesa_modes);
+
+const struct fb_videomode cea_modes[CEA_MODEDB_SIZE] = {
+       {},
+       /* 1: 640x480p @ 59.94Hz/60Hz */
+       {.refresh = 59, .xres = 640, .yres = 480, .pixclock = 39721,
+        .left_margin = 48, .right_margin = 16,
+        .upper_margin = 33, .lower_margin = 1,
+        .hsync_len = 96, .vsync_len = 2,
+        .sync = 0,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 2: 720x480p @ 59.94Hz/60Hz */
+       {.refresh = 59, .xres = 720, .yres = 480, .pixclock = 37037,
+        .left_margin = 60, .right_margin = 16,
+        .upper_margin = 30, .lower_margin = 9,
+        .hsync_len = 62, .vsync_len = 6,
+        .sync = 0,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 3: 720x480p @ 59.94Hz/60Hz */
+       {.refresh = 59, .xres = 720, .yres = 480, .pixclock = 37037,
+        .left_margin = 60, .right_margin = 16,
+        .upper_margin = 30, .lower_margin = 9,
+        .hsync_len = 62, .vsync_len = 6,
+        .sync = 0,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 4: 1280x720p @ 59.94Hz/60Hz */
+       {.refresh = 60, .xres = 1280, .yres = 720, .pixclock = 13468,
+        .left_margin = 220, .right_margin = 110,
+        .upper_margin = 20, .lower_margin = 5,
+        .hsync_len = 40, .vsync_len = 5,
+        .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 5: 1920x1080i @ 59.94Hz/60Hz */
+       {.refresh = 60, .xres = 1920, .yres = 1080, .pixclock = 13468,
+        .left_margin = 148, .right_margin = 88,
+        .upper_margin = 15, .lower_margin = 2,
+        .hsync_len = 44, .vsync_len = 5,
+        .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+        .vmode = FB_VMODE_INTERLACED},
+       /* 6: 720(1440)x480i @ 59.94Hz/60Hz */
+       {.refresh = 59, .xres = 1440, .yres = 480, .pixclock = 37037,
+        .left_margin = 114, .right_margin = 38,
+        .upper_margin = 15, .lower_margin = 4,
+        .hsync_len = 124, .vsync_len = 3,
+        .sync = 0,
+        .vmode = FB_VMODE_INTERLACED},
+       /* 7: 720(1440)x480i @ 59.94Hz/60Hz */
+       {.refresh = 59, .xres = 1440, .yres = 480, .pixclock = 37037,
+        .left_margin = 114, .right_margin = 38,
+        .upper_margin = 15, .lower_margin = 4,
+        .hsync_len = 124, .vsync_len = 3,
+        .sync = 0,
+        .vmode = FB_VMODE_INTERLACED},
+       /* 8: 720(1440)x240p @ 59.94Hz/60Hz */
+       {.refresh = 59, .xres = 1440, .yres = 240, .pixclock = 37037,
+        .left_margin = 114, .right_margin = 38,
+        .upper_margin = 15, .lower_margin = 5,
+        .hsync_len = 124, .vsync_len = 3,
+        .sync = 0,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 9: 720(1440)x240p @ 59.94Hz/60Hz */
+       {.refresh = 59, .xres = 1440, .yres = 240, .pixclock = 37037,
+        .left_margin = 114, .right_margin = 38,
+        .upper_margin = 15, .lower_margin = 5,
+        .hsync_len = 124, .vsync_len = 3,
+        .sync = 0,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 10: 2880x480i @ 59.94Hz/60Hz */
+       {.refresh = 59, .xres = 2880, .yres = 480, .pixclock = 18518,
+        .left_margin = 228, .right_margin = 76,
+        .upper_margin = 15, .lower_margin = 4,
+        .hsync_len = 248, .vsync_len = 3,
+        .sync = 0,
+        .vmode = FB_VMODE_INTERLACED},
+       /* 11: 2880x480i @ 59.94Hz/60Hz */
+       {.refresh = 59, .xres = 2880, .yres = 480, .pixclock = 18518,
+        .left_margin = 228, .right_margin = 76,
+        .upper_margin = 15, .lower_margin = 4,
+        .hsync_len = 248, .vsync_len = 3,
+        .sync = 0,
+        .vmode = FB_VMODE_INTERLACED},
+       /* 12: 2880x240p @ 59.94Hz/60Hz */
+       {.refresh = 59, .xres = 2880, .yres = 240, .pixclock = 18518,
+        .left_margin = 228, .right_margin = 76,
+        .upper_margin = 15, .lower_margin = 5,
+        .hsync_len = 248, .vsync_len = 3,
+        .sync = 0,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 13: 2880x240p @ 59.94Hz/60Hz */
+       {.refresh = 59, .xres = 2880, .yres = 240, .pixclock = 18518,
+        .left_margin = 228, .right_margin = 76,
+        .upper_margin = 15, .lower_margin = 5,
+        .hsync_len = 248, .vsync_len = 3,
+        .sync = 0,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 14: 1440x480p @ 59.94Hz/60Hz */
+       {.refresh = 59, .xres = 1440, .yres = 480, .pixclock = 18518,
+        .left_margin = 120, .right_margin = 32,
+        .upper_margin = 30, .lower_margin = 9,
+        .hsync_len = 124, .vsync_len = 6,
+        .sync = 0,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 15: 1440x480p @ 59.94Hz/60Hz */
+       {.refresh = 59, .xres = 1440, .yres = 480, .pixclock = 18518,
+        .left_margin = 120, .right_margin = 32,
+        .upper_margin = 30, .lower_margin = 9,
+        .hsync_len = 124, .vsync_len = 6,
+        .sync = 0,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 16: 1920x1080p @ 59.94Hz/60Hz */
+       {.refresh = 60, .xres = 1920, .yres = 1080, .pixclock = 6734,
+        .left_margin = 148, .right_margin = 88,
+        .upper_margin = 36, .lower_margin = 4,
+        .hsync_len = 44, .vsync_len = 5,
+        .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 17: 720x576p @ 50Hz */
+       {.refresh = 50, .xres = 720, .yres = 576, .pixclock = 37037,
+        .left_margin = 68, .right_margin = 12,
+        .upper_margin = 39, .lower_margin = 5,
+        .hsync_len = 64, .vsync_len = 5,
+        .sync = 0,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 18: 720x576p @ 50Hz */
+       {.refresh = 50, .xres = 720, .yres = 576, .pixclock = 37037,
+        .left_margin = 68, .right_margin = 12,
+        .upper_margin = 39, .lower_margin = 5,
+        .hsync_len = 64, .vsync_len = 5,
+        .sync = 0,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 19: 1280x720p @ 50Hz */
+       {.refresh = 50, .xres = 1280, .yres = 720, .pixclock = 13468,
+        .left_margin = 220, .right_margin = 440,
+        .upper_margin = 20, .lower_margin = 5,
+        .hsync_len = 40, .vsync_len = 5,
+        .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 20: 1920x1080i @ 50Hz */
+       {.refresh = 50, .xres = 1920, .yres = 1080, .pixclock = 13468,
+        .left_margin = 148, .right_margin = 528,
+        .upper_margin = 15, .lower_margin = 2,
+        .hsync_len = 44, .vsync_len = 5,
+        .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+        .vmode = FB_VMODE_INTERLACED},
+       /* 21: 720(1440)x576i @ 50Hz */
+       {.refresh = 50, .xres = 1440, .yres = 576, .pixclock = 37037,
+        .left_margin = 138, .right_margin = 24,
+        .upper_margin = 19, .lower_margin = 2,
+        .hsync_len = 126, .vsync_len = 3,
+        .sync = 0,
+        .vmode = FB_VMODE_INTERLACED},
+       /* 22: 720(1440)x576i @ 50Hz */
+       {.refresh = 50, .xres = 1440, .yres = 576, .pixclock = 37037,
+        .left_margin = 138, .right_margin = 24,
+        .upper_margin = 19, .lower_margin = 2,
+        .hsync_len = 126, .vsync_len = 3,
+        .sync = 0,
+        .vmode = FB_VMODE_INTERLACED},
+       /* 23: 720(1440)x288p @ 50Hz */
+       {.refresh = 49, .xres = 1440, .yres = 288, .pixclock = 37037,
+        .left_margin = 138, .right_margin = 24,
+        .upper_margin = 19, .lower_margin = 4,
+        .hsync_len = 126, .vsync_len = 3,
+        .sync = 0,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 24: 720(1440)x288p @ 50Hz */
+       {.refresh = 49, .xres = 1440, .yres = 288, .pixclock = 37037,
+        .left_margin = 138, .right_margin = 24,
+        .upper_margin = 19, .lower_margin = 4,
+        .hsync_len = 126, .vsync_len = 3,
+        .sync = 0,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 25: 2880x576i @ 50Hz */
+       {.refresh = 50, .xres = 2880, .yres = 576, .pixclock = 18518,
+        .left_margin = 276, .right_margin = 48,
+        .upper_margin = 19, .lower_margin = 2,
+        .hsync_len = 252, .vsync_len = 3,
+        .sync = 0,
+        .vmode = FB_VMODE_INTERLACED},
+       /* 26: 2880x576i @ 50Hz */
+       {.refresh = 50, .xres = 2880, .yres = 576, .pixclock = 18518,
+        .left_margin = 276, .right_margin = 48,
+        .upper_margin = 19, .lower_margin = 2,
+        .hsync_len = 252, .vsync_len = 3,
+        .sync = 0,
+        .vmode = FB_VMODE_INTERLACED},
+       /* 27: 2880x288p @ 50Hz */
+       {.refresh = 49, .xres = 2880, .yres = 288, .pixclock = 18518,
+        .left_margin = 276, .right_margin = 48,
+        .upper_margin = 19, .lower_margin = 4,
+        .hsync_len = 252, .vsync_len = 3,
+        .sync = 0,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 28: 2880x288p @ 50Hz */
+       {.refresh = 49, .xres = 2880, .yres = 288, .pixclock = 18518,
+        .left_margin = 276, .right_margin = 48,
+        .upper_margin = 19, .lower_margin = 4,
+        .hsync_len = 252, .vsync_len = 3,
+        .sync = 0,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 29: 1440x576p @ 50Hz */
+       {.refresh = 50, .xres = 1440, .yres = 576, .pixclock = 18518,
+        .left_margin = 136, .right_margin = 24,
+        .upper_margin = 39, .lower_margin = 5,
+        .hsync_len = 128, .vsync_len = 5,
+        .sync = 0,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 30: 1440x576p @ 50Hz */
+       {.refresh = 50, .xres = 1440, .yres = 576, .pixclock = 18518,
+        .left_margin = 136, .right_margin = 24,
+        .upper_margin = 39, .lower_margin = 5,
+        .hsync_len = 128, .vsync_len = 5,
+        .sync = 0,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 31: 1920x1080p @ 50Hz */
+       {.refresh = 50, .xres = 1920, .yres = 1080, .pixclock = 6734,
+        .left_margin = 148, .right_margin = 528,
+        .upper_margin = 36, .lower_margin = 4,
+        .hsync_len = 44, .vsync_len = 5,
+        .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 32: 1920x1080p @ 23.97Hz/24Hz */
+       {.refresh = 24, .xres = 1920, .yres = 1080, .pixclock = 13468,
+        .left_margin = 148, .right_margin = 638,
+        .upper_margin = 36, .lower_margin = 4,
+        .hsync_len = 44, .vsync_len = 5,
+        .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 33: 1920x1080p @ 25Hz */
+       {.refresh = 25, .xres = 1920, .yres = 1080, .pixclock = 13468,
+        .left_margin = 148, .right_margin = 528,
+        .upper_margin = 36, .lower_margin = 4,
+        .hsync_len = 44, .vsync_len = 5,
+        .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 34: 1920x1080p @ 29.97Hz/30Hz */
+       {.refresh = 30, .xres = 1920, .yres = 1080, .pixclock = 13468,
+        .left_margin = 148, .right_margin = 88,
+        .upper_margin = 36, .lower_margin = 4,
+        .hsync_len = 44, .vsync_len = 5,
+        .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 35: 2880x480p @ 59.94Hz/60Hz */
+       {.refresh = 59, .xres = 2880, .yres = 480, .pixclock = 9259,
+        .left_margin = 240, .right_margin = 64,
+        .upper_margin = 30, .lower_margin = 9,
+        .hsync_len = 248, .vsync_len = 6,
+        .sync = 0,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 36: 2880x480p @ 59.94Hz/60Hz */
+       {.refresh = 59, .xres = 2880, .yres = 480, .pixclock = 9259,
+        .left_margin = 240, .right_margin = 64,
+        .upper_margin = 30, .lower_margin = 9,
+        .hsync_len = 248, .vsync_len = 6,
+        .sync = 0,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 37: 2880x576p @ 50Hz */
+       {.refresh = 50, .xres = 2880, .yres = 576, .pixclock = 9259,
+        .left_margin = 272, .right_margin = 48,
+        .upper_margin = 39, .lower_margin = 5,
+        .hsync_len = 256, .vsync_len = 5,
+        .sync = 0,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 38: 2880x576p @ 50Hz */
+       {.refresh = 50, .xres = 2880, .yres = 576, .pixclock = 9259,
+        .left_margin = 272, .right_margin = 48,
+        .upper_margin = 39, .lower_margin = 5,
+        .hsync_len = 256, .vsync_len = 5,
+        .sync = 0,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 39: 1920x1080i @ 50Hz */
+       {.refresh = 50, .xres = 1920, .yres = 1080, .pixclock = 13888,
+        .left_margin = 184, .right_margin = 32,
+        .upper_margin = 57, .lower_margin = 2,
+        .hsync_len = 168, .vsync_len = 5,
+        .sync = FB_SYNC_HOR_HIGH_ACT,
+        .vmode = FB_VMODE_INTERLACED},
+       /* 40: 1920x1080i @ 100Hz */
+       {.refresh = 100, .xres = 1920, .yres = 1080, .pixclock = 6734,
+        .left_margin = 148, .right_margin = 528,
+        .upper_margin = 15, .lower_margin = 2,
+        .hsync_len = 44, .vsync_len = 5,
+        .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+        .vmode = FB_VMODE_INTERLACED},
+       /* 41: 1280x720p @ 100Hz */
+       {.refresh = 100, .xres = 1280, .yres = 720, .pixclock = 6734,
+        .left_margin = 220, .right_margin = 440,
+        .upper_margin = 20, .lower_margin = 5,
+        .hsync_len = 40, .vsync_len = 5,
+        .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 42: 720x576p @ 100Hz */
+       {.refresh = 100, .xres = 720, .yres = 576, .pixclock = 18518,
+        .left_margin = 68, .right_margin = 12,
+        .upper_margin = 39, .lower_margin = 5,
+        .hsync_len = 64, .vsync_len = 5,
+        .sync = 0,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 43: 720x576p @ 100Hz */
+       {.refresh = 100, .xres = 720, .yres = 576, .pixclock = 18518,
+        .left_margin = 68, .right_margin = 12,
+        .upper_margin = 39, .lower_margin = 5,
+        .hsync_len = 64, .vsync_len = 5,
+        .sync = 0,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 44: 720(1440)x576i @ 100Hz */
+       {.refresh = 100, .xres = 1440, .yres = 576, .pixclock = 18518,
+        .left_margin = 138, .right_margin = 24,
+        .upper_margin = 19, .lower_margin = 2,
+        .hsync_len = 126, .vsync_len = 3,
+        .sync = 0,
+        .vmode = FB_VMODE_INTERLACED},
+       /* 45: 720(1440)x576i @ 100Hz */
+       {.refresh = 100, .xres = 1440, .yres = 576, .pixclock = 18518,
+        .left_margin = 138, .right_margin = 24,
+        .upper_margin = 19, .lower_margin = 2,
+        .hsync_len = 126, .vsync_len = 3,
+        .sync = 0,
+        .vmode = FB_VMODE_INTERLACED},
+       /* 46: 1920x1080i @ 119.88/120Hz */
+       {.refresh = 120, .xres = 1920, .yres = 1080, .pixclock = 6734,
+        .left_margin = 148, .right_margin = 88,
+        .upper_margin = 15, .lower_margin = 2,
+        .hsync_len = 44, .vsync_len = 5,
+        .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+        .vmode = FB_VMODE_INTERLACED},
+       /* 47: 1280x720p @ 119.88/120Hz */
+       {.refresh = 120, .xres = 1280, .yres = 720, .pixclock = 6734,
+        .left_margin = 220, .right_margin = 110,
+        .upper_margin = 20, .lower_margin = 5,
+        .hsync_len = 40, .vsync_len = 5,
+        .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 48: 720x480p @ 119.88/120Hz */
+       {.refresh = 119, .xres = 720, .yres = 480, .pixclock = 18518,
+        .left_margin = 60, .right_margin = 16,
+        .upper_margin = 30, .lower_margin = 9,
+        .hsync_len = 62, .vsync_len = 6,
+        .sync = 0,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 49: 720x480p @ 119.88/120Hz */
+       {.refresh = 119, .xres = 720, .yres = 480, .pixclock = 18518,
+        .left_margin = 60, .right_margin = 16,
+        .upper_margin = 30, .lower_margin = 9,
+        .hsync_len = 62, .vsync_len = 6,
+        .sync = 0,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 50: 720(1440)x480i @ 119.88/120Hz */
+       {.refresh = 119, .xres = 1440, .yres = 480, .pixclock = 18518,
+        .left_margin = 114, .right_margin = 38,
+        .upper_margin = 15, .lower_margin = 4,
+        .hsync_len = 124, .vsync_len = 3,
+        .sync = 0,
+        .vmode = FB_VMODE_INTERLACED},
+       /* 51: 720(1440)x480i @ 119.88/120Hz */
+       {.refresh = 119, .xres = 1440, .yres = 480, .pixclock = 18518,
+        .left_margin = 114, .right_margin = 38,
+        .upper_margin = 15, .lower_margin = 4,
+        .hsync_len = 124, .vsync_len = 3,
+        .sync = 0,
+        .vmode = FB_VMODE_INTERLACED},
+       /* 52: 720x576p @ 200Hz */
+       {.refresh = 200, .xres = 720, .yres = 576, .pixclock = 9259,
+        .left_margin = 68, .right_margin = 12,
+        .upper_margin = 39, .lower_margin = 5,
+        .hsync_len = 64, .vsync_len = 5,
+        .sync = 0,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 53: 720x576p @ 200Hz */
+       {.refresh = 200, .xres = 720, .yres = 576, .pixclock = 9259,
+        .left_margin = 68, .right_margin = 12,
+        .upper_margin = 39, .lower_margin = 5,
+        .hsync_len = 64, .vsync_len = 5,
+        .sync = 0,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 54: 720(1440)x576i @ 200Hz */
+       {.refresh = 200, .xres = 1440, .yres = 576, .pixclock = 9259,
+        .left_margin = 138, .right_margin = 24,
+        .upper_margin = 19, .lower_margin = 2,
+        .hsync_len = 126, .vsync_len = 3,
+        .sync = 0,
+        .vmode = FB_VMODE_INTERLACED},
+       /* 55: 720(1440)x576i @ 200Hz */
+       {.refresh = 200, .xres = 1440, .yres = 576, .pixclock = 9259,
+        .left_margin = 138, .right_margin = 24,
+        .upper_margin = 19, .lower_margin = 2,
+        .hsync_len = 126, .vsync_len = 3,
+        .sync = 0,
+        .vmode = FB_VMODE_INTERLACED},
+       /* 56: 720x480p @ 239.76/240Hz */
+       {.refresh = 239, .xres = 720, .yres = 480, .pixclock = 9259,
+        .left_margin = 60, .right_margin = 16,
+        .upper_margin = 30, .lower_margin = 9,
+        .hsync_len = 62, .vsync_len = 6,
+        .sync = 0,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 57: 720x480p @ 239.76/240Hz */
+       {.refresh = 239, .xres = 720, .yres = 480, .pixclock = 9259,
+        .left_margin = 60, .right_margin = 16,
+        .upper_margin = 30, .lower_margin = 9,
+        .hsync_len = 62, .vsync_len = 6,
+        .sync = 0,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 58: 720(1440)x480i @ 239.76/240Hz */
+       {.refresh = 239, .xres = 1440, .yres = 480, .pixclock = 9259,
+        .left_margin = 114, .right_margin = 38,
+        .upper_margin = 15, .lower_margin = 4,
+        .hsync_len = 124, .vsync_len = 3,
+        .sync = 0,
+        .vmode = FB_VMODE_INTERLACED},
+       /* 59: 720(1440)x480i @ 239.76/240Hz */
+       {.refresh = 239, .xres = 1440, .yres = 480, .pixclock = 9259,
+        .left_margin = 114, .right_margin = 38,
+        .upper_margin = 15, .lower_margin = 4,
+        .hsync_len = 124, .vsync_len = 3,
+        .sync = 0,
+        .vmode = FB_VMODE_INTERLACED},
+       /* 60: 1280x720p @ 23.97Hz/24Hz */
+       {.refresh = 24, .xres = 1280, .yres = 720, .pixclock = 16835,
+        .left_margin = 220, .right_margin = 1760,
+        .upper_margin = 20, .lower_margin = 5,
+        .hsync_len = 40, .vsync_len = 5,
+        .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 61: 1280x720p @ 25Hz */
+       {.refresh = 25, .xres = 1280, .yres = 720, .pixclock = 13468,
+        .left_margin = 220, .right_margin = 2420,
+        .upper_margin = 20, .lower_margin = 5,
+        .hsync_len = 40, .vsync_len = 5,
+        .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 62: 1280x720p @ 29.97Hz/30Hz */
+       {.refresh = 30, .xres = 1280, .yres = 720, .pixclock = 13468,
+        .left_margin = 220, .right_margin = 1760,
+        .upper_margin = 20, .lower_margin = 5,
+        .hsync_len = 40, .vsync_len = 5,
+        .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 63: 1920x1080p @ 119.88/120Hz */
+       {.refresh = 120, .xres = 1920, .yres = 1080, .pixclock = 3367,
+        .left_margin = 148, .right_margin = 88,
+        .upper_margin = 36, .lower_margin = 4,
+        .hsync_len = 44, .vsync_len = 5,
+        .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+        .vmode = FB_VMODE_NONINTERLACED},
+       /* 64: 1920x1080p @ 100Hz */
+       {.refresh = 100, .xres = 1920, .yres = 1080, .pixclock = 3367,
+        .left_margin = 148, .right_margin = 528,
+        .upper_margin = 36, .lower_margin = 4,
+        .hsync_len = 44, .vsync_len = 5,
+        .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+        .vmode = FB_VMODE_NONINTERLACED},
+};
+EXPORT_SYMBOL(cea_modes);
 #endif /* CONFIG_FB_MODE_HELPERS */
 
 /**
index 3fc99cbac5f25acacd2d828be91f694f82683d81..8b1f0a982bdbbdfd37df456e1f332aea8a04139a 100644 (file)
@@ -1094,6 +1094,7 @@ extern unsigned char *fb_ddc_read(struct i2c_adapter *adapter);
 
 /* drivers/video/modedb.c */
 #define VESA_MODEDB_SIZE 34
+#define CEA_MODEDB_SIZE 65
 extern void fb_var_to_videomode(struct fb_videomode *mode,
                                const struct fb_var_screeninfo *var);
 extern void fb_videomode_to_var(struct fb_var_screeninfo *var,
@@ -1145,6 +1146,7 @@ struct fb_videomode {
 
 extern const char *fb_mode_option;
 extern const struct fb_videomode vesa_modes[];
+extern const struct fb_videomode cea_modes[];
 
 struct fb_modelist {
        struct list_head list;