diff --git a/packages/linux/patches/linux-3.1.2-081-drm_cea_modes.patch b/packages/linux/patches/linux-3.1.2-081-drm_cea_modes.patch new file mode 100644 index 0000000000..57058c1107 --- /dev/null +++ b/packages/linux/patches/linux-3.1.2-081-drm_cea_modes.patch @@ -0,0 +1,358 @@ +diff -Naur linux-3.1.2/drivers/gpu/drm/drm_edid.c linux-3.1.2.patch/drivers/gpu/drm/drm_edid.c +--- linux-3.1.2/drivers/gpu/drm/drm_edid.c 2011-11-21 23:47:46.000000000 +0100 ++++ linux-3.1.2.patch/drivers/gpu/drm/drm_edid.c 2011-11-23 00:35:54.444938016 +0100 +@@ -1318,6 +1318,7 @@ + + #define HDMI_IDENTIFIER 0x000C03 + #define AUDIO_BLOCK 0x01 ++#define VIDEO_BLOCK 0x02 + #define VENDOR_BLOCK 0x03 + #define EDID_BASIC_AUDIO (1 << 6) + +@@ -1347,6 +1348,47 @@ + } + EXPORT_SYMBOL(drm_find_cea_extension); + ++static int ++do_cea_modes (struct drm_connector *connector, u8 *db, u8 len) ++{ ++ struct drm_device *dev = connector->dev; ++ u8 * mode, cea_mode; ++ int modes = 0; ++ ++ for (mode = db; mode < db + len; mode++) { ++ cea_mode = (*mode & 127) - 1; /* CEA modes are numbered 1..127 */ ++ if (cea_mode < drm_num_cea_modes) { ++ struct drm_display_mode *newmode; ++ newmode = drm_mode_duplicate(dev, ++ &edid_cea_modes[cea_mode]); ++ if (newmode) { ++ drm_mode_probed_add(connector, newmode); ++ modes++; ++ } ++ } ++ } ++ ++ return modes; ++} ++ ++static int ++add_cea_modes(struct drm_connector *connector, struct edid *edid) ++{ ++ u8 * cea = drm_find_cea_extension(edid); ++ u8 * db, dbl; ++ int modes = 0; ++ ++ if (cea && cea[1] >= 3) { ++ for (db = cea + 4; db < cea + cea[2]; db += dbl + 1) { ++ dbl = db[0] & 0x1f; ++ if (((db[0] & 0xe0) >> 5) == VIDEO_BLOCK) ++ modes += do_cea_modes (connector, db+1, dbl); ++ } ++ } ++ ++ return modes; ++} ++ + /** + * drm_detect_hdmi_monitor - detect whether monitor is hdmi. + * @edid: monitor EDID information +@@ -1550,6 +1592,7 @@ + num_modes += add_standard_modes(connector, edid); + num_modes += add_established_modes(connector, edid); + num_modes += add_inferred_modes(connector, edid); ++ num_modes += add_cea_modes(connector, edid); + + if (quirks & (EDID_QUIRK_PREFER_LARGE_60 | EDID_QUIRK_PREFER_LARGE_75)) + edid_fixup_preferred(connector, quirks); +diff -Naur linux-3.1.2/drivers/gpu/drm/drm_edid_modes.h linux-3.1.2.patch/drivers/gpu/drm/drm_edid_modes.h +--- linux-3.1.2/drivers/gpu/drm/drm_edid_modes.h 2011-11-21 23:47:46.000000000 +0100 ++++ linux-3.1.2.patch/drivers/gpu/drm/drm_edid_modes.h 2011-11-23 00:31:42.218643364 +0100 +@@ -378,3 +378,287 @@ + { 1920, 1440, 75, 0 }, + }; + static const int num_est3_modes = sizeof(est3_modes) / sizeof(est3_modes[0]); ++ ++/* ++ * Probably taken from CEA-861 spec. ++ * This table is converted from xorg's hw/xfree86/modes/xf86EdidModes.c. ++ */ ++static const struct drm_display_mode edid_cea_modes[] = { ++ /* 640x480@60Hz */ ++ { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 25175, 640, 656, ++ 752, 800, 0, 480, 490, 492, 525, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, ++ /* 720x480@60Hz */ ++ { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 27000, 720, 736, ++ 798, 858, 0, 480, 489, 495, 525, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, ++ /* 720x480@60Hz */ ++ { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 27000, 720, 736, ++ 798, 858, 0, 480, 489, 495, 525, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, ++ /* 1280x720@60Hz */ ++ { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 1390, ++ 1430, 1650, 0, 720, 725, 730, 750, 0, ++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, ++ /* 1920x1080i@60Hz */ ++ { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2008, ++ 2052, 2200, 0, 1080, 1084, 1094, 1125, 0, ++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | ++ DRM_MODE_FLAG_INTERLACE) }, ++ /* 1440x480i@60Hz */ ++ { DRM_MODE("1440x480", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478, ++ 1602, 1716, 0, 480, 488, 494, 525, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | ++ DRM_MODE_FLAG_INTERLACE) }, ++ /* 1440x480i@60Hz */ ++ { DRM_MODE("1440x480", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478, ++ 1602, 1716, 0, 480, 488, 494, 525, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | ++ DRM_MODE_FLAG_INTERLACE) }, ++ /* 1440x240@60Hz */ ++ { DRM_MODE("1440x240", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478, ++ 1602, 1716, 0, 240, 244, 247, 262, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, ++ /* 1440x240@60Hz */ ++ { DRM_MODE("1440x240", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478, ++ 1602, 1716, 0, 240, 244, 247, 262, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, ++ /* 2880x480i@60Hz */ ++ { DRM_MODE("2880x480", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2956, ++ 3204, 3432, 0, 480, 488, 494, 525, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | ++ DRM_MODE_FLAG_INTERLACE) }, ++ /* 2880x480i@60Hz */ ++ { DRM_MODE("2880x480", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2956, ++ 3204, 3432, 0, 480, 488, 494, 525, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | ++ DRM_MODE_FLAG_INTERLACE) }, ++ /* 2880x240@60Hz */ ++ { DRM_MODE("2880x240", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2956, ++ 3204, 3432, 0, 240, 244, 247, 262, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, ++ /* 2880x240@60Hz */ ++ { DRM_MODE("2880x240", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2956, ++ 3204, 3432, 0, 240, 244, 247, 262, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, ++ /* 1440x480@60Hz */ ++ { DRM_MODE("1440x480", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1472, ++ 1596, 1716, 0, 480, 489, 495, 525, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, ++ /* 1440x480@60Hz */ ++ { DRM_MODE("1440x480", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1472, ++ 1596, 1716, 0, 480, 489, 495, 525, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, ++ /* 1920x1080@60Hz */ ++ { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2008, ++ 2052, 2200, 0, 1080, 1084, 1089, 1125, 0, ++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, ++ /* 720x576@50Hz */ ++ { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 27000, 720, 732, ++ 796, 864, 0, 576, 581, 586, 625, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, ++ /* 720x576@50Hz */ ++ { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 27000, 720, 732, ++ 796, 864, 0, 576, 581, 586, 625, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, ++ /* 1280x720@50Hz */ ++ { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 1720, ++ 1760, 1980, 0, 720, 725, 730, 750, 0, ++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, ++ /* 1920x1080i@50Hz */ ++ { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2448, ++ 2492, 2640, 0, 1080, 1084, 1094, 1125, 0, ++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | ++ DRM_MODE_FLAG_INTERLACE) }, ++ /* 1440x576i@50Hz */ ++ { DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464, ++ 1590, 1728, 0, 576, 580, 586, 625, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | ++ DRM_MODE_FLAG_INTERLACE) }, ++ /* 1440x576i@50Hz */ ++ { DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464, ++ 1590, 1728, 0, 576, 580, 586, 625, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | ++ DRM_MODE_FLAG_INTERLACE) }, ++ /* 1440x288@50Hz */ ++ { DRM_MODE("1440x288", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464, ++ 1590, 1728, 0, 288, 290, 293, 312, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, ++ /* 1440x288@50Hz */ ++ { DRM_MODE("1440x288", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464, ++ 1590, 1728, 0, 288, 290, 293, 312, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, ++ /* 2880x576i@50Hz */ ++ { DRM_MODE("2880x576", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2928, ++ 3180, 3456, 0, 576, 580, 586, 625, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | ++ DRM_MODE_FLAG_INTERLACE) }, ++ /* 2880x576i@50Hz */ ++ { DRM_MODE("2880x576", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2928, ++ 3180, 3456, 0, 576, 580, 586, 625, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | ++ DRM_MODE_FLAG_INTERLACE) }, ++ /* 2880x288@50Hz */ ++ { DRM_MODE("2880x288", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2928, ++ 3180, 3456, 0, 288, 290, 293, 312, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, ++ /* 2880x288@50Hz */ ++ { DRM_MODE("2880x288", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2928, ++ 3180, 3456, 0, 288, 290, 293, 312, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, ++ /* 1440x576@50Hz */ ++ { DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464, ++ 1592, 1728, 0, 576, 581, 586, 625, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, ++ /* 1440x576@50Hz */ ++ { DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464, ++ 1592, 1728, 0, 576, 581, 586, 625, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, ++ /* 1920x1080@50Hz */ ++ { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2448, ++ 2492, 2640, 0, 1080, 1084, 1089, 1125, 0, ++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, ++ /* 1920x1080@24Hz */ ++ { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2558, ++ 2602, 2750, 0, 1080, 1084, 1089, 1125, 0, ++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, ++ /* 1920x1080@25Hz */ ++ { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2448, ++ 2492, 2640, 0, 1080, 1084, 1089, 1125, 0, ++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, ++ /* 1920x1080@30Hz */ ++ { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2008, ++ 2052, 2200, 0, 1080, 1084, 1089, 1125, 0, ++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, ++ /* 2880x480@60Hz */ ++ { DRM_MODE("2880x480", DRM_MODE_TYPE_DRIVER, 108000, 2880, 2944, ++ 3192, 3432, 0, 480, 489, 495, 525, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, ++ /* 2880x480@60Hz */ ++ { DRM_MODE("2880x480", DRM_MODE_TYPE_DRIVER, 108000, 2880, 2944, ++ 3192, 3432, 0, 480, 489, 495, 525, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, ++ /* 2880x576@50Hz */ ++ { DRM_MODE("2880x576", DRM_MODE_TYPE_DRIVER, 108000, 2880, 2928, ++ 3184, 3456, 0, 576, 581, 586, 625, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, ++ /* 2880x576@50Hz */ ++ { DRM_MODE("2880x576", DRM_MODE_TYPE_DRIVER, 108000, 2880, 2928, ++ 3184, 3456, 0, 576, 581, 586, 625, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, ++ /* 1920x1080i@50Hz */ ++ { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 72000, 1920, 1952, ++ 2120, 2304, 0, 1080, 1126, 1136, 1250, 0, ++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC | ++ DRM_MODE_FLAG_INTERLACE) }, ++ /* 1920x1080i@100Hz */ ++ { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2448, ++ 2492, 2640, 0, 1080, 1084, 1094, 1125, 0, ++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | ++ DRM_MODE_FLAG_INTERLACE) }, ++ /* 1280x720@100Hz */ ++ { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 148500, 1280, 1720, ++ 1760, 1980, 0, 720, 725, 730, 750, 0, ++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, ++ /* 720x576@100Hz */ ++ { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 54000, 720, 732, ++ 796, 864, 0, 576, 581, 586, 625, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, ++ /* 720x576@100Hz */ ++ { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 54000, 720, 732, ++ 796, 864, 0, 576, 581, 586, 625, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, ++ /* 1440x576i@100Hz */ ++ { DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464, ++ 1590, 1728, 0, 576, 580, 586, 625, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, ++ /* 1440x576i@100Hz */ ++ { DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464, ++ 1590, 1728, 0, 576, 580, 586, 625, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, ++ /* 1920x1080i@120Hz */ ++ { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2008, ++ 2052, 2200, 0, 1080, 1084, 1094, 1125, 0, ++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | ++ DRM_MODE_FLAG_INTERLACE) }, ++ /* 1280x720@120Hz */ ++ { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 148500, 1280, 1390, ++ 1430, 1650, 0, 720, 725, 730, 750, 0, ++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, ++ /* 720x480@120Hz */ ++ { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 54000, 720, 736, ++ 798, 858, 0, 480, 489, 495, 525, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, ++ /* 720x480@120Hz */ ++ { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 54000, 720, 736, ++ 798, 858, 0, 480, 489, 495, 525, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, ++ /* 1440x480i@120Hz */ ++ { DRM_MODE("1440x480", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1478, ++ 1602, 1716, 0, 480, 488, 494, 525, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | ++ DRM_MODE_FLAG_INTERLACE) }, ++ /* 1440x480i@120Hz */ ++ { DRM_MODE("1440x480", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1478, ++ 1602, 1716, 0, 480, 488, 494, 525, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | ++ DRM_MODE_FLAG_INTERLACE) }, ++ /* 720x576@200Hz */ ++ { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 108000, 720, 732, ++ 796, 864, 0, 576, 581, 586, 625, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, ++ /* 720x576@200Hz */ ++ { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 108000, 720, 732, ++ 796, 864, 0, 576, 581, 586, 625, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, ++ /* 1440x576i@200Hz */ ++ { DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1464, ++ 1590, 1728, 0, 576, 580, 586, 625, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | ++ DRM_MODE_FLAG_INTERLACE) }, ++ /* 1440x576i@200Hz */ ++ { DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1464, ++ 1590, 1728, 0, 576, 580, 586, 625, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | ++ DRM_MODE_FLAG_INTERLACE) }, ++ /* 720x480@240Hz */ ++ { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 108000, 720, 736, ++ 798, 858, 0, 480, 489, 495, 525, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, ++ /* 720x480@240Hz */ ++ { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 108000, 720, 736, ++ 798, 858, 0, 480, 489, 495, 525, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, ++ /* 1440x480i@240 */ ++ { DRM_MODE("1440x480", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1478, ++ 1602, 1716, 0, 480, 488, 494, 525, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | ++ DRM_MODE_FLAG_INTERLACE) }, ++ /* 1440x480i@240 */ ++ { DRM_MODE("1440x480", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1478, ++ 1602, 1716, 0, 480, 488, 494, 525, 0, ++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | ++ DRM_MODE_FLAG_INTERLACE) }, ++ /* 1280x720@24Hz */ ++ { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 59400, 1280, 3040, ++ 3080, 3300, 0, 720, 725, 730, 750, 0, ++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, ++ /* 1280x720@25Hz */ ++ { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 3700, ++ 3740, 3960, 0, 720, 725, 730, 750, 0, ++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, ++ /* 1280x720@30Hz */ ++ { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 3040, ++ 3080, 3300, 0, 720, 725, 730, 750, 0, ++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, ++ /* 1920x1080@120Hz */ ++ { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 297000, 1920, 2008, ++ 2052, 2200, 0, 1080, 1084, 1089, 1125, 0, ++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, ++ /* 1920x1080@100Hz */ ++ { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 297000, 1920, 2448, ++ 2492, 2640, 0, 1080, 1084, 1094, 1125, 0, ++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, ++}; ++static const int drm_num_cea_modes = ++ sizeof (edid_cea_modes) / sizeof (edid_cea_modes[0]);