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