1 /* 2 * Copyright (c) 2007-2008 Intel Corporation 3 * Jesse Barnes <jesse.barnes@intel.com> 4 * Copyright 2010 Red Hat, Inc. 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a 7 * copy of this software and associated documentation files (the "Software"), 8 * to deal in the Software without restriction, including without limitation 9 * the rights to use, copy, modify, merge, publish, distribute, sub license, 10 * and/or sell copies of the Software, and to permit persons to whom the 11 * Software is furnished to do so, subject to the following conditions: 12 * 13 * The above copyright notice and this permission notice (including the 14 * next paragraph) shall be included in all copies or substantial portions 15 * of the Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 20 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 23 * DEALINGS IN THE SOFTWARE. 24 * 25 * $FreeBSD$ 26 */ 27 28 #include <dev/drm2/drmP.h> 29 #include <dev/drm2/drm_edid.h> 30 31 /* 32 * Autogenerated from the DMT spec. 33 * This table is copied from xfree86/modes/xf86EdidModes.c. 34 */ 35 static const struct drm_display_mode drm_dmt_modes[] = { 36 /* 640x350@85Hz */ 37 { DRM_MODE("640x350", DRM_MODE_TYPE_DRIVER, 31500, 640, 672, 38 736, 832, 0, 350, 382, 385, 445, 0, 39 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) }, 40 /* 640x400@85Hz */ 41 { DRM_MODE("640x400", DRM_MODE_TYPE_DRIVER, 31500, 640, 672, 42 736, 832, 0, 400, 401, 404, 445, 0, 43 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, 44 /* 720x400@85Hz */ 45 { DRM_MODE("720x400", DRM_MODE_TYPE_DRIVER, 35500, 720, 756, 46 828, 936, 0, 400, 401, 404, 446, 0, 47 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, 48 /* 640x480@60Hz */ 49 { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 25175, 640, 656, 50 752, 800, 0, 480, 489, 492, 525, 0, 51 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, 52 /* 640x480@72Hz */ 53 { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 31500, 640, 664, 54 704, 832, 0, 480, 489, 492, 520, 0, 55 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, 56 /* 640x480@75Hz */ 57 { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 31500, 640, 656, 58 720, 840, 0, 480, 481, 484, 500, 0, 59 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, 60 /* 640x480@85Hz */ 61 { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 36000, 640, 696, 62 752, 832, 0, 480, 481, 484, 509, 0, 63 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, 64 /* 800x600@56Hz */ 65 { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 36000, 800, 824, 66 896, 1024, 0, 600, 601, 603, 625, 0, 67 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 68 /* 800x600@60Hz */ 69 { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 40000, 800, 840, 70 968, 1056, 0, 600, 601, 605, 628, 0, 71 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 72 /* 800x600@72Hz */ 73 { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 50000, 800, 856, 74 976, 1040, 0, 600, 637, 643, 666, 0, 75 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 76 /* 800x600@75Hz */ 77 { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 49500, 800, 816, 78 896, 1056, 0, 600, 601, 604, 625, 0, 79 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 80 /* 800x600@85Hz */ 81 { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 56250, 800, 832, 82 896, 1048, 0, 600, 601, 604, 631, 0, 83 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 84 /* 800x600@120Hz RB */ 85 { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 73250, 800, 848, 86 880, 960, 0, 600, 603, 607, 636, 0, 87 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) }, 88 /* 848x480@60Hz */ 89 { DRM_MODE("848x480", DRM_MODE_TYPE_DRIVER, 33750, 848, 864, 90 976, 1088, 0, 480, 486, 494, 517, 0, 91 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 92 /* 1024x768@43Hz, interlace */ 93 { DRM_MODE("1024x768i", DRM_MODE_TYPE_DRIVER, 44900, 1024, 1032, 94 1208, 1264, 0, 768, 768, 772, 817, 0, 95 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | 96 DRM_MODE_FLAG_INTERLACE) }, 97 /* 1024x768@60Hz */ 98 { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 65000, 1024, 1048, 99 1184, 1344, 0, 768, 771, 777, 806, 0, 100 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, 101 /* 1024x768@70Hz */ 102 { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 75000, 1024, 1048, 103 1184, 1328, 0, 768, 771, 777, 806, 0, 104 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, 105 /* 1024x768@75Hz */ 106 { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 78750, 1024, 1040, 107 1136, 1312, 0, 768, 769, 772, 800, 0, 108 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 109 /* 1024x768@85Hz */ 110 { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 94500, 1024, 1072, 111 1168, 1376, 0, 768, 769, 772, 808, 0, 112 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 113 /* 1024x768@120Hz RB */ 114 { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 115500, 1024, 1072, 115 1104, 1184, 0, 768, 771, 775, 813, 0, 116 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) }, 117 /* 1152x864@75Hz */ 118 { DRM_MODE("1152x864", DRM_MODE_TYPE_DRIVER, 108000, 1152, 1216, 119 1344, 1600, 0, 864, 865, 868, 900, 0, 120 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 121 /* 1280x768@60Hz RB */ 122 { DRM_MODE("1280x768", DRM_MODE_TYPE_DRIVER, 68250, 1280, 1328, 123 1360, 1440, 0, 768, 771, 778, 790, 0, 124 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) }, 125 /* 1280x768@60Hz */ 126 { DRM_MODE("1280x768", DRM_MODE_TYPE_DRIVER, 79500, 1280, 1344, 127 1472, 1664, 0, 768, 771, 778, 798, 0, 128 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, 129 /* 1280x768@75Hz */ 130 { DRM_MODE("1280x768", DRM_MODE_TYPE_DRIVER, 102250, 1280, 1360, 131 1488, 1696, 0, 768, 771, 778, 805, 0, 132 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) }, 133 /* 1280x768@85Hz */ 134 { DRM_MODE("1280x768", DRM_MODE_TYPE_DRIVER, 117500, 1280, 1360, 135 1496, 1712, 0, 768, 771, 778, 809, 0, 136 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, 137 /* 1280x768@120Hz RB */ 138 { DRM_MODE("1280x768", DRM_MODE_TYPE_DRIVER, 140250, 1280, 1328, 139 1360, 1440, 0, 768, 771, 778, 813, 0, 140 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) }, 141 /* 1280x800@60Hz RB */ 142 { DRM_MODE("1280x800", DRM_MODE_TYPE_DRIVER, 71000, 1280, 1328, 143 1360, 1440, 0, 800, 803, 809, 823, 0, 144 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) }, 145 /* 1280x800@60Hz */ 146 { DRM_MODE("1280x800", DRM_MODE_TYPE_DRIVER, 83500, 1280, 1352, 147 1480, 1680, 0, 800, 803, 809, 831, 0, 148 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) }, 149 /* 1280x800@75Hz */ 150 { DRM_MODE("1280x800", DRM_MODE_TYPE_DRIVER, 106500, 1280, 1360, 151 1488, 1696, 0, 800, 803, 809, 838, 0, 152 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, 153 /* 1280x800@85Hz */ 154 { DRM_MODE("1280x800", DRM_MODE_TYPE_DRIVER, 122500, 1280, 1360, 155 1496, 1712, 0, 800, 803, 809, 843, 0, 156 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, 157 /* 1280x800@120Hz RB */ 158 { DRM_MODE("1280x800", DRM_MODE_TYPE_DRIVER, 146250, 1280, 1328, 159 1360, 1440, 0, 800, 803, 809, 847, 0, 160 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) }, 161 /* 1280x960@60Hz */ 162 { DRM_MODE("1280x960", DRM_MODE_TYPE_DRIVER, 108000, 1280, 1376, 163 1488, 1800, 0, 960, 961, 964, 1000, 0, 164 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 165 /* 1280x960@85Hz */ 166 { DRM_MODE("1280x960", DRM_MODE_TYPE_DRIVER, 148500, 1280, 1344, 167 1504, 1728, 0, 960, 961, 964, 1011, 0, 168 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 169 /* 1280x960@120Hz RB */ 170 { DRM_MODE("1280x960", DRM_MODE_TYPE_DRIVER, 175500, 1280, 1328, 171 1360, 1440, 0, 960, 963, 967, 1017, 0, 172 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) }, 173 /* 1280x1024@60Hz */ 174 { DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 108000, 1280, 1328, 175 1440, 1688, 0, 1024, 1025, 1028, 1066, 0, 176 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 177 /* 1280x1024@75Hz */ 178 { DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 135000, 1280, 1296, 179 1440, 1688, 0, 1024, 1025, 1028, 1066, 0, 180 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 181 /* 1280x1024@85Hz */ 182 { DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 157500, 1280, 1344, 183 1504, 1728, 0, 1024, 1025, 1028, 1072, 0, 184 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 185 /* 1280x1024@120Hz RB */ 186 { DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 187250, 1280, 1328, 187 1360, 1440, 0, 1024, 1027, 1034, 1084, 0, 188 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) }, 189 /* 1360x768@60Hz */ 190 { DRM_MODE("1360x768", DRM_MODE_TYPE_DRIVER, 85500, 1360, 1424, 191 1536, 1792, 0, 768, 771, 777, 795, 0, 192 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 193 /* 1360x768@120Hz RB */ 194 { DRM_MODE("1360x768", DRM_MODE_TYPE_DRIVER, 148250, 1360, 1408, 195 1440, 1520, 0, 768, 771, 776, 813, 0, 196 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) }, 197 /* 1400x1050@60Hz RB */ 198 { DRM_MODE("1400x1050", DRM_MODE_TYPE_DRIVER, 101000, 1400, 1448, 199 1480, 1560, 0, 1050, 1053, 1057, 1080, 0, 200 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) }, 201 /* 1400x1050@60Hz */ 202 { DRM_MODE("1400x1050", DRM_MODE_TYPE_DRIVER, 121750, 1400, 1488, 203 1632, 1864, 0, 1050, 1053, 1057, 1089, 0, 204 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, 205 /* 1400x1050@75Hz */ 206 { DRM_MODE("1400x1050", DRM_MODE_TYPE_DRIVER, 156000, 1400, 1504, 207 1648, 1896, 0, 1050, 1053, 1057, 1099, 0, 208 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, 209 /* 1400x1050@85Hz */ 210 { DRM_MODE("1400x1050", DRM_MODE_TYPE_DRIVER, 179500, 1400, 1504, 211 1656, 1912, 0, 1050, 1053, 1057, 1105, 0, 212 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, 213 /* 1400x1050@120Hz RB */ 214 { DRM_MODE("1400x1050", DRM_MODE_TYPE_DRIVER, 208000, 1400, 1448, 215 1480, 1560, 0, 1050, 1053, 1057, 1112, 0, 216 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) }, 217 /* 1440x900@60Hz RB */ 218 { DRM_MODE("1440x900", DRM_MODE_TYPE_DRIVER, 88750, 1440, 1488, 219 1520, 1600, 0, 900, 903, 909, 926, 0, 220 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) }, 221 /* 1440x900@60Hz */ 222 { DRM_MODE("1440x900", DRM_MODE_TYPE_DRIVER, 106500, 1440, 1520, 223 1672, 1904, 0, 900, 903, 909, 934, 0, 224 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, 225 /* 1440x900@75Hz */ 226 { DRM_MODE("1440x900", DRM_MODE_TYPE_DRIVER, 136750, 1440, 1536, 227 1688, 1936, 0, 900, 903, 909, 942, 0, 228 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, 229 /* 1440x900@85Hz */ 230 { DRM_MODE("1440x900", DRM_MODE_TYPE_DRIVER, 157000, 1440, 1544, 231 1696, 1952, 0, 900, 903, 909, 948, 0, 232 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, 233 /* 1440x900@120Hz RB */ 234 { DRM_MODE("1440x900", DRM_MODE_TYPE_DRIVER, 182750, 1440, 1488, 235 1520, 1600, 0, 900, 903, 909, 953, 0, 236 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) }, 237 /* 1600x1200@60Hz */ 238 { DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 162000, 1600, 1664, 239 1856, 2160, 0, 1200, 1201, 1204, 1250, 0, 240 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 241 /* 1600x1200@65Hz */ 242 { DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 175500, 1600, 1664, 243 1856, 2160, 0, 1200, 1201, 1204, 1250, 0, 244 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 245 /* 1600x1200@70Hz */ 246 { DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 189000, 1600, 1664, 247 1856, 2160, 0, 1200, 1201, 1204, 1250, 0, 248 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 249 /* 1600x1200@75Hz */ 250 { DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 202500, 1600, 1664, 251 1856, 2160, 0, 1200, 1201, 1204, 1250, 0, 252 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 253 /* 1600x1200@85Hz */ 254 { DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 229500, 1600, 1664, 255 1856, 2160, 0, 1200, 1201, 1204, 1250, 0, 256 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 257 /* 1600x1200@120Hz RB */ 258 { DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 268250, 1600, 1648, 259 1680, 1760, 0, 1200, 1203, 1207, 1271, 0, 260 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) }, 261 /* 1680x1050@60Hz RB */ 262 { DRM_MODE("1680x1050", DRM_MODE_TYPE_DRIVER, 119000, 1680, 1728, 263 1760, 1840, 0, 1050, 1053, 1059, 1080, 0, 264 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) }, 265 /* 1680x1050@60Hz */ 266 { DRM_MODE("1680x1050", DRM_MODE_TYPE_DRIVER, 146250, 1680, 1784, 267 1960, 2240, 0, 1050, 1053, 1059, 1089, 0, 268 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, 269 /* 1680x1050@75Hz */ 270 { DRM_MODE("1680x1050", DRM_MODE_TYPE_DRIVER, 187000, 1680, 1800, 271 1976, 2272, 0, 1050, 1053, 1059, 1099, 0, 272 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, 273 /* 1680x1050@85Hz */ 274 { DRM_MODE("1680x1050", DRM_MODE_TYPE_DRIVER, 214750, 1680, 1808, 275 1984, 2288, 0, 1050, 1053, 1059, 1105, 0, 276 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, 277 /* 1680x1050@120Hz RB */ 278 { DRM_MODE("1680x1050", DRM_MODE_TYPE_DRIVER, 245500, 1680, 1728, 279 1760, 1840, 0, 1050, 1053, 1059, 1112, 0, 280 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) }, 281 /* 1792x1344@60Hz */ 282 { DRM_MODE("1792x1344", DRM_MODE_TYPE_DRIVER, 204750, 1792, 1920, 283 2120, 2448, 0, 1344, 1345, 1348, 1394, 0, 284 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, 285 /* 1792x1344@75Hz */ 286 { DRM_MODE("1792x1344", DRM_MODE_TYPE_DRIVER, 261000, 1792, 1888, 287 2104, 2456, 0, 1344, 1345, 1348, 1417, 0, 288 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, 289 /* 1792x1344@120Hz RB */ 290 { DRM_MODE("1792x1344", DRM_MODE_TYPE_DRIVER, 333250, 1792, 1840, 291 1872, 1952, 0, 1344, 1347, 1351, 1423, 0, 292 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) }, 293 /* 1856x1392@60Hz */ 294 { DRM_MODE("1856x1392", DRM_MODE_TYPE_DRIVER, 218250, 1856, 1952, 295 2176, 2528, 0, 1392, 1393, 1396, 1439, 0, 296 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, 297 /* 1856x1392@75Hz */ 298 { DRM_MODE("1856x1392", DRM_MODE_TYPE_DRIVER, 288000, 1856, 1984, 299 2208, 2560, 0, 1392, 1395, 1399, 1500, 0, 300 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, 301 /* 1856x1392@120Hz RB */ 302 { DRM_MODE("1856x1392", DRM_MODE_TYPE_DRIVER, 356500, 1856, 1904, 303 1936, 2016, 0, 1392, 1395, 1399, 1474, 0, 304 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) }, 305 /* 1920x1200@60Hz RB */ 306 { DRM_MODE("1920x1200", DRM_MODE_TYPE_DRIVER, 154000, 1920, 1968, 307 2000, 2080, 0, 1200, 1203, 1209, 1235, 0, 308 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) }, 309 /* 1920x1200@60Hz */ 310 { DRM_MODE("1920x1200", DRM_MODE_TYPE_DRIVER, 193250, 1920, 2056, 311 2256, 2592, 0, 1200, 1203, 1209, 1245, 0, 312 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, 313 /* 1920x1200@75Hz */ 314 { DRM_MODE("1920x1200", DRM_MODE_TYPE_DRIVER, 245250, 1920, 2056, 315 2264, 2608, 0, 1200, 1203, 1209, 1255, 0, 316 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, 317 /* 1920x1200@85Hz */ 318 { DRM_MODE("1920x1200", DRM_MODE_TYPE_DRIVER, 281250, 1920, 2064, 319 2272, 2624, 0, 1200, 1203, 1209, 1262, 0, 320 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, 321 /* 1920x1200@120Hz RB */ 322 { DRM_MODE("1920x1200", DRM_MODE_TYPE_DRIVER, 317000, 1920, 1968, 323 2000, 2080, 0, 1200, 1203, 1209, 1271, 0, 324 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) }, 325 /* 1920x1440@60Hz */ 326 { DRM_MODE("1920x1440", DRM_MODE_TYPE_DRIVER, 234000, 1920, 2048, 327 2256, 2600, 0, 1440, 1441, 1444, 1500, 0, 328 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, 329 /* 1920x1440@75Hz */ 330 { DRM_MODE("1920x1440", DRM_MODE_TYPE_DRIVER, 297000, 1920, 2064, 331 2288, 2640, 0, 1440, 1441, 1444, 1500, 0, 332 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, 333 /* 1920x1440@120Hz RB */ 334 { DRM_MODE("1920x1440", DRM_MODE_TYPE_DRIVER, 380500, 1920, 1968, 335 2000, 2080, 0, 1440, 1443, 1447, 1525, 0, 336 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) }, 337 /* 2560x1600@60Hz RB */ 338 { DRM_MODE("2560x1600", DRM_MODE_TYPE_DRIVER, 268500, 2560, 2608, 339 2640, 2720, 0, 1600, 1603, 1609, 1646, 0, 340 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) }, 341 /* 2560x1600@60Hz */ 342 { DRM_MODE("2560x1600", DRM_MODE_TYPE_DRIVER, 348500, 2560, 2752, 343 3032, 3504, 0, 1600, 1603, 1609, 1658, 0, 344 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, 345 /* 2560x1600@75HZ */ 346 { DRM_MODE("2560x1600", DRM_MODE_TYPE_DRIVER, 443250, 2560, 2768, 347 3048, 3536, 0, 1600, 1603, 1609, 1672, 0, 348 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, 349 /* 2560x1600@85HZ */ 350 { DRM_MODE("2560x1600", DRM_MODE_TYPE_DRIVER, 505250, 2560, 2768, 351 3048, 3536, 0, 1600, 1603, 1609, 1682, 0, 352 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, 353 /* 2560x1600@120Hz RB */ 354 { DRM_MODE("2560x1600", DRM_MODE_TYPE_DRIVER, 552750, 2560, 2608, 355 2640, 2720, 0, 1600, 1603, 1609, 1694, 0, 356 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) }, 357 358 }; 359 static const int drm_num_dmt_modes = 360 sizeof(drm_dmt_modes) / sizeof(struct drm_display_mode); 361 362 static const struct drm_display_mode edid_est_modes[] = { 363 { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 40000, 800, 840, 364 968, 1056, 0, 600, 601, 605, 628, 0, 365 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 800x600@60Hz */ 366 { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 36000, 800, 824, 367 896, 1024, 0, 600, 601, 603, 625, 0, 368 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 800x600@56Hz */ 369 { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 31500, 640, 656, 370 720, 840, 0, 480, 481, 484, 500, 0, 371 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 640x480@75Hz */ 372 { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 31500, 640, 664, 373 704, 832, 0, 480, 489, 491, 520, 0, 374 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 640x480@72Hz */ 375 { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 30240, 640, 704, 376 768, 864, 0, 480, 483, 486, 525, 0, 377 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 640x480@67Hz */ 378 { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 25200, 640, 656, 379 752, 800, 0, 480, 490, 492, 525, 0, 380 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 640x480@60Hz */ 381 { DRM_MODE("720x400", DRM_MODE_TYPE_DRIVER, 35500, 720, 738, 382 846, 900, 0, 400, 421, 423, 449, 0, 383 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 720x400@88Hz */ 384 { DRM_MODE("720x400", DRM_MODE_TYPE_DRIVER, 28320, 720, 738, 385 846, 900, 0, 400, 412, 414, 449, 0, 386 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 720x400@70Hz */ 387 { DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 135000, 1280, 1296, 388 1440, 1688, 0, 1024, 1025, 1028, 1066, 0, 389 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 1280x1024@75Hz */ 390 { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 78800, 1024, 1040, 391 1136, 1312, 0, 768, 769, 772, 800, 0, 392 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 1024x768@75Hz */ 393 { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 75000, 1024, 1048, 394 1184, 1328, 0, 768, 771, 777, 806, 0, 395 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 1024x768@70Hz */ 396 { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 65000, 1024, 1048, 397 1184, 1344, 0, 768, 771, 777, 806, 0, 398 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 1024x768@60Hz */ 399 { DRM_MODE("1024x768i", DRM_MODE_TYPE_DRIVER,44900, 1024, 1032, 400 1208, 1264, 0, 768, 768, 776, 817, 0, 401 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | DRM_MODE_FLAG_INTERLACE) }, /* 1024x768@43Hz */ 402 { DRM_MODE("832x624", DRM_MODE_TYPE_DRIVER, 57284, 832, 864, 403 928, 1152, 0, 624, 625, 628, 667, 0, 404 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 832x624@75Hz */ 405 { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 49500, 800, 816, 406 896, 1056, 0, 600, 601, 604, 625, 0, 407 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 800x600@75Hz */ 408 { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 50000, 800, 856, 409 976, 1040, 0, 600, 637, 643, 666, 0, 410 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 800x600@72Hz */ 411 { DRM_MODE("1152x864", DRM_MODE_TYPE_DRIVER, 108000, 1152, 1216, 412 1344, 1600, 0, 864, 865, 868, 900, 0, 413 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 1152x864@75Hz */ 414 }; 415 416 struct minimode { 417 short w; 418 short h; 419 short r; 420 short rb; 421 }; 422 423 static const struct minimode est3_modes[] = { 424 /* byte 6 */ 425 { 640, 350, 85, 0 }, 426 { 640, 400, 85, 0 }, 427 { 720, 400, 85, 0 }, 428 { 640, 480, 85, 0 }, 429 { 848, 480, 60, 0 }, 430 { 800, 600, 85, 0 }, 431 { 1024, 768, 85, 0 }, 432 { 1152, 864, 75, 0 }, 433 /* byte 7 */ 434 { 1280, 768, 60, 1 }, 435 { 1280, 768, 60, 0 }, 436 { 1280, 768, 75, 0 }, 437 { 1280, 768, 85, 0 }, 438 { 1280, 960, 60, 0 }, 439 { 1280, 960, 85, 0 }, 440 { 1280, 1024, 60, 0 }, 441 { 1280, 1024, 85, 0 }, 442 /* byte 8 */ 443 { 1360, 768, 60, 0 }, 444 { 1440, 900, 60, 1 }, 445 { 1440, 900, 60, 0 }, 446 { 1440, 900, 75, 0 }, 447 { 1440, 900, 85, 0 }, 448 { 1400, 1050, 60, 1 }, 449 { 1400, 1050, 60, 0 }, 450 { 1400, 1050, 75, 0 }, 451 /* byte 9 */ 452 { 1400, 1050, 85, 0 }, 453 { 1680, 1050, 60, 1 }, 454 { 1680, 1050, 60, 0 }, 455 { 1680, 1050, 75, 0 }, 456 { 1680, 1050, 85, 0 }, 457 { 1600, 1200, 60, 0 }, 458 { 1600, 1200, 65, 0 }, 459 { 1600, 1200, 70, 0 }, 460 /* byte 10 */ 461 { 1600, 1200, 75, 0 }, 462 { 1600, 1200, 85, 0 }, 463 { 1792, 1344, 60, 0 }, 464 { 1792, 1344, 85, 0 }, 465 { 1856, 1392, 60, 0 }, 466 { 1856, 1392, 75, 0 }, 467 { 1920, 1200, 60, 1 }, 468 { 1920, 1200, 60, 0 }, 469 /* byte 11 */ 470 { 1920, 1200, 75, 0 }, 471 { 1920, 1200, 85, 0 }, 472 { 1920, 1440, 60, 0 }, 473 { 1920, 1440, 75, 0 }, 474 }; 475 static const int num_est3_modes = ARRAY_SIZE(est3_modes); 476 477 static const struct minimode extra_modes[] = { 478 { 1024, 576, 60, 0 }, 479 { 1366, 768, 60, 0 }, 480 { 1600, 900, 60, 0 }, 481 { 1680, 945, 60, 0 }, 482 { 1920, 1080, 60, 0 }, 483 { 2048, 1152, 60, 0 }, 484 { 2048, 1536, 60, 0 }, 485 }; 486 static const int num_extra_modes = ARRAY_SIZE(extra_modes); 487 488 /* 489 * Probably taken from CEA-861 spec. 490 * This table is converted from xorg's hw/xfree86/modes/xf86EdidModes.c. 491 */ 492 static const struct drm_display_mode edid_cea_modes[] = { 493 /* 1 - 640x480@60Hz */ 494 { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 25175, 640, 656, 495 752, 800, 0, 480, 490, 492, 525, 0, 496 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, 497 /* 2 - 720x480@60Hz */ 498 { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 27000, 720, 736, 499 798, 858, 0, 480, 489, 495, 525, 0, 500 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, 501 /* 3 - 720x480@60Hz */ 502 { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 27000, 720, 736, 503 798, 858, 0, 480, 489, 495, 525, 0, 504 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, 505 /* 4 - 1280x720@60Hz */ 506 { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 1390, 507 1430, 1650, 0, 720, 725, 730, 750, 0, 508 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 509 /* 5 - 1920x1080i@60Hz */ 510 { DRM_MODE("1920x1080i", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2008, 511 2052, 2200, 0, 1080, 1084, 1094, 1125, 0, 512 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | 513 DRM_MODE_FLAG_INTERLACE) }, 514 /* 6 - 1440x480i@60Hz */ 515 { DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478, 516 1602, 1716, 0, 480, 488, 494, 525, 0, 517 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 518 DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK) }, 519 /* 7 - 1440x480i@60Hz */ 520 { DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478, 521 1602, 1716, 0, 480, 488, 494, 525, 0, 522 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 523 DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK) }, 524 /* 8 - 1440x240@60Hz */ 525 { DRM_MODE("1440x240", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478, 526 1602, 1716, 0, 240, 244, 247, 262, 0, 527 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 528 DRM_MODE_FLAG_DBLCLK) }, 529 /* 9 - 1440x240@60Hz */ 530 { DRM_MODE("1440x240", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478, 531 1602, 1716, 0, 240, 244, 247, 262, 0, 532 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 533 DRM_MODE_FLAG_DBLCLK) }, 534 /* 10 - 2880x480i@60Hz */ 535 { DRM_MODE("2880x480i", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2956, 536 3204, 3432, 0, 480, 488, 494, 525, 0, 537 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 538 DRM_MODE_FLAG_INTERLACE) }, 539 /* 11 - 2880x480i@60Hz */ 540 { DRM_MODE("2880x480i", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2956, 541 3204, 3432, 0, 480, 488, 494, 525, 0, 542 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 543 DRM_MODE_FLAG_INTERLACE) }, 544 /* 12 - 2880x240@60Hz */ 545 { DRM_MODE("2880x240", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2956, 546 3204, 3432, 0, 240, 244, 247, 262, 0, 547 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, 548 /* 13 - 2880x240@60Hz */ 549 { DRM_MODE("2880x240", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2956, 550 3204, 3432, 0, 240, 244, 247, 262, 0, 551 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, 552 /* 14 - 1440x480@60Hz */ 553 { DRM_MODE("1440x480", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1472, 554 1596, 1716, 0, 480, 489, 495, 525, 0, 555 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, 556 /* 15 - 1440x480@60Hz */ 557 { DRM_MODE("1440x480", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1472, 558 1596, 1716, 0, 480, 489, 495, 525, 0, 559 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, 560 /* 16 - 1920x1080@60Hz */ 561 { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2008, 562 2052, 2200, 0, 1080, 1084, 1089, 1125, 0, 563 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 564 /* 17 - 720x576@50Hz */ 565 { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 27000, 720, 732, 566 796, 864, 0, 576, 581, 586, 625, 0, 567 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, 568 /* 18 - 720x576@50Hz */ 569 { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 27000, 720, 732, 570 796, 864, 0, 576, 581, 586, 625, 0, 571 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, 572 /* 19 - 1280x720@50Hz */ 573 { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 1720, 574 1760, 1980, 0, 720, 725, 730, 750, 0, 575 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 576 /* 20 - 1920x1080i@50Hz */ 577 { DRM_MODE("1920x1080i", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2448, 578 2492, 2640, 0, 1080, 1084, 1094, 1125, 0, 579 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | 580 DRM_MODE_FLAG_INTERLACE) }, 581 /* 21 - 1440x576i@50Hz */ 582 { DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464, 583 1590, 1728, 0, 576, 580, 586, 625, 0, 584 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 585 DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK) }, 586 /* 22 - 1440x576i@50Hz */ 587 { DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464, 588 1590, 1728, 0, 576, 580, 586, 625, 0, 589 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 590 DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK) }, 591 /* 23 - 1440x288@50Hz */ 592 { DRM_MODE("1440x288", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464, 593 1590, 1728, 0, 288, 290, 293, 312, 0, 594 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 595 DRM_MODE_FLAG_DBLCLK) }, 596 /* 24 - 1440x288@50Hz */ 597 { DRM_MODE("1440x288", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464, 598 1590, 1728, 0, 288, 290, 293, 312, 0, 599 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 600 DRM_MODE_FLAG_DBLCLK) }, 601 /* 25 - 2880x576i@50Hz */ 602 { DRM_MODE("2880x576i", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2928, 603 3180, 3456, 0, 576, 580, 586, 625, 0, 604 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 605 DRM_MODE_FLAG_INTERLACE) }, 606 /* 26 - 2880x576i@50Hz */ 607 { DRM_MODE("2880x576i", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2928, 608 3180, 3456, 0, 576, 580, 586, 625, 0, 609 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 610 DRM_MODE_FLAG_INTERLACE) }, 611 /* 27 - 2880x288@50Hz */ 612 { DRM_MODE("2880x288", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2928, 613 3180, 3456, 0, 288, 290, 293, 312, 0, 614 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, 615 /* 28 - 2880x288@50Hz */ 616 { DRM_MODE("2880x288", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2928, 617 3180, 3456, 0, 288, 290, 293, 312, 0, 618 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, 619 /* 29 - 1440x576@50Hz */ 620 { DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464, 621 1592, 1728, 0, 576, 581, 586, 625, 0, 622 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, 623 /* 30 - 1440x576@50Hz */ 624 { DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464, 625 1592, 1728, 0, 576, 581, 586, 625, 0, 626 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, 627 /* 31 - 1920x1080@50Hz */ 628 { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2448, 629 2492, 2640, 0, 1080, 1084, 1089, 1125, 0, 630 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 631 /* 32 - 1920x1080@24Hz */ 632 { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2558, 633 2602, 2750, 0, 1080, 1084, 1089, 1125, 0, 634 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 635 /* 33 - 1920x1080@25Hz */ 636 { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2448, 637 2492, 2640, 0, 1080, 1084, 1089, 1125, 0, 638 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 639 /* 34 - 1920x1080@30Hz */ 640 { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2008, 641 2052, 2200, 0, 1080, 1084, 1089, 1125, 0, 642 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 643 /* 35 - 2880x480@60Hz */ 644 { DRM_MODE("2880x480", DRM_MODE_TYPE_DRIVER, 108000, 2880, 2944, 645 3192, 3432, 0, 480, 489, 495, 525, 0, 646 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, 647 /* 36 - 2880x480@60Hz */ 648 { DRM_MODE("2880x480", DRM_MODE_TYPE_DRIVER, 108000, 2880, 2944, 649 3192, 3432, 0, 480, 489, 495, 525, 0, 650 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, 651 /* 37 - 2880x576@50Hz */ 652 { DRM_MODE("2880x576", DRM_MODE_TYPE_DRIVER, 108000, 2880, 2928, 653 3184, 3456, 0, 576, 581, 586, 625, 0, 654 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, 655 /* 38 - 2880x576@50Hz */ 656 { DRM_MODE("2880x576", DRM_MODE_TYPE_DRIVER, 108000, 2880, 2928, 657 3184, 3456, 0, 576, 581, 586, 625, 0, 658 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, 659 /* 39 - 1920x1080i@50Hz */ 660 { DRM_MODE("1920x1080i", DRM_MODE_TYPE_DRIVER, 72000, 1920, 1952, 661 2120, 2304, 0, 1080, 1126, 1136, 1250, 0, 662 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC | 663 DRM_MODE_FLAG_INTERLACE) }, 664 /* 40 - 1920x1080i@100Hz */ 665 { DRM_MODE("1920x1080i", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2448, 666 2492, 2640, 0, 1080, 1084, 1094, 1125, 0, 667 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | 668 DRM_MODE_FLAG_INTERLACE) }, 669 /* 41 - 1280x720@100Hz */ 670 { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 148500, 1280, 1720, 671 1760, 1980, 0, 720, 725, 730, 750, 0, 672 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 673 /* 42 - 720x576@100Hz */ 674 { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 54000, 720, 732, 675 796, 864, 0, 576, 581, 586, 625, 0, 676 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, 677 /* 43 - 720x576@100Hz */ 678 { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 54000, 720, 732, 679 796, 864, 0, 576, 581, 586, 625, 0, 680 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, 681 /* 44 - 1440x576i@100Hz */ 682 { DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464, 683 1590, 1728, 0, 576, 580, 586, 625, 0, 684 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 685 DRM_MODE_FLAG_DBLCLK) }, 686 /* 45 - 1440x576i@100Hz */ 687 { DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464, 688 1590, 1728, 0, 576, 580, 586, 625, 0, 689 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 690 DRM_MODE_FLAG_DBLCLK) }, 691 /* 46 - 1920x1080i@120Hz */ 692 { DRM_MODE("1920x1080i", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2008, 693 2052, 2200, 0, 1080, 1084, 1094, 1125, 0, 694 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | 695 DRM_MODE_FLAG_INTERLACE) }, 696 /* 47 - 1280x720@120Hz */ 697 { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 148500, 1280, 1390, 698 1430, 1650, 0, 720, 725, 730, 750, 0, 699 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 700 /* 48 - 720x480@120Hz */ 701 { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 54000, 720, 736, 702 798, 858, 0, 480, 489, 495, 525, 0, 703 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, 704 /* 49 - 720x480@120Hz */ 705 { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 54000, 720, 736, 706 798, 858, 0, 480, 489, 495, 525, 0, 707 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, 708 /* 50 - 1440x480i@120Hz */ 709 { DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1478, 710 1602, 1716, 0, 480, 488, 494, 525, 0, 711 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 712 DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK) }, 713 /* 51 - 1440x480i@120Hz */ 714 { DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1478, 715 1602, 1716, 0, 480, 488, 494, 525, 0, 716 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 717 DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK) }, 718 /* 52 - 720x576@200Hz */ 719 { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 108000, 720, 732, 720 796, 864, 0, 576, 581, 586, 625, 0, 721 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, 722 /* 53 - 720x576@200Hz */ 723 { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 108000, 720, 732, 724 796, 864, 0, 576, 581, 586, 625, 0, 725 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, 726 /* 54 - 1440x576i@200Hz */ 727 { DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1464, 728 1590, 1728, 0, 576, 580, 586, 625, 0, 729 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 730 DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK) }, 731 /* 55 - 1440x576i@200Hz */ 732 { DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1464, 733 1590, 1728, 0, 576, 580, 586, 625, 0, 734 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 735 DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK) }, 736 /* 56 - 720x480@240Hz */ 737 { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 108000, 720, 736, 738 798, 858, 0, 480, 489, 495, 525, 0, 739 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, 740 /* 57 - 720x480@240Hz */ 741 { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 108000, 720, 736, 742 798, 858, 0, 480, 489, 495, 525, 0, 743 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, 744 /* 58 - 1440x480i@240 */ 745 { DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1478, 746 1602, 1716, 0, 480, 488, 494, 525, 0, 747 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 748 DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK) }, 749 /* 59 - 1440x480i@240 */ 750 { DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1478, 751 1602, 1716, 0, 480, 488, 494, 525, 0, 752 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC | 753 DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK) }, 754 /* 60 - 1280x720@24Hz */ 755 { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 59400, 1280, 3040, 756 3080, 3300, 0, 720, 725, 730, 750, 0, 757 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 758 /* 61 - 1280x720@25Hz */ 759 { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 3700, 760 3740, 3960, 0, 720, 725, 730, 750, 0, 761 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 762 /* 62 - 1280x720@30Hz */ 763 { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 3040, 764 3080, 3300, 0, 720, 725, 730, 750, 0, 765 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 766 /* 63 - 1920x1080@120Hz */ 767 { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 297000, 1920, 2008, 768 2052, 2200, 0, 1080, 1084, 1089, 1125, 0, 769 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 770 /* 64 - 1920x1080@100Hz */ 771 { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 297000, 1920, 2448, 772 2492, 2640, 0, 1080, 1084, 1094, 1125, 0, 773 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 774 }; 775 static const int drm_num_cea_modes = ARRAY_SIZE(edid_cea_modes); 776