Subversion Repositories Kolibri OS

Rev

Rev 1963 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

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