1235783Skib/*
2235783Skib * Copyright (c) 2007-2008 Intel Corporation
3235783Skib *   Jesse Barnes <jesse.barnes@intel.com>
4235783Skib * Copyright 2010 Red Hat, Inc.
5235783Skib *
6235783Skib * Permission is hereby granted, free of charge, to any person obtaining a
7235783Skib * copy of this software and associated documentation files (the "Software"),
8235783Skib * to deal in the Software without restriction, including without limitation
9235783Skib * the rights to use, copy, modify, merge, publish, distribute, sub license,
10235783Skib * and/or sell copies of the Software, and to permit persons to whom the
11235783Skib * Software is furnished to do so, subject to the following conditions:
12235783Skib *
13235783Skib * The above copyright notice and this permission notice (including the
14235783Skib * next paragraph) shall be included in all copies or substantial portions
15235783Skib * of the Software.
16235783Skib *
17235783Skib * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18235783Skib * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19235783Skib * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
20235783Skib * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21235783Skib * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22235783Skib * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23235783Skib * DEALINGS IN THE SOFTWARE.
24235783Skib *
25235783Skib * $FreeBSD$
26235783Skib */
27235783Skib
28235783Skib#include <dev/drm2/drmP.h>
29235783Skib#include <dev/drm2/drm_edid.h>
30235783Skib
31235783Skib/*
32235783Skib * Autogenerated from the DMT spec.
33235783Skib * This table is copied from xfree86/modes/xf86EdidModes.c.
34235783Skib */
35280183Sdumbbellstatic const struct drm_display_mode drm_dmt_modes[] = {
36235783Skib	/* 640x350@85Hz */
37235783Skib	{ DRM_MODE("640x350", DRM_MODE_TYPE_DRIVER, 31500, 640, 672,
38235783Skib		   736, 832, 0, 350, 382, 385, 445, 0,
39235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
40235783Skib	/* 640x400@85Hz */
41235783Skib	{ DRM_MODE("640x400", DRM_MODE_TYPE_DRIVER, 31500, 640, 672,
42235783Skib		   736, 832, 0, 400, 401, 404, 445, 0,
43235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
44235783Skib	/* 720x400@85Hz */
45235783Skib	{ DRM_MODE("720x400", DRM_MODE_TYPE_DRIVER, 35500, 720, 756,
46235783Skib		   828, 936, 0, 400, 401, 404, 446, 0,
47235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
48235783Skib	/* 640x480@60Hz */
49235783Skib	{ DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 25175, 640, 656,
50235783Skib		   752, 800, 0, 480, 489, 492, 525, 0,
51235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
52235783Skib	/* 640x480@72Hz */
53235783Skib	{ DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 31500, 640, 664,
54235783Skib		   704, 832, 0, 480, 489, 492, 520, 0,
55235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
56235783Skib	/* 640x480@75Hz */
57235783Skib	{ DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 31500, 640, 656,
58235783Skib		   720, 840, 0, 480, 481, 484, 500, 0,
59235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
60235783Skib	/* 640x480@85Hz */
61235783Skib	{ DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 36000, 640, 696,
62235783Skib		   752, 832, 0, 480, 481, 484, 509, 0,
63235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
64235783Skib	/* 800x600@56Hz */
65235783Skib	{ DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 36000, 800, 824,
66235783Skib		   896, 1024, 0, 600, 601, 603, 625, 0,
67235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
68235783Skib	/* 800x600@60Hz */
69235783Skib	{ DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 40000, 800, 840,
70235783Skib		   968, 1056, 0, 600, 601, 605, 628, 0,
71235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
72235783Skib	/* 800x600@72Hz */
73235783Skib	{ DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 50000, 800, 856,
74235783Skib		   976, 1040, 0, 600, 637, 643, 666, 0,
75235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
76235783Skib	/* 800x600@75Hz */
77235783Skib	{ DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 49500, 800, 816,
78235783Skib		   896, 1056, 0, 600, 601, 604, 625, 0,
79235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
80235783Skib	/* 800x600@85Hz */
81235783Skib	{ DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 56250, 800, 832,
82235783Skib		   896, 1048, 0, 600, 601, 604, 631, 0,
83235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
84277487Skib	/* 800x600@120Hz RB */
85277487Skib	{ DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 73250, 800, 848,
86277487Skib		   880, 960, 0, 600, 603, 607, 636, 0,
87277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
88235783Skib	/* 848x480@60Hz */
89235783Skib	{ DRM_MODE("848x480", DRM_MODE_TYPE_DRIVER, 33750, 848, 864,
90235783Skib		   976, 1088, 0, 480, 486, 494, 517, 0,
91235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
92235783Skib	/* 1024x768@43Hz, interlace */
93280183Sdumbbell	{ DRM_MODE("1024x768i", DRM_MODE_TYPE_DRIVER, 44900, 1024, 1032,
94235783Skib		   1208, 1264, 0, 768, 768, 772, 817, 0,
95235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
96235783Skib			DRM_MODE_FLAG_INTERLACE) },
97235783Skib	/* 1024x768@60Hz */
98235783Skib	{ DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 65000, 1024, 1048,
99235783Skib		   1184, 1344, 0, 768, 771, 777, 806, 0,
100235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
101235783Skib	/* 1024x768@70Hz */
102235783Skib	{ DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 75000, 1024, 1048,
103235783Skib		   1184, 1328, 0, 768, 771, 777, 806, 0,
104235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
105235783Skib	/* 1024x768@75Hz */
106235783Skib	{ DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 78750, 1024, 1040,
107235783Skib		   1136, 1312, 0, 768, 769, 772, 800, 0,
108235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
109235783Skib	/* 1024x768@85Hz */
110235783Skib	{ DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 94500, 1024, 1072,
111235783Skib		   1168, 1376, 0, 768, 769, 772, 808, 0,
112235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
113277487Skib	/* 1024x768@120Hz RB */
114277487Skib	{ DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 115500, 1024, 1072,
115277487Skib		   1104, 1184, 0, 768, 771, 775, 813, 0,
116277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
117235783Skib	/* 1152x864@75Hz */
118235783Skib	{ DRM_MODE("1152x864", DRM_MODE_TYPE_DRIVER, 108000, 1152, 1216,
119235783Skib		   1344, 1600, 0, 864, 865, 868, 900, 0,
120235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
121277487Skib	/* 1280x768@60Hz RB */
122277487Skib	{ DRM_MODE("1280x768", DRM_MODE_TYPE_DRIVER, 68250, 1280, 1328,
123277487Skib		   1360, 1440, 0, 768, 771, 778, 790, 0,
124277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
125235783Skib	/* 1280x768@60Hz */
126235783Skib	{ DRM_MODE("1280x768", DRM_MODE_TYPE_DRIVER, 79500, 1280, 1344,
127235783Skib		   1472, 1664, 0, 768, 771, 778, 798, 0,
128235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
129235783Skib	/* 1280x768@75Hz */
130235783Skib	{ DRM_MODE("1280x768", DRM_MODE_TYPE_DRIVER, 102250, 1280, 1360,
131235783Skib		   1488, 1696, 0, 768, 771, 778, 805, 0,
132235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
133235783Skib	/* 1280x768@85Hz */
134235783Skib	{ DRM_MODE("1280x768", DRM_MODE_TYPE_DRIVER, 117500, 1280, 1360,
135235783Skib		   1496, 1712, 0, 768, 771, 778, 809, 0,
136235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
137277487Skib	/* 1280x768@120Hz RB */
138277487Skib	{ DRM_MODE("1280x768", DRM_MODE_TYPE_DRIVER, 140250, 1280, 1328,
139277487Skib		   1360, 1440, 0, 768, 771, 778, 813, 0,
140277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
141277487Skib	/* 1280x800@60Hz RB */
142277487Skib	{ DRM_MODE("1280x800", DRM_MODE_TYPE_DRIVER, 71000, 1280, 1328,
143277487Skib		   1360, 1440, 0, 800, 803, 809, 823, 0,
144277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
145235783Skib	/* 1280x800@60Hz */
146235783Skib	{ DRM_MODE("1280x800", DRM_MODE_TYPE_DRIVER, 83500, 1280, 1352,
147235783Skib		   1480, 1680, 0, 800, 803, 809, 831, 0,
148235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
149235783Skib	/* 1280x800@75Hz */
150235783Skib	{ DRM_MODE("1280x800", DRM_MODE_TYPE_DRIVER, 106500, 1280, 1360,
151235783Skib		   1488, 1696, 0, 800, 803, 809, 838, 0,
152235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
153235783Skib	/* 1280x800@85Hz */
154235783Skib	{ DRM_MODE("1280x800", DRM_MODE_TYPE_DRIVER, 122500, 1280, 1360,
155235783Skib		   1496, 1712, 0, 800, 803, 809, 843, 0,
156235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
157277487Skib	/* 1280x800@120Hz RB */
158277487Skib	{ DRM_MODE("1280x800", DRM_MODE_TYPE_DRIVER, 146250, 1280, 1328,
159277487Skib		   1360, 1440, 0, 800, 803, 809, 847, 0,
160277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
161235783Skib	/* 1280x960@60Hz */
162235783Skib	{ DRM_MODE("1280x960", DRM_MODE_TYPE_DRIVER, 108000, 1280, 1376,
163235783Skib		   1488, 1800, 0, 960, 961, 964, 1000, 0,
164235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
165235783Skib	/* 1280x960@85Hz */
166235783Skib	{ DRM_MODE("1280x960", DRM_MODE_TYPE_DRIVER, 148500, 1280, 1344,
167235783Skib		   1504, 1728, 0, 960, 961, 964, 1011, 0,
168235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
169277487Skib	/* 1280x960@120Hz RB */
170277487Skib	{ DRM_MODE("1280x960", DRM_MODE_TYPE_DRIVER, 175500, 1280, 1328,
171277487Skib		   1360, 1440, 0, 960, 963, 967, 1017, 0,
172277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
173235783Skib	/* 1280x1024@60Hz */
174235783Skib	{ DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 108000, 1280, 1328,
175235783Skib		   1440, 1688, 0, 1024, 1025, 1028, 1066, 0,
176235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
177235783Skib	/* 1280x1024@75Hz */
178235783Skib	{ DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 135000, 1280, 1296,
179235783Skib		   1440, 1688, 0, 1024, 1025, 1028, 1066, 0,
180235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
181235783Skib	/* 1280x1024@85Hz */
182235783Skib	{ DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 157500, 1280, 1344,
183235783Skib		   1504, 1728, 0, 1024, 1025, 1028, 1072, 0,
184235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
185277487Skib	/* 1280x1024@120Hz RB */
186277487Skib	{ DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 187250, 1280, 1328,
187277487Skib		   1360, 1440, 0, 1024, 1027, 1034, 1084, 0,
188277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
189235783Skib	/* 1360x768@60Hz */
190235783Skib	{ DRM_MODE("1360x768", DRM_MODE_TYPE_DRIVER, 85500, 1360, 1424,
191235783Skib		   1536, 1792, 0, 768, 771, 777, 795, 0,
192235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
193277487Skib	/* 1360x768@120Hz RB */
194277487Skib	{ DRM_MODE("1360x768", DRM_MODE_TYPE_DRIVER, 148250, 1360, 1408,
195277487Skib		   1440, 1520, 0, 768, 771, 776, 813, 0,
196277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
197277487Skib	/* 1400x1050@60Hz RB */
198277487Skib	{ DRM_MODE("1400x1050", DRM_MODE_TYPE_DRIVER, 101000, 1400, 1448,
199277487Skib		   1480, 1560, 0, 1050, 1053, 1057, 1080, 0,
200277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
201277487Skib	/* 1400x1050@60Hz */
202235783Skib	{ DRM_MODE("1400x1050", DRM_MODE_TYPE_DRIVER, 121750, 1400, 1488,
203235783Skib		   1632, 1864, 0, 1050, 1053, 1057, 1089, 0,
204235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
205277487Skib	/* 1400x1050@75Hz */
206235783Skib	{ DRM_MODE("1400x1050", DRM_MODE_TYPE_DRIVER, 156000, 1400, 1504,
207235783Skib		   1648, 1896, 0, 1050, 1053, 1057, 1099, 0,
208235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
209277487Skib	/* 1400x1050@85Hz */
210235783Skib	{ DRM_MODE("1400x1050", DRM_MODE_TYPE_DRIVER, 179500, 1400, 1504,
211235783Skib		   1656, 1912, 0, 1050, 1053, 1057, 1105, 0,
212235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
213277487Skib	/* 1400x1050@120Hz RB */
214277487Skib	{ DRM_MODE("1400x1050", DRM_MODE_TYPE_DRIVER, 208000, 1400, 1448,
215277487Skib		   1480, 1560, 0, 1050, 1053, 1057, 1112, 0,
216277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
217277487Skib	/* 1440x900@60Hz RB */
218277487Skib	{ DRM_MODE("1440x900", DRM_MODE_TYPE_DRIVER, 88750, 1440, 1488,
219277487Skib		   1520, 1600, 0, 900, 903, 909, 926, 0,
220277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
221235783Skib	/* 1440x900@60Hz */
222235783Skib	{ DRM_MODE("1440x900", DRM_MODE_TYPE_DRIVER, 106500, 1440, 1520,
223235783Skib		   1672, 1904, 0, 900, 903, 909, 934, 0,
224235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
225235783Skib	/* 1440x900@75Hz */
226235783Skib	{ DRM_MODE("1440x900", DRM_MODE_TYPE_DRIVER, 136750, 1440, 1536,
227235783Skib		   1688, 1936, 0, 900, 903, 909, 942, 0,
228235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
229235783Skib	/* 1440x900@85Hz */
230235783Skib	{ DRM_MODE("1440x900", DRM_MODE_TYPE_DRIVER, 157000, 1440, 1544,
231235783Skib		   1696, 1952, 0, 900, 903, 909, 948, 0,
232235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
233277487Skib	/* 1440x900@120Hz RB */
234277487Skib	{ DRM_MODE("1440x900", DRM_MODE_TYPE_DRIVER, 182750, 1440, 1488,
235277487Skib		   1520, 1600, 0, 900, 903, 909, 953, 0,
236277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
237235783Skib	/* 1600x1200@60Hz */
238235783Skib	{ DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 162000, 1600, 1664,
239235783Skib		   1856, 2160, 0, 1200, 1201, 1204, 1250, 0,
240235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
241235783Skib	/* 1600x1200@65Hz */
242235783Skib	{ DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 175500, 1600, 1664,
243235783Skib		   1856, 2160, 0, 1200, 1201, 1204, 1250, 0,
244235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
245235783Skib	/* 1600x1200@70Hz */
246235783Skib	{ DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 189000, 1600, 1664,
247235783Skib		   1856, 2160, 0, 1200, 1201, 1204, 1250, 0,
248235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
249235783Skib	/* 1600x1200@75Hz */
250235783Skib	{ DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 202500, 1600, 1664,
251235783Skib		   1856, 2160, 0, 1200, 1201, 1204, 1250, 0,
252235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
253235783Skib	/* 1600x1200@85Hz */
254235783Skib	{ DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 229500, 1600, 1664,
255235783Skib		   1856, 2160, 0, 1200, 1201, 1204, 1250, 0,
256235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
257277487Skib	/* 1600x1200@120Hz RB */
258277487Skib	{ DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 268250, 1600, 1648,
259277487Skib		   1680, 1760, 0, 1200, 1203, 1207, 1271, 0,
260277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
261277487Skib	/* 1680x1050@60Hz RB */
262277487Skib	{ DRM_MODE("1680x1050", DRM_MODE_TYPE_DRIVER, 119000, 1680, 1728,
263277487Skib		   1760, 1840, 0, 1050, 1053, 1059, 1080, 0,
264277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
265235783Skib	/* 1680x1050@60Hz */
266235783Skib	{ DRM_MODE("1680x1050", DRM_MODE_TYPE_DRIVER, 146250, 1680, 1784,
267235783Skib		   1960, 2240, 0, 1050, 1053, 1059, 1089, 0,
268235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
269235783Skib	/* 1680x1050@75Hz */
270235783Skib	{ DRM_MODE("1680x1050", DRM_MODE_TYPE_DRIVER, 187000, 1680, 1800,
271235783Skib		   1976, 2272, 0, 1050, 1053, 1059, 1099, 0,
272235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
273235783Skib	/* 1680x1050@85Hz */
274235783Skib	{ DRM_MODE("1680x1050", DRM_MODE_TYPE_DRIVER, 214750, 1680, 1808,
275235783Skib		   1984, 2288, 0, 1050, 1053, 1059, 1105, 0,
276235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
277277487Skib	/* 1680x1050@120Hz RB */
278277487Skib	{ DRM_MODE("1680x1050", DRM_MODE_TYPE_DRIVER, 245500, 1680, 1728,
279277487Skib		   1760, 1840, 0, 1050, 1053, 1059, 1112, 0,
280277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
281235783Skib	/* 1792x1344@60Hz */
282235783Skib	{ DRM_MODE("1792x1344", DRM_MODE_TYPE_DRIVER, 204750, 1792, 1920,
283235783Skib		   2120, 2448, 0, 1344, 1345, 1348, 1394, 0,
284235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
285277487Skib	/* 1792x1344@75Hz */
286235783Skib	{ DRM_MODE("1792x1344", DRM_MODE_TYPE_DRIVER, 261000, 1792, 1888,
287235783Skib		   2104, 2456, 0, 1344, 1345, 1348, 1417, 0,
288235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
289277487Skib	/* 1792x1344@120Hz RB */
290277487Skib	{ DRM_MODE("1792x1344", DRM_MODE_TYPE_DRIVER, 333250, 1792, 1840,
291277487Skib		   1872, 1952, 0, 1344, 1347, 1351, 1423, 0,
292277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
293277487Skib	/* 1856x1392@60Hz */
294235783Skib	{ DRM_MODE("1856x1392", DRM_MODE_TYPE_DRIVER, 218250, 1856, 1952,
295235783Skib		   2176, 2528, 0, 1392, 1393, 1396, 1439, 0,
296235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
297235783Skib	/* 1856x1392@75Hz */
298235783Skib	{ DRM_MODE("1856x1392", DRM_MODE_TYPE_DRIVER, 288000, 1856, 1984,
299235783Skib		   2208, 2560, 0, 1392, 1395, 1399, 1500, 0,
300235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
301277487Skib	/* 1856x1392@120Hz RB */
302277487Skib	{ DRM_MODE("1856x1392", DRM_MODE_TYPE_DRIVER, 356500, 1856, 1904,
303277487Skib		   1936, 2016, 0, 1392, 1395, 1399, 1474, 0,
304277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
305277487Skib	/* 1920x1200@60Hz RB */
306277487Skib	{ DRM_MODE("1920x1200", DRM_MODE_TYPE_DRIVER, 154000, 1920, 1968,
307277487Skib		   2000, 2080, 0, 1200, 1203, 1209, 1235, 0,
308277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
309235783Skib	/* 1920x1200@60Hz */
310235783Skib	{ DRM_MODE("1920x1200", DRM_MODE_TYPE_DRIVER, 193250, 1920, 2056,
311235783Skib		   2256, 2592, 0, 1200, 1203, 1209, 1245, 0,
312235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
313235783Skib	/* 1920x1200@75Hz */
314235783Skib	{ DRM_MODE("1920x1200", DRM_MODE_TYPE_DRIVER, 245250, 1920, 2056,
315235783Skib		   2264, 2608, 0, 1200, 1203, 1209, 1255, 0,
316235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
317235783Skib	/* 1920x1200@85Hz */
318235783Skib	{ DRM_MODE("1920x1200", DRM_MODE_TYPE_DRIVER, 281250, 1920, 2064,
319235783Skib		   2272, 2624, 0, 1200, 1203, 1209, 1262, 0,
320235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
321277487Skib	/* 1920x1200@120Hz RB */
322277487Skib	{ DRM_MODE("1920x1200", DRM_MODE_TYPE_DRIVER, 317000, 1920, 1968,
323277487Skib		   2000, 2080, 0, 1200, 1203, 1209, 1271, 0,
324277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
325235783Skib	/* 1920x1440@60Hz */
326235783Skib	{ DRM_MODE("1920x1440", DRM_MODE_TYPE_DRIVER, 234000, 1920, 2048,
327235783Skib		   2256, 2600, 0, 1440, 1441, 1444, 1500, 0,
328235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
329235783Skib	/* 1920x1440@75Hz */
330235783Skib	{ DRM_MODE("1920x1440", DRM_MODE_TYPE_DRIVER, 297000, 1920, 2064,
331235783Skib		   2288, 2640, 0, 1440, 1441, 1444, 1500, 0,
332235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
333277487Skib	/* 1920x1440@120Hz RB */
334277487Skib	{ DRM_MODE("1920x1440", DRM_MODE_TYPE_DRIVER, 380500, 1920, 1968,
335277487Skib		   2000, 2080, 0, 1440, 1443, 1447, 1525, 0,
336277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
337277487Skib	/* 2560x1600@60Hz RB */
338277487Skib	{ DRM_MODE("2560x1600", DRM_MODE_TYPE_DRIVER, 268500, 2560, 2608,
339277487Skib		   2640, 2720, 0, 1600, 1603, 1609, 1646, 0,
340277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
341235783Skib	/* 2560x1600@60Hz */
342235783Skib	{ DRM_MODE("2560x1600", DRM_MODE_TYPE_DRIVER, 348500, 2560, 2752,
343235783Skib		   3032, 3504, 0, 1600, 1603, 1609, 1658, 0,
344235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
345235783Skib	/* 2560x1600@75HZ */
346235783Skib	{ DRM_MODE("2560x1600", DRM_MODE_TYPE_DRIVER, 443250, 2560, 2768,
347235783Skib		   3048, 3536, 0, 1600, 1603, 1609, 1672, 0,
348235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
349235783Skib	/* 2560x1600@85HZ */
350235783Skib	{ DRM_MODE("2560x1600", DRM_MODE_TYPE_DRIVER, 505250, 2560, 2768,
351235783Skib		   3048, 3536, 0, 1600, 1603, 1609, 1682, 0,
352235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
353277487Skib	/* 2560x1600@120Hz RB */
354277487Skib	{ DRM_MODE("2560x1600", DRM_MODE_TYPE_DRIVER, 552750, 2560, 2608,
355277487Skib		   2640, 2720, 0, 1600, 1603, 1609, 1694, 0,
356277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
357277487Skib
358235783Skib};
359235783Skibstatic const int drm_num_dmt_modes =
360235783Skib	sizeof(drm_dmt_modes) / sizeof(struct drm_display_mode);
361235783Skib
362280183Sdumbbellstatic const struct drm_display_mode edid_est_modes[] = {
363235783Skib	{ DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 40000, 800, 840,
364235783Skib		   968, 1056, 0, 600, 601, 605, 628, 0,
365235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 800x600@60Hz */
366235783Skib	{ DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 36000, 800, 824,
367235783Skib		   896, 1024, 0, 600, 601, 603,  625, 0,
368235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 800x600@56Hz */
369235783Skib	{ DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 31500, 640, 656,
370235783Skib		   720, 840, 0, 480, 481, 484, 500, 0,
371235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 640x480@75Hz */
372235783Skib	{ DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 31500, 640, 664,
373235783Skib		   704,  832, 0, 480, 489, 491, 520, 0,
374235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 640x480@72Hz */
375235783Skib	{ DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 30240, 640, 704,
376235783Skib		   768,  864, 0, 480, 483, 486, 525, 0,
377235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 640x480@67Hz */
378235783Skib	{ DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 25200, 640, 656,
379235783Skib		   752, 800, 0, 480, 490, 492, 525, 0,
380235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 640x480@60Hz */
381235783Skib	{ DRM_MODE("720x400", DRM_MODE_TYPE_DRIVER, 35500, 720, 738,
382235783Skib		   846, 900, 0, 400, 421, 423,  449, 0,
383235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 720x400@88Hz */
384235783Skib	{ DRM_MODE("720x400", DRM_MODE_TYPE_DRIVER, 28320, 720, 738,
385235783Skib		   846,  900, 0, 400, 412, 414, 449, 0,
386235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 720x400@70Hz */
387235783Skib	{ DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 135000, 1280, 1296,
388235783Skib		   1440, 1688, 0, 1024, 1025, 1028, 1066, 0,
389235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 1280x1024@75Hz */
390235783Skib	{ DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 78800, 1024, 1040,
391235783Skib		   1136, 1312, 0,  768, 769, 772, 800, 0,
392235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 1024x768@75Hz */
393235783Skib	{ DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 75000, 1024, 1048,
394235783Skib		   1184, 1328, 0,  768, 771, 777, 806, 0,
395235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 1024x768@70Hz */
396235783Skib	{ DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 65000, 1024, 1048,
397235783Skib		   1184, 1344, 0,  768, 771, 777, 806, 0,
398235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 1024x768@60Hz */
399280183Sdumbbell	{ DRM_MODE("1024x768i", DRM_MODE_TYPE_DRIVER,44900, 1024, 1032,
400235783Skib		   1208, 1264, 0, 768, 768, 776, 817, 0,
401235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | DRM_MODE_FLAG_INTERLACE) }, /* 1024x768@43Hz */
402235783Skib	{ DRM_MODE("832x624", DRM_MODE_TYPE_DRIVER, 57284, 832, 864,
403235783Skib		   928, 1152, 0, 624, 625, 628, 667, 0,
404235783Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 832x624@75Hz */
405235783Skib	{ DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 49500, 800, 816,
406235783Skib		   896, 1056, 0, 600, 601, 604,  625, 0,
407235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 800x600@75Hz */
408235783Skib	{ DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 50000, 800, 856,
409235783Skib		   976, 1040, 0, 600, 637, 643, 666, 0,
410235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 800x600@72Hz */
411235783Skib	{ DRM_MODE("1152x864", DRM_MODE_TYPE_DRIVER, 108000, 1152, 1216,
412235783Skib		   1344, 1600, 0,  864, 865, 868, 900, 0,
413235783Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 1152x864@75Hz */
414235783Skib};
415235783Skib
416277487Skibstruct minimode {
417235783Skib	short w;
418235783Skib	short h;
419235783Skib	short r;
420235783Skib	short rb;
421277487Skib};
422277487Skib
423277487Skibstatic const struct minimode est3_modes[] = {
424235783Skib	/* byte 6 */
425235783Skib	{ 640, 350, 85, 0 },
426235783Skib	{ 640, 400, 85, 0 },
427235783Skib	{ 720, 400, 85, 0 },
428235783Skib	{ 640, 480, 85, 0 },
429235783Skib	{ 848, 480, 60, 0 },
430235783Skib	{ 800, 600, 85, 0 },
431235783Skib	{ 1024, 768, 85, 0 },
432235783Skib	{ 1152, 864, 75, 0 },
433235783Skib	/* byte 7 */
434235783Skib	{ 1280, 768, 60, 1 },
435235783Skib	{ 1280, 768, 60, 0 },
436235783Skib	{ 1280, 768, 75, 0 },
437235783Skib	{ 1280, 768, 85, 0 },
438235783Skib	{ 1280, 960, 60, 0 },
439235783Skib	{ 1280, 960, 85, 0 },
440235783Skib	{ 1280, 1024, 60, 0 },
441235783Skib	{ 1280, 1024, 85, 0 },
442235783Skib	/* byte 8 */
443235783Skib	{ 1360, 768, 60, 0 },
444235783Skib	{ 1440, 900, 60, 1 },
445235783Skib	{ 1440, 900, 60, 0 },
446235783Skib	{ 1440, 900, 75, 0 },
447235783Skib	{ 1440, 900, 85, 0 },
448235783Skib	{ 1400, 1050, 60, 1 },
449235783Skib	{ 1400, 1050, 60, 0 },
450235783Skib	{ 1400, 1050, 75, 0 },
451235783Skib	/* byte 9 */
452235783Skib	{ 1400, 1050, 85, 0 },
453235783Skib	{ 1680, 1050, 60, 1 },
454235783Skib	{ 1680, 1050, 60, 0 },
455235783Skib	{ 1680, 1050, 75, 0 },
456235783Skib	{ 1680, 1050, 85, 0 },
457235783Skib	{ 1600, 1200, 60, 0 },
458235783Skib	{ 1600, 1200, 65, 0 },
459235783Skib	{ 1600, 1200, 70, 0 },
460235783Skib	/* byte 10 */
461235783Skib	{ 1600, 1200, 75, 0 },
462235783Skib	{ 1600, 1200, 85, 0 },
463235783Skib	{ 1792, 1344, 60, 0 },
464235783Skib	{ 1792, 1344, 85, 0 },
465235783Skib	{ 1856, 1392, 60, 0 },
466235783Skib	{ 1856, 1392, 75, 0 },
467235783Skib	{ 1920, 1200, 60, 1 },
468235783Skib	{ 1920, 1200, 60, 0 },
469235783Skib	/* byte 11 */
470235783Skib	{ 1920, 1200, 75, 0 },
471235783Skib	{ 1920, 1200, 85, 0 },
472235783Skib	{ 1920, 1440, 60, 0 },
473235783Skib	{ 1920, 1440, 75, 0 },
474235783Skib};
475280183Sdumbbellstatic const int num_est3_modes = ARRAY_SIZE(est3_modes);
476277487Skib
477277487Skibstatic const struct minimode extra_modes[] = {
478277487Skib	{ 1024, 576,  60, 0 },
479277487Skib	{ 1366, 768,  60, 0 },
480277487Skib	{ 1600, 900,  60, 0 },
481277487Skib	{ 1680, 945,  60, 0 },
482277487Skib	{ 1920, 1080, 60, 0 },
483277487Skib	{ 2048, 1152, 60, 0 },
484277487Skib	{ 2048, 1536, 60, 0 },
485277487Skib};
486280183Sdumbbellstatic const int num_extra_modes = ARRAY_SIZE(extra_modes);
487277487Skib
488277487Skib/*
489277487Skib * Probably taken from CEA-861 spec.
490277487Skib * This table is converted from xorg's hw/xfree86/modes/xf86EdidModes.c.
491277487Skib */
492277487Skibstatic const struct drm_display_mode edid_cea_modes[] = {
493277487Skib	/* 1 - 640x480@60Hz */
494277487Skib	{ DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 25175, 640, 656,
495277487Skib		   752, 800, 0, 480, 490, 492, 525, 0,
496277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
497277487Skib	/* 2 - 720x480@60Hz */
498277487Skib	{ DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 27000, 720, 736,
499277487Skib		   798, 858, 0, 480, 489, 495, 525, 0,
500277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
501277487Skib	/* 3 - 720x480@60Hz */
502277487Skib	{ DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 27000, 720, 736,
503277487Skib		   798, 858, 0, 480, 489, 495, 525, 0,
504277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
505277487Skib	/* 4 - 1280x720@60Hz */
506277487Skib	{ DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 1390,
507277487Skib		   1430, 1650, 0, 720, 725, 730, 750, 0,
508277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
509277487Skib	/* 5 - 1920x1080i@60Hz */
510280183Sdumbbell	{ DRM_MODE("1920x1080i", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2008,
511277487Skib		   2052, 2200, 0, 1080, 1084, 1094, 1125, 0,
512277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
513277487Skib			DRM_MODE_FLAG_INTERLACE) },
514277487Skib	/* 6 - 1440x480i@60Hz */
515280183Sdumbbell	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
516277487Skib		   1602, 1716, 0, 480, 488, 494, 525, 0,
517277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
518277487Skib			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK) },
519277487Skib	/* 7 - 1440x480i@60Hz */
520280183Sdumbbell	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
521277487Skib		   1602, 1716, 0, 480, 488, 494, 525, 0,
522277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
523277487Skib			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK) },
524277487Skib	/* 8 - 1440x240@60Hz */
525277487Skib	{ DRM_MODE("1440x240", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
526277487Skib		   1602, 1716, 0, 240, 244, 247, 262, 0,
527277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
528277487Skib			DRM_MODE_FLAG_DBLCLK) },
529277487Skib	/* 9 - 1440x240@60Hz */
530277487Skib	{ DRM_MODE("1440x240", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
531277487Skib		   1602, 1716, 0, 240, 244, 247, 262, 0,
532277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
533277487Skib			DRM_MODE_FLAG_DBLCLK) },
534277487Skib	/* 10 - 2880x480i@60Hz */
535280183Sdumbbell	{ DRM_MODE("2880x480i", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2956,
536277487Skib		   3204, 3432, 0, 480, 488, 494, 525, 0,
537277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
538277487Skib			DRM_MODE_FLAG_INTERLACE) },
539277487Skib	/* 11 - 2880x480i@60Hz */
540280183Sdumbbell	{ DRM_MODE("2880x480i", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2956,
541277487Skib		   3204, 3432, 0, 480, 488, 494, 525, 0,
542277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
543277487Skib			DRM_MODE_FLAG_INTERLACE) },
544277487Skib	/* 12 - 2880x240@60Hz */
545277487Skib	{ DRM_MODE("2880x240", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2956,
546277487Skib		   3204, 3432, 0, 240, 244, 247, 262, 0,
547277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
548277487Skib	/* 13 - 2880x240@60Hz */
549277487Skib	{ DRM_MODE("2880x240", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2956,
550277487Skib		   3204, 3432, 0, 240, 244, 247, 262, 0,
551277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
552277487Skib	/* 14 - 1440x480@60Hz */
553277487Skib	{ DRM_MODE("1440x480", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1472,
554277487Skib		   1596, 1716, 0, 480, 489, 495, 525, 0,
555277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
556277487Skib	/* 15 - 1440x480@60Hz */
557277487Skib	{ DRM_MODE("1440x480", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1472,
558277487Skib		   1596, 1716, 0, 480, 489, 495, 525, 0,
559277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
560277487Skib	/* 16 - 1920x1080@60Hz */
561277487Skib	{ DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2008,
562277487Skib		   2052, 2200, 0, 1080, 1084, 1089, 1125, 0,
563277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
564277487Skib	/* 17 - 720x576@50Hz */
565277487Skib	{ DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 27000, 720, 732,
566277487Skib		   796, 864, 0, 576, 581, 586, 625, 0,
567277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
568277487Skib	/* 18 - 720x576@50Hz */
569277487Skib	{ DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 27000, 720, 732,
570277487Skib		   796, 864, 0, 576, 581, 586, 625, 0,
571277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
572277487Skib	/* 19 - 1280x720@50Hz */
573277487Skib	{ DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 1720,
574277487Skib		   1760, 1980, 0, 720, 725, 730, 750, 0,
575277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
576277487Skib	/* 20 - 1920x1080i@50Hz */
577280183Sdumbbell	{ DRM_MODE("1920x1080i", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2448,
578277487Skib		   2492, 2640, 0, 1080, 1084, 1094, 1125, 0,
579277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
580277487Skib			DRM_MODE_FLAG_INTERLACE) },
581277487Skib	/* 21 - 1440x576i@50Hz */
582280183Sdumbbell	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
583277487Skib		   1590, 1728, 0, 576, 580, 586, 625, 0,
584277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
585277487Skib			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK) },
586277487Skib	/* 22 - 1440x576i@50Hz */
587280183Sdumbbell	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
588277487Skib		   1590, 1728, 0, 576, 580, 586, 625, 0,
589277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
590277487Skib			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK) },
591277487Skib	/* 23 - 1440x288@50Hz */
592277487Skib	{ DRM_MODE("1440x288", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
593277487Skib		   1590, 1728, 0, 288, 290, 293, 312, 0,
594277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
595277487Skib			DRM_MODE_FLAG_DBLCLK) },
596277487Skib	/* 24 - 1440x288@50Hz */
597277487Skib	{ DRM_MODE("1440x288", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
598277487Skib		   1590, 1728, 0, 288, 290, 293, 312, 0,
599277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
600277487Skib			DRM_MODE_FLAG_DBLCLK) },
601277487Skib	/* 25 - 2880x576i@50Hz */
602280183Sdumbbell	{ DRM_MODE("2880x576i", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2928,
603277487Skib		   3180, 3456, 0, 576, 580, 586, 625, 0,
604277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
605277487Skib			DRM_MODE_FLAG_INTERLACE) },
606277487Skib	/* 26 - 2880x576i@50Hz */
607280183Sdumbbell	{ DRM_MODE("2880x576i", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2928,
608277487Skib		   3180, 3456, 0, 576, 580, 586, 625, 0,
609277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
610277487Skib			DRM_MODE_FLAG_INTERLACE) },
611277487Skib	/* 27 - 2880x288@50Hz */
612277487Skib	{ DRM_MODE("2880x288", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2928,
613277487Skib		   3180, 3456, 0, 288, 290, 293, 312, 0,
614277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
615277487Skib	/* 28 - 2880x288@50Hz */
616277487Skib	{ DRM_MODE("2880x288", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2928,
617277487Skib		   3180, 3456, 0, 288, 290, 293, 312, 0,
618277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
619277487Skib	/* 29 - 1440x576@50Hz */
620277487Skib	{ DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464,
621277487Skib		   1592, 1728, 0, 576, 581, 586, 625, 0,
622277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
623277487Skib	/* 30 - 1440x576@50Hz */
624277487Skib	{ DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464,
625277487Skib		   1592, 1728, 0, 576, 581, 586, 625, 0,
626277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
627277487Skib	/* 31 - 1920x1080@50Hz */
628277487Skib	{ DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2448,
629277487Skib		   2492, 2640, 0, 1080, 1084, 1089, 1125, 0,
630277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
631277487Skib	/* 32 - 1920x1080@24Hz */
632277487Skib	{ DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2558,
633277487Skib		   2602, 2750, 0, 1080, 1084, 1089, 1125, 0,
634277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
635277487Skib	/* 33 - 1920x1080@25Hz */
636277487Skib	{ DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2448,
637277487Skib		   2492, 2640, 0, 1080, 1084, 1089, 1125, 0,
638277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
639277487Skib	/* 34 - 1920x1080@30Hz */
640277487Skib	{ DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2008,
641277487Skib		   2052, 2200, 0, 1080, 1084, 1089, 1125, 0,
642277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
643277487Skib	/* 35 - 2880x480@60Hz */
644277487Skib	{ DRM_MODE("2880x480", DRM_MODE_TYPE_DRIVER, 108000, 2880, 2944,
645277487Skib		   3192, 3432, 0, 480, 489, 495, 525, 0,
646277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
647277487Skib	/* 36 - 2880x480@60Hz */
648277487Skib	{ DRM_MODE("2880x480", DRM_MODE_TYPE_DRIVER, 108000, 2880, 2944,
649277487Skib		   3192, 3432, 0, 480, 489, 495, 525, 0,
650277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
651277487Skib	/* 37 - 2880x576@50Hz */
652277487Skib	{ DRM_MODE("2880x576", DRM_MODE_TYPE_DRIVER, 108000, 2880, 2928,
653277487Skib		   3184, 3456, 0, 576, 581, 586, 625, 0,
654277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
655277487Skib	/* 38 - 2880x576@50Hz */
656277487Skib	{ DRM_MODE("2880x576", DRM_MODE_TYPE_DRIVER, 108000, 2880, 2928,
657277487Skib		   3184, 3456, 0, 576, 581, 586, 625, 0,
658277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
659277487Skib	/* 39 - 1920x1080i@50Hz */
660280183Sdumbbell	{ DRM_MODE("1920x1080i", DRM_MODE_TYPE_DRIVER, 72000, 1920, 1952,
661277487Skib		   2120, 2304, 0, 1080, 1126, 1136, 1250, 0,
662277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC |
663277487Skib			DRM_MODE_FLAG_INTERLACE) },
664277487Skib	/* 40 - 1920x1080i@100Hz */
665280183Sdumbbell	{ DRM_MODE("1920x1080i", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2448,
666277487Skib		   2492, 2640, 0, 1080, 1084, 1094, 1125, 0,
667277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
668277487Skib			DRM_MODE_FLAG_INTERLACE) },
669277487Skib	/* 41 - 1280x720@100Hz */
670277487Skib	{ DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 148500, 1280, 1720,
671277487Skib		   1760, 1980, 0, 720, 725, 730, 750, 0,
672277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
673277487Skib	/* 42 - 720x576@100Hz */
674277487Skib	{ DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 54000, 720, 732,
675277487Skib		   796, 864, 0, 576, 581, 586, 625, 0,
676277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
677277487Skib	/* 43 - 720x576@100Hz */
678277487Skib	{ DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 54000, 720, 732,
679277487Skib		   796, 864, 0, 576, 581, 586, 625, 0,
680277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
681277487Skib	/* 44 - 1440x576i@100Hz */
682277487Skib	{ DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464,
683277487Skib		   1590, 1728, 0, 576, 580, 586, 625, 0,
684277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
685277487Skib			DRM_MODE_FLAG_DBLCLK) },
686277487Skib	/* 45 - 1440x576i@100Hz */
687277487Skib	{ DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464,
688277487Skib		   1590, 1728, 0, 576, 580, 586, 625, 0,
689277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
690277487Skib			DRM_MODE_FLAG_DBLCLK) },
691277487Skib	/* 46 - 1920x1080i@120Hz */
692280183Sdumbbell	{ DRM_MODE("1920x1080i", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2008,
693277487Skib		   2052, 2200, 0, 1080, 1084, 1094, 1125, 0,
694277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
695277487Skib			DRM_MODE_FLAG_INTERLACE) },
696277487Skib	/* 47 - 1280x720@120Hz */
697277487Skib	{ DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 148500, 1280, 1390,
698277487Skib		   1430, 1650, 0, 720, 725, 730, 750, 0,
699277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
700277487Skib	/* 48 - 720x480@120Hz */
701277487Skib	{ DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 54000, 720, 736,
702277487Skib		   798, 858, 0, 480, 489, 495, 525, 0,
703277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
704277487Skib	/* 49 - 720x480@120Hz */
705277487Skib	{ DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 54000, 720, 736,
706277487Skib		   798, 858, 0, 480, 489, 495, 525, 0,
707277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
708277487Skib	/* 50 - 1440x480i@120Hz */
709280183Sdumbbell	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1478,
710277487Skib		   1602, 1716, 0, 480, 488, 494, 525, 0,
711277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
712277487Skib			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK) },
713277487Skib	/* 51 - 1440x480i@120Hz */
714280183Sdumbbell	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1478,
715277487Skib		   1602, 1716, 0, 480, 488, 494, 525, 0,
716277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
717277487Skib			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK) },
718277487Skib	/* 52 - 720x576@200Hz */
719277487Skib	{ DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 108000, 720, 732,
720277487Skib		   796, 864, 0, 576, 581, 586, 625, 0,
721277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
722277487Skib	/* 53 - 720x576@200Hz */
723277487Skib	{ DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 108000, 720, 732,
724277487Skib		   796, 864, 0, 576, 581, 586, 625, 0,
725277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
726277487Skib	/* 54 - 1440x576i@200Hz */
727280183Sdumbbell	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1464,
728277487Skib		   1590, 1728, 0, 576, 580, 586, 625, 0,
729277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
730277487Skib			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK) },
731277487Skib	/* 55 - 1440x576i@200Hz */
732280183Sdumbbell	{ DRM_MODE("1440x576i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1464,
733277487Skib		   1590, 1728, 0, 576, 580, 586, 625, 0,
734277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
735277487Skib			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK) },
736277487Skib	/* 56 - 720x480@240Hz */
737277487Skib	{ DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 108000, 720, 736,
738277487Skib		   798, 858, 0, 480, 489, 495, 525, 0,
739277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
740277487Skib	/* 57 - 720x480@240Hz */
741277487Skib	{ DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 108000, 720, 736,
742277487Skib		   798, 858, 0, 480, 489, 495, 525, 0,
743277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
744277487Skib	/* 58 - 1440x480i@240 */
745280183Sdumbbell	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1478,
746277487Skib		   1602, 1716, 0, 480, 488, 494, 525, 0,
747277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
748277487Skib			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK) },
749277487Skib	/* 59 - 1440x480i@240 */
750280183Sdumbbell	{ DRM_MODE("1440x480i", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1478,
751277487Skib		   1602, 1716, 0, 480, 488, 494, 525, 0,
752277487Skib		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
753277487Skib			DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK) },
754277487Skib	/* 60 - 1280x720@24Hz */
755277487Skib	{ DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 59400, 1280, 3040,
756277487Skib		   3080, 3300, 0, 720, 725, 730, 750, 0,
757277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
758277487Skib	/* 61 - 1280x720@25Hz */
759277487Skib	{ DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 3700,
760277487Skib		   3740, 3960, 0, 720, 725, 730, 750, 0,
761277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
762277487Skib	/* 62 - 1280x720@30Hz */
763277487Skib	{ DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 3040,
764277487Skib		   3080, 3300, 0, 720, 725, 730, 750, 0,
765277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
766277487Skib	/* 63 - 1920x1080@120Hz */
767277487Skib	{ DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 297000, 1920, 2008,
768277487Skib		   2052, 2200, 0, 1080, 1084, 1089, 1125, 0,
769277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
770277487Skib	/* 64 - 1920x1080@100Hz */
771277487Skib	{ DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 297000, 1920, 2448,
772277487Skib		   2492, 2640, 0, 1080, 1084, 1094, 1125, 0,
773277487Skib		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
774277487Skib};
775280183Sdumbbellstatic const int drm_num_cea_modes = ARRAY_SIZE(edid_cea_modes);
776