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) |