drm_edid_modes.h 34 KB

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