Subversion Repositories Kolibri OS

Rev

Rev 5271 | Rev 6660 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5271 Rev 6084
Line 144... Line 144...
144
/*
144
/*
145
 * Autogenerated from the DMT spec.
145
 * Autogenerated from the DMT spec.
146
 * This table is copied from xfree86/modes/xf86EdidModes.c.
146
 * This table is copied from xfree86/modes/xf86EdidModes.c.
147
 */
147
 */
148
static const struct drm_display_mode drm_dmt_modes[] = {
148
static const struct drm_display_mode drm_dmt_modes[] = {
149
	/* 640x350@85Hz */
149
	/* 0x01 - 640x350@85Hz */
150
	{ DRM_MODE("640x350", DRM_MODE_TYPE_DRIVER, 31500, 640, 672,
150
	{ DRM_MODE("640x350", DRM_MODE_TYPE_DRIVER, 31500, 640, 672,
151
		   736, 832, 0, 350, 382, 385, 445, 0,
151
		   736, 832, 0, 350, 382, 385, 445, 0,
152
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
152
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
153
	/* 640x400@85Hz */
153
	/* 0x02 - 640x400@85Hz */
154
	{ DRM_MODE("640x400", DRM_MODE_TYPE_DRIVER, 31500, 640, 672,
154
	{ DRM_MODE("640x400", DRM_MODE_TYPE_DRIVER, 31500, 640, 672,
155
		   736, 832, 0, 400, 401, 404, 445, 0,
155
		   736, 832, 0, 400, 401, 404, 445, 0,
156
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
156
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
157
	/* 720x400@85Hz */
157
	/* 0x03 - 720x400@85Hz */
158
	{ DRM_MODE("720x400", DRM_MODE_TYPE_DRIVER, 35500, 720, 756,
158
	{ DRM_MODE("720x400", DRM_MODE_TYPE_DRIVER, 35500, 720, 756,
159
		   828, 936, 0, 400, 401, 404, 446, 0,
159
		   828, 936, 0, 400, 401, 404, 446, 0,
160
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
160
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
161
	/* 640x480@60Hz */
161
	/* 0x04 - 640x480@60Hz */
162
	{ DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 25175, 640, 656,
162
	{ DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 25175, 640, 656,
163
		   752, 800, 0, 480, 489, 492, 525, 0,
163
		   752, 800, 0, 480, 490, 492, 525, 0,
164
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
164
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
165
	/* 640x480@72Hz */
165
	/* 0x05 - 640x480@72Hz */
166
	{ DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 31500, 640, 664,
166
	{ DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 31500, 640, 664,
167
		   704, 832, 0, 480, 489, 492, 520, 0,
167
		   704, 832, 0, 480, 489, 492, 520, 0,
168
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
168
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
169
	/* 640x480@75Hz */
169
	/* 0x06 - 640x480@75Hz */
170
	{ DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 31500, 640, 656,
170
	{ DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 31500, 640, 656,
171
		   720, 840, 0, 480, 481, 484, 500, 0,
171
		   720, 840, 0, 480, 481, 484, 500, 0,
172
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
172
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
173
	/* 640x480@85Hz */
173
	/* 0x07 - 640x480@85Hz */
174
	{ DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 36000, 640, 696,
174
	{ DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 36000, 640, 696,
175
		   752, 832, 0, 480, 481, 484, 509, 0,
175
		   752, 832, 0, 480, 481, 484, 509, 0,
176
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
176
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
177
	/* 800x600@56Hz */
177
	/* 0x08 - 800x600@56Hz */
178
	{ DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 36000, 800, 824,
178
	{ DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 36000, 800, 824,
179
		   896, 1024, 0, 600, 601, 603, 625, 0,
179
		   896, 1024, 0, 600, 601, 603, 625, 0,
180
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
180
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
181
	/* 800x600@60Hz */
181
	/* 0x09 - 800x600@60Hz */
182
	{ DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 40000, 800, 840,
182
	{ DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 40000, 800, 840,
183
		   968, 1056, 0, 600, 601, 605, 628, 0,
183
		   968, 1056, 0, 600, 601, 605, 628, 0,
184
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
184
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
185
	/* 800x600@72Hz */
185
	/* 0x0a - 800x600@72Hz */
186
	{ DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 50000, 800, 856,
186
	{ DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 50000, 800, 856,
187
		   976, 1040, 0, 600, 637, 643, 666, 0,
187
		   976, 1040, 0, 600, 637, 643, 666, 0,
188
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
188
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
189
	/* 800x600@75Hz */
189
	/* 0x0b - 800x600@75Hz */
190
	{ DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 49500, 800, 816,
190
	{ DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 49500, 800, 816,
191
		   896, 1056, 0, 600, 601, 604, 625, 0,
191
		   896, 1056, 0, 600, 601, 604, 625, 0,
192
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
192
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
193
	/* 800x600@85Hz */
193
	/* 0x0c - 800x600@85Hz */
194
	{ DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 56250, 800, 832,
194
	{ DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 56250, 800, 832,
195
		   896, 1048, 0, 600, 601, 604, 631, 0,
195
		   896, 1048, 0, 600, 601, 604, 631, 0,
196
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
196
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
197
	/* 800x600@120Hz RB */
197
	/* 0x0d - 800x600@120Hz RB */
198
	{ DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 73250, 800, 848,
198
	{ DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 73250, 800, 848,
199
		   880, 960, 0, 600, 603, 607, 636, 0,
199
		   880, 960, 0, 600, 603, 607, 636, 0,
200
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
200
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
201
	/* 848x480@60Hz */
201
	/* 0x0e - 848x480@60Hz */
202
	{ DRM_MODE("848x480", DRM_MODE_TYPE_DRIVER, 33750, 848, 864,
202
	{ DRM_MODE("848x480", DRM_MODE_TYPE_DRIVER, 33750, 848, 864,
203
		   976, 1088, 0, 480, 486, 494, 517, 0,
203
		   976, 1088, 0, 480, 486, 494, 517, 0,
204
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
204
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
205
	/* 1024x768@43Hz, interlace */
205
	/* 0x0f - 1024x768@43Hz, interlace */
206
	{ DRM_MODE("1024x768i", DRM_MODE_TYPE_DRIVER, 44900, 1024, 1032,
206
	{ DRM_MODE("1024x768i", DRM_MODE_TYPE_DRIVER, 44900, 1024, 1032,
207
		   1208, 1264, 0, 768, 768, 772, 817, 0,
207
		   1208, 1264, 0, 768, 768, 772, 817, 0,
208
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
208
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
209
			DRM_MODE_FLAG_INTERLACE) },
209
		   DRM_MODE_FLAG_INTERLACE) },
210
	/* 1024x768@60Hz */
210
	/* 0x10 - 1024x768@60Hz */
211
	{ DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 65000, 1024, 1048,
211
	{ DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 65000, 1024, 1048,
212
		   1184, 1344, 0, 768, 771, 777, 806, 0,
212
		   1184, 1344, 0, 768, 771, 777, 806, 0,
213
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
213
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
214
	/* 1024x768@70Hz */
214
	/* 0x11 - 1024x768@70Hz */
215
	{ DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 75000, 1024, 1048,
215
	{ DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 75000, 1024, 1048,
216
		   1184, 1328, 0, 768, 771, 777, 806, 0,
216
		   1184, 1328, 0, 768, 771, 777, 806, 0,
217
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
217
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
218
	/* 1024x768@75Hz */
218
	/* 0x12 - 1024x768@75Hz */
219
	{ DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 78750, 1024, 1040,
219
	{ DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 78750, 1024, 1040,
220
		   1136, 1312, 0, 768, 769, 772, 800, 0,
220
		   1136, 1312, 0, 768, 769, 772, 800, 0,
221
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
221
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
222
	/* 1024x768@85Hz */
222
	/* 0x13 - 1024x768@85Hz */
223
	{ DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 94500, 1024, 1072,
223
	{ DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 94500, 1024, 1072,
224
		   1168, 1376, 0, 768, 769, 772, 808, 0,
224
		   1168, 1376, 0, 768, 769, 772, 808, 0,
225
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
225
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
226
	/* 1024x768@120Hz RB */
226
	/* 0x14 - 1024x768@120Hz RB */
227
	{ DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 115500, 1024, 1072,
227
	{ DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 115500, 1024, 1072,
228
		   1104, 1184, 0, 768, 771, 775, 813, 0,
228
		   1104, 1184, 0, 768, 771, 775, 813, 0,
229
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
229
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
230
	/* 1152x864@75Hz */
230
	/* 0x15 - 1152x864@75Hz */
231
	{ DRM_MODE("1152x864", DRM_MODE_TYPE_DRIVER, 108000, 1152, 1216,
231
	{ DRM_MODE("1152x864", DRM_MODE_TYPE_DRIVER, 108000, 1152, 1216,
232
		   1344, 1600, 0, 864, 865, 868, 900, 0,
232
		   1344, 1600, 0, 864, 865, 868, 900, 0,
233
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
233
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
-
 
234
	/* 0x55 - 1280x720@60Hz */
-
 
235
	{ DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 1390,
-
 
236
		   1430, 1650, 0, 720, 725, 730, 750, 0,
-
 
237
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
234
	/* 1280x768@60Hz RB */
238
	/* 0x16 - 1280x768@60Hz RB */
235
	{ DRM_MODE("1280x768", DRM_MODE_TYPE_DRIVER, 68250, 1280, 1328,
239
	{ DRM_MODE("1280x768", DRM_MODE_TYPE_DRIVER, 68250, 1280, 1328,
236
		   1360, 1440, 0, 768, 771, 778, 790, 0,
240
		   1360, 1440, 0, 768, 771, 778, 790, 0,
237
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
241
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
238
	/* 1280x768@60Hz */
242
	/* 0x17 - 1280x768@60Hz */
239
	{ DRM_MODE("1280x768", DRM_MODE_TYPE_DRIVER, 79500, 1280, 1344,
243
	{ DRM_MODE("1280x768", DRM_MODE_TYPE_DRIVER, 79500, 1280, 1344,
240
		   1472, 1664, 0, 768, 771, 778, 798, 0,
244
		   1472, 1664, 0, 768, 771, 778, 798, 0,
241
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
245
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
242
	/* 1280x768@75Hz */
246
	/* 0x18 - 1280x768@75Hz */
243
	{ DRM_MODE("1280x768", DRM_MODE_TYPE_DRIVER, 102250, 1280, 1360,
247
	{ DRM_MODE("1280x768", DRM_MODE_TYPE_DRIVER, 102250, 1280, 1360,
244
		   1488, 1696, 0, 768, 771, 778, 805, 0,
248
		   1488, 1696, 0, 768, 771, 778, 805, 0,
245
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
249
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
246
	/* 1280x768@85Hz */
250
	/* 0x19 - 1280x768@85Hz */
247
	{ DRM_MODE("1280x768", DRM_MODE_TYPE_DRIVER, 117500, 1280, 1360,
251
	{ DRM_MODE("1280x768", DRM_MODE_TYPE_DRIVER, 117500, 1280, 1360,
248
		   1496, 1712, 0, 768, 771, 778, 809, 0,
252
		   1496, 1712, 0, 768, 771, 778, 809, 0,
249
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
253
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
250
	/* 1280x768@120Hz RB */
254
	/* 0x1a - 1280x768@120Hz RB */
251
	{ DRM_MODE("1280x768", DRM_MODE_TYPE_DRIVER, 140250, 1280, 1328,
255
	{ DRM_MODE("1280x768", DRM_MODE_TYPE_DRIVER, 140250, 1280, 1328,
252
		   1360, 1440, 0, 768, 771, 778, 813, 0,
256
		   1360, 1440, 0, 768, 771, 778, 813, 0,
253
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
257
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
254
	/* 1280x800@60Hz RB */
258
	/* 0x1b - 1280x800@60Hz RB */
255
	{ DRM_MODE("1280x800", DRM_MODE_TYPE_DRIVER, 71000, 1280, 1328,
259
	{ DRM_MODE("1280x800", DRM_MODE_TYPE_DRIVER, 71000, 1280, 1328,
256
		   1360, 1440, 0, 800, 803, 809, 823, 0,
260
		   1360, 1440, 0, 800, 803, 809, 823, 0,
257
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
261
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
258
	/* 1280x800@60Hz */
262
	/* 0x1c - 1280x800@60Hz */
259
	{ DRM_MODE("1280x800", DRM_MODE_TYPE_DRIVER, 83500, 1280, 1352,
263
	{ DRM_MODE("1280x800", DRM_MODE_TYPE_DRIVER, 83500, 1280, 1352,
260
		   1480, 1680, 0, 800, 803, 809, 831, 0,
264
		   1480, 1680, 0, 800, 803, 809, 831, 0,
261
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
265
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
262
	/* 1280x800@75Hz */
266
	/* 0x1d - 1280x800@75Hz */
263
	{ DRM_MODE("1280x800", DRM_MODE_TYPE_DRIVER, 106500, 1280, 1360,
267
	{ DRM_MODE("1280x800", DRM_MODE_TYPE_DRIVER, 106500, 1280, 1360,
264
		   1488, 1696, 0, 800, 803, 809, 838, 0,
268
		   1488, 1696, 0, 800, 803, 809, 838, 0,
265
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
269
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
266
	/* 1280x800@85Hz */
270
	/* 0x1e - 1280x800@85Hz */
267
	{ DRM_MODE("1280x800", DRM_MODE_TYPE_DRIVER, 122500, 1280, 1360,
271
	{ DRM_MODE("1280x800", DRM_MODE_TYPE_DRIVER, 122500, 1280, 1360,
268
		   1496, 1712, 0, 800, 803, 809, 843, 0,
272
		   1496, 1712, 0, 800, 803, 809, 843, 0,
269
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
273
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
270
	/* 1280x800@120Hz RB */
274
	/* 0x1f - 1280x800@120Hz RB */
271
	{ DRM_MODE("1280x800", DRM_MODE_TYPE_DRIVER, 146250, 1280, 1328,
275
	{ DRM_MODE("1280x800", DRM_MODE_TYPE_DRIVER, 146250, 1280, 1328,
272
		   1360, 1440, 0, 800, 803, 809, 847, 0,
276
		   1360, 1440, 0, 800, 803, 809, 847, 0,
273
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
277
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
274
	/* 1280x960@60Hz */
278
	/* 0x20 - 1280x960@60Hz */
275
	{ DRM_MODE("1280x960", DRM_MODE_TYPE_DRIVER, 108000, 1280, 1376,
279
	{ DRM_MODE("1280x960", DRM_MODE_TYPE_DRIVER, 108000, 1280, 1376,
276
		   1488, 1800, 0, 960, 961, 964, 1000, 0,
280
		   1488, 1800, 0, 960, 961, 964, 1000, 0,
277
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
281
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
278
	/* 1280x960@85Hz */
282
	/* 0x21 - 1280x960@85Hz */
279
	{ DRM_MODE("1280x960", DRM_MODE_TYPE_DRIVER, 148500, 1280, 1344,
283
	{ DRM_MODE("1280x960", DRM_MODE_TYPE_DRIVER, 148500, 1280, 1344,
280
		   1504, 1728, 0, 960, 961, 964, 1011, 0,
284
		   1504, 1728, 0, 960, 961, 964, 1011, 0,
281
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
285
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
282
	/* 1280x960@120Hz RB */
286
	/* 0x22 - 1280x960@120Hz RB */
283
	{ DRM_MODE("1280x960", DRM_MODE_TYPE_DRIVER, 175500, 1280, 1328,
287
	{ DRM_MODE("1280x960", DRM_MODE_TYPE_DRIVER, 175500, 1280, 1328,
284
		   1360, 1440, 0, 960, 963, 967, 1017, 0,
288
		   1360, 1440, 0, 960, 963, 967, 1017, 0,
285
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
289
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
286
	/* 1280x1024@60Hz */
290
	/* 0x23 - 1280x1024@60Hz */
287
	{ DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 108000, 1280, 1328,
291
	{ DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 108000, 1280, 1328,
288
		   1440, 1688, 0, 1024, 1025, 1028, 1066, 0,
292
		   1440, 1688, 0, 1024, 1025, 1028, 1066, 0,
289
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
293
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
290
	/* 1280x1024@75Hz */
294
	/* 0x24 - 1280x1024@75Hz */
291
	{ DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 135000, 1280, 1296,
295
	{ DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 135000, 1280, 1296,
292
		   1440, 1688, 0, 1024, 1025, 1028, 1066, 0,
296
		   1440, 1688, 0, 1024, 1025, 1028, 1066, 0,
293
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
297
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
294
	/* 1280x1024@85Hz */
298
	/* 0x25 - 1280x1024@85Hz */
295
	{ DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 157500, 1280, 1344,
299
	{ DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 157500, 1280, 1344,
296
		   1504, 1728, 0, 1024, 1025, 1028, 1072, 0,
300
		   1504, 1728, 0, 1024, 1025, 1028, 1072, 0,
297
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
301
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
298
	/* 1280x1024@120Hz RB */
302
	/* 0x26 - 1280x1024@120Hz RB */
299
	{ DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 187250, 1280, 1328,
303
	{ DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 187250, 1280, 1328,
300
		   1360, 1440, 0, 1024, 1027, 1034, 1084, 0,
304
		   1360, 1440, 0, 1024, 1027, 1034, 1084, 0,
301
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
305
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
302
	/* 1360x768@60Hz */
306
	/* 0x27 - 1360x768@60Hz */
303
	{ DRM_MODE("1360x768", DRM_MODE_TYPE_DRIVER, 85500, 1360, 1424,
307
	{ DRM_MODE("1360x768", DRM_MODE_TYPE_DRIVER, 85500, 1360, 1424,
304
		   1536, 1792, 0, 768, 771, 777, 795, 0,
308
		   1536, 1792, 0, 768, 771, 777, 795, 0,
305
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
309
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
306
	/* 1360x768@120Hz RB */
310
	/* 0x28 - 1360x768@120Hz RB */
307
	{ DRM_MODE("1360x768", DRM_MODE_TYPE_DRIVER, 148250, 1360, 1408,
311
	{ DRM_MODE("1360x768", DRM_MODE_TYPE_DRIVER, 148250, 1360, 1408,
308
		   1440, 1520, 0, 768, 771, 776, 813, 0,
312
		   1440, 1520, 0, 768, 771, 776, 813, 0,
309
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
313
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
-
 
314
	/* 0x51 - 1366x768@60Hz */
-
 
315
	{ DRM_MODE("1366x768", DRM_MODE_TYPE_DRIVER, 85500, 1366, 1436,
-
 
316
		   1579, 1792, 0, 768, 771, 774, 798, 0,
-
 
317
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
-
 
318
	/* 0x56 - 1366x768@60Hz */
-
 
319
	{ DRM_MODE("1366x768", DRM_MODE_TYPE_DRIVER, 72000, 1366, 1380,
-
 
320
		   1436, 1500, 0, 768, 769, 772, 800, 0,
-
 
321
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
310
	/* 1400x1050@60Hz RB */
322
	/* 0x29 - 1400x1050@60Hz RB */
311
	{ DRM_MODE("1400x1050", DRM_MODE_TYPE_DRIVER, 101000, 1400, 1448,
323
	{ DRM_MODE("1400x1050", DRM_MODE_TYPE_DRIVER, 101000, 1400, 1448,
312
		   1480, 1560, 0, 1050, 1053, 1057, 1080, 0,
324
		   1480, 1560, 0, 1050, 1053, 1057, 1080, 0,
313
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
325
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
314
	/* 1400x1050@60Hz */
326
	/* 0x2a - 1400x1050@60Hz */
315
	{ DRM_MODE("1400x1050", DRM_MODE_TYPE_DRIVER, 121750, 1400, 1488,
327
	{ DRM_MODE("1400x1050", DRM_MODE_TYPE_DRIVER, 121750, 1400, 1488,
316
		   1632, 1864, 0, 1050, 1053, 1057, 1089, 0,
328
		   1632, 1864, 0, 1050, 1053, 1057, 1089, 0,
317
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
329
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
318
	/* 1400x1050@75Hz */
330
	/* 0x2b - 1400x1050@75Hz */
319
	{ DRM_MODE("1400x1050", DRM_MODE_TYPE_DRIVER, 156000, 1400, 1504,
331
	{ DRM_MODE("1400x1050", DRM_MODE_TYPE_DRIVER, 156000, 1400, 1504,
320
		   1648, 1896, 0, 1050, 1053, 1057, 1099, 0,
332
		   1648, 1896, 0, 1050, 1053, 1057, 1099, 0,
321
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
333
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
322
	/* 1400x1050@85Hz */
334
	/* 0x2c - 1400x1050@85Hz */
323
	{ DRM_MODE("1400x1050", DRM_MODE_TYPE_DRIVER, 179500, 1400, 1504,
335
	{ DRM_MODE("1400x1050", DRM_MODE_TYPE_DRIVER, 179500, 1400, 1504,
324
		   1656, 1912, 0, 1050, 1053, 1057, 1105, 0,
336
		   1656, 1912, 0, 1050, 1053, 1057, 1105, 0,
325
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
337
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
326
	/* 1400x1050@120Hz RB */
338
	/* 0x2d - 1400x1050@120Hz RB */
327
	{ DRM_MODE("1400x1050", DRM_MODE_TYPE_DRIVER, 208000, 1400, 1448,
339
	{ DRM_MODE("1400x1050", DRM_MODE_TYPE_DRIVER, 208000, 1400, 1448,
328
		   1480, 1560, 0, 1050, 1053, 1057, 1112, 0,
340
		   1480, 1560, 0, 1050, 1053, 1057, 1112, 0,
329
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
341
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
330
	/* 1440x900@60Hz RB */
342
	/* 0x2e - 1440x900@60Hz RB */
331
	{ DRM_MODE("1440x900", DRM_MODE_TYPE_DRIVER, 88750, 1440, 1488,
343
	{ DRM_MODE("1440x900", DRM_MODE_TYPE_DRIVER, 88750, 1440, 1488,
332
		   1520, 1600, 0, 900, 903, 909, 926, 0,
344
		   1520, 1600, 0, 900, 903, 909, 926, 0,
333
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
345
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
334
	/* 1440x900@60Hz */
346
	/* 0x2f - 1440x900@60Hz */
335
	{ DRM_MODE("1440x900", DRM_MODE_TYPE_DRIVER, 106500, 1440, 1520,
347
	{ DRM_MODE("1440x900", DRM_MODE_TYPE_DRIVER, 106500, 1440, 1520,
336
		   1672, 1904, 0, 900, 903, 909, 934, 0,
348
		   1672, 1904, 0, 900, 903, 909, 934, 0,
337
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
349
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
338
	/* 1440x900@75Hz */
350
	/* 0x30 - 1440x900@75Hz */
339
	{ DRM_MODE("1440x900", DRM_MODE_TYPE_DRIVER, 136750, 1440, 1536,
351
	{ DRM_MODE("1440x900", DRM_MODE_TYPE_DRIVER, 136750, 1440, 1536,
340
		   1688, 1936, 0, 900, 903, 909, 942, 0,
352
		   1688, 1936, 0, 900, 903, 909, 942, 0,
341
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
353
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
342
	/* 1440x900@85Hz */
354
	/* 0x31 - 1440x900@85Hz */
343
	{ DRM_MODE("1440x900", DRM_MODE_TYPE_DRIVER, 157000, 1440, 1544,
355
	{ DRM_MODE("1440x900", DRM_MODE_TYPE_DRIVER, 157000, 1440, 1544,
344
		   1696, 1952, 0, 900, 903, 909, 948, 0,
356
		   1696, 1952, 0, 900, 903, 909, 948, 0,
345
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
357
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
346
	/* 1440x900@120Hz RB */
358
	/* 0x32 - 1440x900@120Hz RB */
347
	{ DRM_MODE("1440x900", DRM_MODE_TYPE_DRIVER, 182750, 1440, 1488,
359
	{ DRM_MODE("1440x900", DRM_MODE_TYPE_DRIVER, 182750, 1440, 1488,
348
		   1520, 1600, 0, 900, 903, 909, 953, 0,
360
		   1520, 1600, 0, 900, 903, 909, 953, 0,
349
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
361
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
-
 
362
	/* 0x53 - 1600x900@60Hz */
-
 
363
	{ DRM_MODE("1600x900", DRM_MODE_TYPE_DRIVER, 108000, 1600, 1624,
-
 
364
		   1704, 1800, 0, 900, 901, 904, 1000, 0,
-
 
365
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
350
	/* 1600x1200@60Hz */
366
	/* 0x33 - 1600x1200@60Hz */
351
	{ DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 162000, 1600, 1664,
367
	{ DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 162000, 1600, 1664,
352
		   1856, 2160, 0, 1200, 1201, 1204, 1250, 0,
368
		   1856, 2160, 0, 1200, 1201, 1204, 1250, 0,
353
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
369
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
354
	/* 1600x1200@65Hz */
370
	/* 0x34 - 1600x1200@65Hz */
355
	{ DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 175500, 1600, 1664,
371
	{ DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 175500, 1600, 1664,
356
		   1856, 2160, 0, 1200, 1201, 1204, 1250, 0,
372
		   1856, 2160, 0, 1200, 1201, 1204, 1250, 0,
357
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
373
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
358
	/* 1600x1200@70Hz */
374
	/* 0x35 - 1600x1200@70Hz */
359
	{ DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 189000, 1600, 1664,
375
	{ DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 189000, 1600, 1664,
360
		   1856, 2160, 0, 1200, 1201, 1204, 1250, 0,
376
		   1856, 2160, 0, 1200, 1201, 1204, 1250, 0,
361
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
377
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
362
	/* 1600x1200@75Hz */
378
	/* 0x36 - 1600x1200@75Hz */
363
	{ DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 202500, 1600, 1664,
379
	{ DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 202500, 1600, 1664,
364
		   1856, 2160, 0, 1200, 1201, 1204, 1250, 0,
380
		   1856, 2160, 0, 1200, 1201, 1204, 1250, 0,
365
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
381
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
366
	/* 1600x1200@85Hz */
382
	/* 0x37 - 1600x1200@85Hz */
367
	{ DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 229500, 1600, 1664,
383
	{ DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 229500, 1600, 1664,
368
		   1856, 2160, 0, 1200, 1201, 1204, 1250, 0,
384
		   1856, 2160, 0, 1200, 1201, 1204, 1250, 0,
369
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
385
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
370
	/* 1600x1200@120Hz RB */
386
	/* 0x38 - 1600x1200@120Hz RB */
371
	{ DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 268250, 1600, 1648,
387
	{ DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 268250, 1600, 1648,
372
		   1680, 1760, 0, 1200, 1203, 1207, 1271, 0,
388
		   1680, 1760, 0, 1200, 1203, 1207, 1271, 0,
373
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
389
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
374
	/* 1680x1050@60Hz RB */
390
	/* 0x39 - 1680x1050@60Hz RB */
375
	{ DRM_MODE("1680x1050", DRM_MODE_TYPE_DRIVER, 119000, 1680, 1728,
391
	{ DRM_MODE("1680x1050", DRM_MODE_TYPE_DRIVER, 119000, 1680, 1728,
376
		   1760, 1840, 0, 1050, 1053, 1059, 1080, 0,
392
		   1760, 1840, 0, 1050, 1053, 1059, 1080, 0,
377
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
393
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
378
	/* 1680x1050@60Hz */
394
	/* 0x3a - 1680x1050@60Hz */
379
	{ DRM_MODE("1680x1050", DRM_MODE_TYPE_DRIVER, 146250, 1680, 1784,
395
	{ DRM_MODE("1680x1050", DRM_MODE_TYPE_DRIVER, 146250, 1680, 1784,
380
		   1960, 2240, 0, 1050, 1053, 1059, 1089, 0,
396
		   1960, 2240, 0, 1050, 1053, 1059, 1089, 0,
381
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
397
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
382
	/* 1680x1050@75Hz */
398
	/* 0x3b - 1680x1050@75Hz */
383
	{ DRM_MODE("1680x1050", DRM_MODE_TYPE_DRIVER, 187000, 1680, 1800,
399
	{ DRM_MODE("1680x1050", DRM_MODE_TYPE_DRIVER, 187000, 1680, 1800,
384
		   1976, 2272, 0, 1050, 1053, 1059, 1099, 0,
400
		   1976, 2272, 0, 1050, 1053, 1059, 1099, 0,
385
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
401
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
386
	/* 1680x1050@85Hz */
402
	/* 0x3c - 1680x1050@85Hz */
387
	{ DRM_MODE("1680x1050", DRM_MODE_TYPE_DRIVER, 214750, 1680, 1808,
403
	{ DRM_MODE("1680x1050", DRM_MODE_TYPE_DRIVER, 214750, 1680, 1808,
388
		   1984, 2288, 0, 1050, 1053, 1059, 1105, 0,
404
		   1984, 2288, 0, 1050, 1053, 1059, 1105, 0,
389
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
405
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
390
	/* 1680x1050@120Hz RB */
406
	/* 0x3d - 1680x1050@120Hz RB */
391
	{ DRM_MODE("1680x1050", DRM_MODE_TYPE_DRIVER, 245500, 1680, 1728,
407
	{ DRM_MODE("1680x1050", DRM_MODE_TYPE_DRIVER, 245500, 1680, 1728,
392
		   1760, 1840, 0, 1050, 1053, 1059, 1112, 0,
408
		   1760, 1840, 0, 1050, 1053, 1059, 1112, 0,
393
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
409
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
394
	/* 1792x1344@60Hz */
410
	/* 0x3e - 1792x1344@60Hz */
395
	{ DRM_MODE("1792x1344", DRM_MODE_TYPE_DRIVER, 204750, 1792, 1920,
411
	{ DRM_MODE("1792x1344", DRM_MODE_TYPE_DRIVER, 204750, 1792, 1920,
396
		   2120, 2448, 0, 1344, 1345, 1348, 1394, 0,
412
		   2120, 2448, 0, 1344, 1345, 1348, 1394, 0,
397
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
413
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
398
	/* 1792x1344@75Hz */
414
	/* 0x3f - 1792x1344@75Hz */
399
	{ DRM_MODE("1792x1344", DRM_MODE_TYPE_DRIVER, 261000, 1792, 1888,
415
	{ DRM_MODE("1792x1344", DRM_MODE_TYPE_DRIVER, 261000, 1792, 1888,
400
		   2104, 2456, 0, 1344, 1345, 1348, 1417, 0,
416
		   2104, 2456, 0, 1344, 1345, 1348, 1417, 0,
401
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
417
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
402
	/* 1792x1344@120Hz RB */
418
	/* 0x40 - 1792x1344@120Hz RB */
403
	{ DRM_MODE("1792x1344", DRM_MODE_TYPE_DRIVER, 333250, 1792, 1840,
419
	{ DRM_MODE("1792x1344", DRM_MODE_TYPE_DRIVER, 333250, 1792, 1840,
404
		   1872, 1952, 0, 1344, 1347, 1351, 1423, 0,
420
		   1872, 1952, 0, 1344, 1347, 1351, 1423, 0,
405
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
421
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
406
	/* 1856x1392@60Hz */
422
	/* 0x41 - 1856x1392@60Hz */
407
	{ DRM_MODE("1856x1392", DRM_MODE_TYPE_DRIVER, 218250, 1856, 1952,
423
	{ DRM_MODE("1856x1392", DRM_MODE_TYPE_DRIVER, 218250, 1856, 1952,
408
		   2176, 2528, 0, 1392, 1393, 1396, 1439, 0,
424
		   2176, 2528, 0, 1392, 1393, 1396, 1439, 0,
409
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
425
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
410
	/* 1856x1392@75Hz */
426
	/* 0x42 - 1856x1392@75Hz */
411
	{ DRM_MODE("1856x1392", DRM_MODE_TYPE_DRIVER, 288000, 1856, 1984,
427
	{ DRM_MODE("1856x1392", DRM_MODE_TYPE_DRIVER, 288000, 1856, 1984,
412
		   2208, 2560, 0, 1392, 1395, 1399, 1500, 0,
428
		   2208, 2560, 0, 1392, 1393, 1396, 1500, 0,
413
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
429
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
414
	/* 1856x1392@120Hz RB */
430
	/* 0x43 - 1856x1392@120Hz RB */
415
	{ DRM_MODE("1856x1392", DRM_MODE_TYPE_DRIVER, 356500, 1856, 1904,
431
	{ DRM_MODE("1856x1392", DRM_MODE_TYPE_DRIVER, 356500, 1856, 1904,
416
		   1936, 2016, 0, 1392, 1395, 1399, 1474, 0,
432
		   1936, 2016, 0, 1392, 1395, 1399, 1474, 0,
417
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
433
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
-
 
434
	/* 0x52 - 1920x1080@60Hz */
-
 
435
	{ DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2008,
-
 
436
		   2052, 2200, 0, 1080, 1084, 1089, 1125, 0,
-
 
437
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
418
	/* 1920x1200@60Hz RB */
438
	/* 0x44 - 1920x1200@60Hz RB */
419
	{ DRM_MODE("1920x1200", DRM_MODE_TYPE_DRIVER, 154000, 1920, 1968,
439
	{ DRM_MODE("1920x1200", DRM_MODE_TYPE_DRIVER, 154000, 1920, 1968,
420
		   2000, 2080, 0, 1200, 1203, 1209, 1235, 0,
440
		   2000, 2080, 0, 1200, 1203, 1209, 1235, 0,
421
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
441
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
422
	/* 1920x1200@60Hz */
442
	/* 0x45 - 1920x1200@60Hz */
423
	{ DRM_MODE("1920x1200", DRM_MODE_TYPE_DRIVER, 193250, 1920, 2056,
443
	{ DRM_MODE("1920x1200", DRM_MODE_TYPE_DRIVER, 193250, 1920, 2056,
424
		   2256, 2592, 0, 1200, 1203, 1209, 1245, 0,
444
		   2256, 2592, 0, 1200, 1203, 1209, 1245, 0,
425
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
445
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
426
	/* 1920x1200@75Hz */
446
	/* 0x46 - 1920x1200@75Hz */
427
	{ DRM_MODE("1920x1200", DRM_MODE_TYPE_DRIVER, 245250, 1920, 2056,
447
	{ DRM_MODE("1920x1200", DRM_MODE_TYPE_DRIVER, 245250, 1920, 2056,
428
		   2264, 2608, 0, 1200, 1203, 1209, 1255, 0,
448
		   2264, 2608, 0, 1200, 1203, 1209, 1255, 0,
429
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
449
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
430
	/* 1920x1200@85Hz */
450
	/* 0x47 - 1920x1200@85Hz */
431
	{ DRM_MODE("1920x1200", DRM_MODE_TYPE_DRIVER, 281250, 1920, 2064,
451
	{ DRM_MODE("1920x1200", DRM_MODE_TYPE_DRIVER, 281250, 1920, 2064,
432
		   2272, 2624, 0, 1200, 1203, 1209, 1262, 0,
452
		   2272, 2624, 0, 1200, 1203, 1209, 1262, 0,
433
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
453
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
434
	/* 1920x1200@120Hz RB */
454
	/* 0x48 - 1920x1200@120Hz RB */
435
	{ DRM_MODE("1920x1200", DRM_MODE_TYPE_DRIVER, 317000, 1920, 1968,
455
	{ DRM_MODE("1920x1200", DRM_MODE_TYPE_DRIVER, 317000, 1920, 1968,
436
		   2000, 2080, 0, 1200, 1203, 1209, 1271, 0,
456
		   2000, 2080, 0, 1200, 1203, 1209, 1271, 0,
437
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
457
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
438
	/* 1920x1440@60Hz */
458
	/* 0x49 - 1920x1440@60Hz */
439
	{ DRM_MODE("1920x1440", DRM_MODE_TYPE_DRIVER, 234000, 1920, 2048,
459
	{ DRM_MODE("1920x1440", DRM_MODE_TYPE_DRIVER, 234000, 1920, 2048,
440
		   2256, 2600, 0, 1440, 1441, 1444, 1500, 0,
460
		   2256, 2600, 0, 1440, 1441, 1444, 1500, 0,
441
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
461
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
442
	/* 1920x1440@75Hz */
462
	/* 0x4a - 1920x1440@75Hz */
443
	{ DRM_MODE("1920x1440", DRM_MODE_TYPE_DRIVER, 297000, 1920, 2064,
463
	{ DRM_MODE("1920x1440", DRM_MODE_TYPE_DRIVER, 297000, 1920, 2064,
444
		   2288, 2640, 0, 1440, 1441, 1444, 1500, 0,
464
		   2288, 2640, 0, 1440, 1441, 1444, 1500, 0,
445
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
465
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
446
	/* 1920x1440@120Hz RB */
466
	/* 0x4b - 1920x1440@120Hz RB */
447
	{ DRM_MODE("1920x1440", DRM_MODE_TYPE_DRIVER, 380500, 1920, 1968,
467
	{ DRM_MODE("1920x1440", DRM_MODE_TYPE_DRIVER, 380500, 1920, 1968,
448
		   2000, 2080, 0, 1440, 1443, 1447, 1525, 0,
468
		   2000, 2080, 0, 1440, 1443, 1447, 1525, 0,
449
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
469
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
-
 
470
	/* 0x54 - 2048x1152@60Hz */
-
 
471
	{ DRM_MODE("2048x1152", DRM_MODE_TYPE_DRIVER, 162000, 2048, 2074,
-
 
472
		   2154, 2250, 0, 1152, 1153, 1156, 1200, 0,
-
 
473
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
450
	/* 2560x1600@60Hz RB */
474
	/* 0x4c - 2560x1600@60Hz RB */
451
	{ DRM_MODE("2560x1600", DRM_MODE_TYPE_DRIVER, 268500, 2560, 2608,
475
	{ DRM_MODE("2560x1600", DRM_MODE_TYPE_DRIVER, 268500, 2560, 2608,
452
		   2640, 2720, 0, 1600, 1603, 1609, 1646, 0,
476
		   2640, 2720, 0, 1600, 1603, 1609, 1646, 0,
453
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
477
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
454
	/* 2560x1600@60Hz */
478
	/* 0x4d - 2560x1600@60Hz */
455
	{ DRM_MODE("2560x1600", DRM_MODE_TYPE_DRIVER, 348500, 2560, 2752,
479
	{ DRM_MODE("2560x1600", DRM_MODE_TYPE_DRIVER, 348500, 2560, 2752,
456
		   3032, 3504, 0, 1600, 1603, 1609, 1658, 0,
480
		   3032, 3504, 0, 1600, 1603, 1609, 1658, 0,
457
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
481
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
458
	/* 2560x1600@75HZ */
482
	/* 0x4e - 2560x1600@75Hz */
459
	{ DRM_MODE("2560x1600", DRM_MODE_TYPE_DRIVER, 443250, 2560, 2768,
483
	{ DRM_MODE("2560x1600", DRM_MODE_TYPE_DRIVER, 443250, 2560, 2768,
460
		   3048, 3536, 0, 1600, 1603, 1609, 1672, 0,
484
		   3048, 3536, 0, 1600, 1603, 1609, 1672, 0,
461
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
485
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
462
	/* 2560x1600@85HZ */
486
	/* 0x4f - 2560x1600@85Hz */
463
	{ DRM_MODE("2560x1600", DRM_MODE_TYPE_DRIVER, 505250, 2560, 2768,
487
	{ DRM_MODE("2560x1600", DRM_MODE_TYPE_DRIVER, 505250, 2560, 2768,
464
		   3048, 3536, 0, 1600, 1603, 1609, 1682, 0,
488
		   3048, 3536, 0, 1600, 1603, 1609, 1682, 0,
465
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
489
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
466
	/* 2560x1600@120Hz RB */
490
	/* 0x50 - 2560x1600@120Hz RB */
467
	{ DRM_MODE("2560x1600", DRM_MODE_TYPE_DRIVER, 552750, 2560, 2608,
491
	{ DRM_MODE("2560x1600", DRM_MODE_TYPE_DRIVER, 552750, 2560, 2608,
468
		   2640, 2720, 0, 1600, 1603, 1609, 1694, 0,
492
		   2640, 2720, 0, 1600, 1603, 1609, 1694, 0,
469
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
493
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
-
 
494
	/* 0x57 - 4096x2160@60Hz RB */
-
 
495
	{ DRM_MODE("4096x2160", DRM_MODE_TYPE_DRIVER, 556744, 4096, 4104,
-
 
496
		   4136, 4176, 0, 2160, 2208, 2216, 2222, 0,
-
 
497
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
-
 
498
	/* 0x58 - 4096x2160@59.94Hz RB */
-
 
499
	{ DRM_MODE("4096x2160", DRM_MODE_TYPE_DRIVER, 556188, 4096, 4104,
-
 
500
		   4136, 4176, 0, 2160, 2208, 2216, 2222, 0,
-
 
501
		   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
470
};
502
};
Line 471... Line 503...
471
 
503
 
472
/*
504
/*
473
 * These more or less come from the DMT spec.  The 720x400 modes are
505
 * These more or less come from the DMT spec.  The 720x400 modes are
Line 1039... Line 1071...
1039
/**
1071
/**
1040
 * drm_edid_block_valid - Sanity check the EDID block (base or extension)
1072
 * drm_edid_block_valid - Sanity check the EDID block (base or extension)
1041
 * @raw_edid: pointer to raw EDID block
1073
 * @raw_edid: pointer to raw EDID block
1042
 * @block: type of block to validate (0 for base, extension otherwise)
1074
 * @block: type of block to validate (0 for base, extension otherwise)
1043
 * @print_bad_edid: if true, dump bad EDID blocks to the console
1075
 * @print_bad_edid: if true, dump bad EDID blocks to the console
-
 
1076
 * @edid_corrupt: if true, the header or checksum is invalid
1044
 *
1077
 *
1045
 * Validate a base or extension EDID block and optionally dump bad blocks to
1078
 * Validate a base or extension EDID block and optionally dump bad blocks to
1046
 * the console.
1079
 * the console.
1047
 *
1080
 *
1048
 * Return: True if the block is valid, false otherwise.
1081
 * Return: True if the block is valid, false otherwise.
1049
 */
1082
 */
1050
bool drm_edid_block_valid(u8 *raw_edid, int block, bool print_bad_edid)
1083
bool drm_edid_block_valid(u8 *raw_edid, int block, bool print_bad_edid,
-
 
1084
			  bool *edid_corrupt)
1051
{
1085
{
1052
	u8 csum;
1086
	u8 csum;
1053
	struct edid *edid = (struct edid *)raw_edid;
1087
	struct edid *edid = (struct edid *)raw_edid;
Line 1054... Line 1088...
1054
 
1088
 
Line 1058... Line 1092...
1058
	if (edid_fixup > 8 || edid_fixup < 0)
1092
	if (edid_fixup > 8 || edid_fixup < 0)
1059
		edid_fixup = 6;
1093
		edid_fixup = 6;
Line 1060... Line 1094...
1060
 
1094
 
1061
	if (block == 0) {
1095
	if (block == 0) {
1062
		int score = drm_edid_header_is_valid(raw_edid);
1096
		int score = drm_edid_header_is_valid(raw_edid);
-
 
1097
		if (score == 8) {
-
 
1098
			if (edid_corrupt)
1063
        if (score == 8) ;
1099
				*edid_corrupt = false;
-
 
1100
		} else if (score >= edid_fixup) {
-
 
1101
			/* Displayport Link CTS Core 1.2 rev1.1 test 4.2.2.6
-
 
1102
			 * The corrupt flag needs to be set here otherwise, the
-
 
1103
			 * fix-up code here will correct the problem, the
-
 
1104
			 * checksum is correct and the test fails
-
 
1105
			 */
-
 
1106
			if (edid_corrupt)
1064
        else if (score >= edid_fixup) {
1107
				*edid_corrupt = true;
1065
            DRM_DEBUG("Fixing EDID header, your hardware may be failing\n");
1108
			DRM_DEBUG("Fixing EDID header, your hardware may be failing\n");
1066
            memcpy(raw_edid, edid_header, sizeof(edid_header));
1109
			memcpy(raw_edid, edid_header, sizeof(edid_header));
-
 
1110
		} else {
-
 
1111
			if (edid_corrupt)
1067
		} else {
1112
				*edid_corrupt = true;
1068
            goto bad;
1113
			goto bad;
1069
		}
1114
		}
Line 1070... Line 1115...
1070
	}
1115
	}
1071
 
1116
 
1072
	csum = drm_edid_block_checksum(raw_edid);
1117
	csum = drm_edid_block_checksum(raw_edid);
1073
	if (csum) {
1118
	if (csum) {
1074
		if (print_bad_edid) {
1119
		if (print_bad_edid) {
Line -... Line 1120...
-
 
1120
			DRM_ERROR("EDID checksum is invalid, remainder is %d\n", csum);
-
 
1121
		}
-
 
1122
 
1075
		DRM_ERROR("EDID checksum is invalid, remainder is %d\n", csum);
1123
		if (edid_corrupt)
1076
		}
1124
			*edid_corrupt = true;
1077
 
1125
 
1078
		/* allow CEA to slide through, switches mangle this */
1126
		/* allow CEA to slide through, switches mangle this */
Line 1127... Line 1175...
1127
 
1175
 
1128
	if (!edid)
1176
	if (!edid)
Line 1129... Line 1177...
1129
		return false;
1177
		return false;
1130
 
1178
 
1131
	for (i = 0; i <= edid->extensions; i++)
1179
	for (i = 0; i <= edid->extensions; i++)
Line 1132... Line 1180...
1132
		if (!drm_edid_block_valid(raw + i * EDID_LENGTH, i, true))
1180
		if (!drm_edid_block_valid(raw + i * EDID_LENGTH, i, true, NULL))
1133
			return false;
1181
			return false;
1134
 
1182
 
Line 1230... Line 1278...
1230
 
1278
 
1231
	/* base block fetch */
1279
	/* base block fetch */
1232
	for (i = 0; i < 4; i++) {
1280
	for (i = 0; i < 4; i++) {
1233
		if (get_edid_block(data, block, 0, EDID_LENGTH))
1281
		if (get_edid_block(data, block, 0, EDID_LENGTH))
1234
            goto out;
1282
			goto out;
-
 
1283
		if (drm_edid_block_valid(block, 0, print_bad_edid,
1235
		if (drm_edid_block_valid(block, 0, print_bad_edid))
1284
					 &connector->edid_corrupt))
1236
			break;
1285
			break;
1237
		if (i == 0 && drm_edid_is_zero(block, EDID_LENGTH)) {
1286
		if (i == 0 && drm_edid_is_zero(block, EDID_LENGTH)) {
1238
			connector->null_edid_counter++;
1287
			connector->null_edid_counter++;
1239
			goto carp;
1288
			goto carp;
Line 1255... Line 1304...
1255
		for (i = 0; i < 4; i++) {
1304
		for (i = 0; i < 4; i++) {
1256
			if (get_edid_block(data,
1305
			if (get_edid_block(data,
1257
				  block + (valid_extensions + 1) * EDID_LENGTH,
1306
				  block + (valid_extensions + 1) * EDID_LENGTH,
1258
				  j, EDID_LENGTH))
1307
				  j, EDID_LENGTH))
1259
				goto out;
1308
				goto out;
1260
			if (drm_edid_block_valid(block + (valid_extensions + 1) * EDID_LENGTH, j, print_bad_edid)) {
1309
			if (drm_edid_block_valid(block + (valid_extensions + 1)
-
 
1310
						 * EDID_LENGTH, j,
-
 
1311
						 print_bad_edid,
-
 
1312
						 NULL)) {
1261
				valid_extensions++;
1313
				valid_extensions++;
1262
				break;
1314
				break;
1263
		}
1315
			}
1264
		}
1316
		}
Line 1990... Line 2042...
1990
}
2042
}
Line 1991... Line 2043...
1991
 
2043
 
1992
static bool valid_inferred_mode(const struct drm_connector *connector,
2044
static bool valid_inferred_mode(const struct drm_connector *connector,
1993
				const struct drm_display_mode *mode)
2045
				const struct drm_display_mode *mode)
1994
{
2046
{
1995
	struct drm_display_mode *m;
2047
	const struct drm_display_mode *m;
Line 1996... Line 2048...
1996
	bool ok = false;
2048
	bool ok = false;
1997
 
2049
 
1998
	list_for_each_entry(m, &connector->probed_modes, head) {
2050
	list_for_each_entry(m, &connector->probed_modes, head) {
Line 2364... Line 2416...
2364
	/* XXX should also look for CVT codes in VTB blocks */
2416
	/* XXX should also look for CVT codes in VTB blocks */
Line 2365... Line 2417...
2365
 
2417
 
2366
	return closure.modes;
2418
	return closure.modes;
Line -... Line 2419...
-
 
2419
}
-
 
2420
 
2367
}
2421
static void fixup_detailed_cea_mode_clock(struct drm_display_mode *mode);
2368
 
2422
 
2369
static void
2423
static void
2370
do_detailed_mode(struct detailed_timing *timing, void *c)
2424
do_detailed_mode(struct detailed_timing *timing, void *c)
2371
{
2425
{
Line 2380... Line 2434...
2380
			return;
2434
			return;
Line 2381... Line 2435...
2381
 
2435
 
2382
		if (closure->preferred)
2436
		if (closure->preferred)
Line -... Line 2437...
-
 
2437
			newmode->type |= DRM_MODE_TYPE_PREFERRED;
-
 
2438
 
-
 
2439
		/*
-
 
2440
		 * Detailed modes are limited to 10kHz pixel clock resolution,
-
 
2441
		 * so fix up anything that looks like CEA/HDMI mode, but the clock
-
 
2442
		 * is just slightly off.
-
 
2443
		 */
2383
			newmode->type |= DRM_MODE_TYPE_PREFERRED;
2444
		fixup_detailed_cea_mode_clock(newmode);
2384
 
2445
 
2385
		drm_mode_probed_add(closure->connector, newmode);
2446
		drm_mode_probed_add(closure->connector, newmode);
2386
		closure->modes++;
2447
		closure->modes++;
2387
		closure->preferred = 0;
2448
		closure->preferred = 0;
Line 2475... Line 2536...
2475
	 * edid_cea_modes contains the 59.94Hz
2536
	 * edid_cea_modes contains the 59.94Hz
2476
	 * variant for 240 and 480 line modes,
2537
	 * variant for 240 and 480 line modes,
2477
	 * and the 60Hz variant otherwise.
2538
	 * and the 60Hz variant otherwise.
2478
	 */
2539
	 */
2479
	if (cea_mode->vdisplay == 240 || cea_mode->vdisplay == 480)
2540
	if (cea_mode->vdisplay == 240 || cea_mode->vdisplay == 480)
2480
		clock = clock * 1001 / 1000;
2541
		clock = DIV_ROUND_CLOSEST(clock * 1001, 1000);
2481
	else
2542
	else
2482
		clock = DIV_ROUND_UP(clock * 1000, 1001);
2543
		clock = DIV_ROUND_CLOSEST(clock * 1000, 1001);
Line 2483... Line 2544...
2483
 
2544
 
2484
	return clock;
2545
	return clock;
Line 2485... Line 2546...
2485
}
2546
}
Line 3049... Line 3110...
3049
					    video_len);
3110
					    video_len);
Line 3050... Line 3111...
3050
 
3111
 
3051
	return modes;
3112
	return modes;
Line -... Line 3113...
-
 
3113
}
-
 
3114
 
-
 
3115
static void fixup_detailed_cea_mode_clock(struct drm_display_mode *mode)
-
 
3116
{
-
 
3117
	const struct drm_display_mode *cea_mode;
-
 
3118
	int clock1, clock2, clock;
-
 
3119
	u8 mode_idx;
-
 
3120
	const char *type;
-
 
3121
 
-
 
3122
	mode_idx = drm_match_cea_mode(mode) - 1;
-
 
3123
	if (mode_idx < ARRAY_SIZE(edid_cea_modes)) {
-
 
3124
		type = "CEA";
-
 
3125
		cea_mode = &edid_cea_modes[mode_idx];
-
 
3126
		clock1 = cea_mode->clock;
-
 
3127
		clock2 = cea_mode_alternate_clock(cea_mode);
-
 
3128
	} else {
-
 
3129
		mode_idx = drm_match_hdmi_mode(mode) - 1;
-
 
3130
		if (mode_idx < ARRAY_SIZE(edid_4k_modes)) {
-
 
3131
			type = "HDMI";
-
 
3132
			cea_mode = &edid_4k_modes[mode_idx];
-
 
3133
			clock1 = cea_mode->clock;
-
 
3134
			clock2 = hdmi_mode_alternate_clock(cea_mode);
-
 
3135
		} else {
-
 
3136
			return;
-
 
3137
		}
-
 
3138
	}
-
 
3139
 
-
 
3140
	/* pick whichever is closest */
-
 
3141
	if (abs(mode->clock - clock1) < abs(mode->clock - clock2))
-
 
3142
		clock = clock1;
-
 
3143
	else
-
 
3144
		clock = clock2;
-
 
3145
 
-
 
3146
	if (mode->clock == clock)
-
 
3147
		return;
-
 
3148
 
-
 
3149
	DRM_DEBUG("detailed mode matches %s VIC %d, adjusting clock %d -> %d\n",
-
 
3150
		  type, mode_idx + 1, mode->clock, clock);
-
 
3151
	mode->clock = clock;
3052
}
3152
}
3053
 
3153
 
3054
static void
3154
static void
3055
parse_hdmi_vsdb(struct drm_connector *connector, const u8 *db)
3155
parse_hdmi_vsdb(struct drm_connector *connector, const u8 *db)
Line 3307... Line 3407...
3307
 *
3407
 *
3308
 * Return: The HDMI/DP sink's audio-video sync delay in milliseconds or 0 if
3408
 * Return: The HDMI/DP sink's audio-video sync delay in milliseconds or 0 if
3309
 * the sink doesn't support audio or video.
3409
 * the sink doesn't support audio or video.
3310
 */
3410
 */
3311
int drm_av_sync_delay(struct drm_connector *connector,
3411
int drm_av_sync_delay(struct drm_connector *connector,
3312
		      struct drm_display_mode *mode)
3412
		      const struct drm_display_mode *mode)
3313
{
3413
{
3314
	int i = !!(mode->flags & DRM_MODE_FLAG_INTERLACE);
3414
	int i = !!(mode->flags & DRM_MODE_FLAG_INTERLACE);
3315
	int a, v;
3415
	int a, v;
Line 3316... Line 3416...
3316
 
3416
 
Line 3342... Line 3442...
3342
EXPORT_SYMBOL(drm_av_sync_delay);
3442
EXPORT_SYMBOL(drm_av_sync_delay);
Line 3343... Line 3443...
3343
 
3443
 
3344
/**
3444
/**
3345
 * drm_select_eld - select one ELD from multiple HDMI/DP sinks
3445
 * drm_select_eld - select one ELD from multiple HDMI/DP sinks
3346
 * @encoder: the encoder just changed display mode
-
 
3347
 * @mode: the adjusted display mode
3446
 * @encoder: the encoder just changed display mode
3348
 *
3447
 *
3349
 * It's possible for one encoder to be associated with multiple HDMI/DP sinks.
3448
 * It's possible for one encoder to be associated with multiple HDMI/DP sinks.
3350
 * The policy is now hard coded to simply use the first HDMI/DP sink's ELD.
3449
 * The policy is now hard coded to simply use the first HDMI/DP sink's ELD.
3351
 *
3450
 *
3352
 * Return: The connector associated with the first HDMI/DP sink that has ELD
3451
 * Return: The connector associated with the first HDMI/DP sink that has ELD
3353
 * attached to it.
3452
 * attached to it.
3354
 */
3453
 */
3355
struct drm_connector *drm_select_eld(struct drm_encoder *encoder,
-
 
3356
				     struct drm_display_mode *mode)
3454
struct drm_connector *drm_select_eld(struct drm_encoder *encoder)
3357
{
3455
{
3358
	struct drm_connector *connector;
3456
	struct drm_connector *connector;
Line 3359... Line 3457...
3359
	struct drm_device *dev = encoder->dev;
3457
	struct drm_device *dev = encoder->dev;
3360
 
3458
 
Line 3361... Line 3459...
3361
	WARN_ON(!mutex_is_locked(&dev->mode_config.mutex));
3459
	WARN_ON(!mutex_is_locked(&dev->mode_config.mutex));
3362
	WARN_ON(!drm_modeset_is_locked(&dev->mode_config.connection_mutex));
3460
	WARN_ON(!drm_modeset_is_locked(&dev->mode_config.connection_mutex));
3363
 
3461
 
Line 3364... Line 3462...
3364
	list_for_each_entry(connector, &dev->mode_config.connector_list, head)
3462
	drm_for_each_connector(connector, dev)
3365
		if (connector->encoder == encoder && connector->eld[0])
3463
		if (connector->encoder == encoder && connector->eld[0])
Line 3710... Line 3808...
3710
	 */
3808
	 */
3711
	num_modes += add_detailed_modes(connector, edid, quirks);
3809
	num_modes += add_detailed_modes(connector, edid, quirks);
3712
	num_modes += add_cvt_modes(connector, edid);
3810
	num_modes += add_cvt_modes(connector, edid);
3713
	num_modes += add_standard_modes(connector, edid);
3811
	num_modes += add_standard_modes(connector, edid);
3714
	num_modes += add_established_modes(connector, edid);
3812
	num_modes += add_established_modes(connector, edid);
3715
	if (edid->features & DRM_EDID_FEATURE_DEFAULT_GTF)
-
 
3716
	num_modes += add_inferred_modes(connector, edid);
-
 
3717
	num_modes += add_cea_modes(connector, edid);
3813
	num_modes += add_cea_modes(connector, edid);
3718
	num_modes += add_alternate_cea_modes(connector, edid);
3814
	num_modes += add_alternate_cea_modes(connector, edid);
-
 
3815
	if (edid->features & DRM_EDID_FEATURE_DEFAULT_GTF)
-
 
3816
		num_modes += add_inferred_modes(connector, edid);
Line 3719... Line 3817...
3719
 
3817
 
3720
	if (quirks & (EDID_QUIRK_PREFER_LARGE_60 | EDID_QUIRK_PREFER_LARGE_75))
3818
	if (quirks & (EDID_QUIRK_PREFER_LARGE_60 | EDID_QUIRK_PREFER_LARGE_75))
Line 3721... Line 3819...
3721
		edid_fixup_preferred(connector, quirks);
3819
		edid_fixup_preferred(connector, quirks);
Line 3748... Line 3846...
3748
{
3846
{
3749
	int i, count, num_modes = 0;
3847
	int i, count, num_modes = 0;
3750
	struct drm_display_mode *mode;
3848
	struct drm_display_mode *mode;
3751
	struct drm_device *dev = connector->dev;
3849
	struct drm_device *dev = connector->dev;
Line 3752... Line 3850...
3752
 
3850
 
3753
	count = sizeof(drm_dmt_modes) / sizeof(struct drm_display_mode);
3851
	count = ARRAY_SIZE(drm_dmt_modes);
3754
	if (hdisplay < 0)
3852
	if (hdisplay < 0)
3755
		hdisplay = 0;
3853
		hdisplay = 0;
3756
	if (vdisplay < 0)
3854
	if (vdisplay < 0)