xref: /freebsd/sys/dev/drm2/drm_edid_modes.h (revision 4543ef516683042d46f3bd3bb8a4f3f746e00499)
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 
26 #include <dev/drm2/drmP.h>
27 #include <dev/drm2/drm_edid.h>
28 
29 /*
30  * Autogenerated from the DMT spec.
31  * This table is copied from xfree86/modes/xf86EdidModes.c.
32  */
33 static const struct drm_display_mode drm_dmt_modes[] = {
34 	/* 640x350@85Hz */
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) },
38 	/* 640x400@85Hz */
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) },
42 	/* 720x400@85Hz */
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) },
46 	/* 640x480@60Hz */
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) },
50 	/* 640x480@72Hz */
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) },
54 	/* 640x480@75Hz */
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) },
58 	/* 640x480@85Hz */
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) },
62 	/* 800x600@56Hz */
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) },
66 	/* 800x600@60Hz */
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) },
70 	/* 800x600@72Hz */
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) },
74 	/* 800x600@75Hz */
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) },
78 	/* 800x600@85Hz */
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) },
86 	/* 848x480@60Hz */
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) },
95 	/* 1024x768@60Hz */
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) },
99 	/* 1024x768@70Hz */
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) },
103 	/* 1024x768@75Hz */
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) },
107 	/* 1024x768@85Hz */
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) },
115 	/* 1152x864@75Hz */
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) },
123 	/* 1280x768@60Hz */
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) },
127 	/* 1280x768@75Hz */
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) },
131 	/* 1280x768@85Hz */
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) },
143 	/* 1280x800@60Hz */
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) },
147 	/* 1280x800@75Hz */
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) },
151 	/* 1280x800@85Hz */
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) },
159 	/* 1280x960@60Hz */
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) },
163 	/* 1280x960@85Hz */
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) },
171 	/* 1280x1024@60Hz */
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) },
175 	/* 1280x1024@75Hz */
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) },
179 	/* 1280x1024@85Hz */
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) },
187 	/* 1360x768@60Hz */
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) },
199 	/* 1400x1050@60Hz */
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) },
203 	/* 1400x1050@75Hz */
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) },
207 	/* 1400x1050@85Hz */
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) },
219 	/* 1440x900@60Hz */
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) },
223 	/* 1440x900@75Hz */
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) },
227 	/* 1440x900@85Hz */
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) },
235 	/* 1600x1200@60Hz */
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) },
239 	/* 1600x1200@65Hz */
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) },
243 	/* 1600x1200@70Hz */
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) },
247 	/* 1600x1200@75Hz */
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) },
251 	/* 1600x1200@85Hz */
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) },
263 	/* 1680x1050@60Hz */
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) },
267 	/* 1680x1050@75Hz */
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) },
271 	/* 1680x1050@85Hz */
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) },
279 	/* 1792x1344@60Hz */
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) },
283 	/* 1792x1344@75Hz */
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) },
291 	/* 1856x1392@60Hz */
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) },
295 	/* 1856x1392@75Hz */
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) },
307 	/* 1920x1200@60Hz */
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) },
311 	/* 1920x1200@75Hz */
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) },
315 	/* 1920x1200@85Hz */
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) },
323 	/* 1920x1440@60Hz */
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) },
327 	/* 1920x1440@75Hz */
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) },
339 	/* 2560x1600@60Hz */
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) },
343 	/* 2560x1600@75HZ */
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) },
347 	/* 2560x1600@85HZ */
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) },
355 
356 };
357 static const int drm_num_dmt_modes =
358 	sizeof(drm_dmt_modes) / sizeof(struct drm_display_mode);
359 
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 */
412 };
413 
414 struct minimode {
415 	short w;
416 	short h;
417 	short r;
418 	short rb;
419 };
420 
421 static const struct minimode est3_modes[] = {
422 	/* byte 6 */
423 	{ 640, 350, 85, 0 },
424 	{ 640, 400, 85, 0 },
425 	{ 720, 400, 85, 0 },
426 	{ 640, 480, 85, 0 },
427 	{ 848, 480, 60, 0 },
428 	{ 800, 600, 85, 0 },
429 	{ 1024, 768, 85, 0 },
430 	{ 1152, 864, 75, 0 },
431 	/* byte 7 */
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 },
440 	/* byte 8 */
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 },
449 	/* byte 9 */
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 },
458 	/* byte 10 */
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 },
467 	/* byte 11 */
468 	{ 1920, 1200, 75, 0 },
469 	{ 1920, 1200, 85, 0 },
470 	{ 1920, 1440, 60, 0 },
471 	{ 1920, 1440, 75, 0 },
472 };
473 static const int num_est3_modes = ARRAY_SIZE(est3_modes);
474 
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 },
483 };
484 static const int num_extra_modes = ARRAY_SIZE(extra_modes);
485 
486 /*
487  * Probably taken from CEA-861 spec.
488  * This table is converted from xorg's hw/xfree86/modes/xf86EdidModes.c.
489  */
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) },
772 };
773 static const int drm_num_cea_modes = ARRAY_SIZE(edid_cea_modes);
774