Subject: [DRM/I915]: Sync the default modes for LVDS output device From: Zhao Yakui <yakui.z...@intel.com>
Sync the default modes for the LVDS output device This covers: Add the default modes for the LVDS output device. The bit of edid->feature.msc indicates whether the display device is not continous-frequency. And it is used to determine whether the default modes will be added to the output device. But for the LVDS output device the edid->feature.msc will always be set.Even when there is no edid, the corresponding bit in the fake edid will be set. In such case the default modes will be added to LVDS output device. If not, the modes obtained by using KMS/UMS will be different. Signed-off-by: Zhao Yakui <yakui.z...@intel.com> --- drivers/gpu/drm/i915/intel_lvds.c | 422 +++++++++++++++++++++++++++++++++++++- 1 file changed, 412 insertions(+), 10 deletions(-) Index: linux-2.6/drivers/gpu/drm/i915/intel_lvds.c =================================================================== --- linux-2.6.orig/drivers/gpu/drm/i915/intel_lvds.c 2009-03-20 11:51:53.000000000 +0800 +++ linux-2.6/drivers/gpu/drm/i915/intel_lvds.c 2009-03-20 13:36:03.000000000 +0800 @@ -36,6 +36,381 @@ #include "intel_drv.h" #include "i915_drm.h" #include "i915_drv.h" +/* + * the default modes, which is based on the file of + * xserver/xfree86/common/xf86DefModeSet.c. + */ +static struct drm_display_mode default_modes[] = { + /* 640x...@85hz */ + { DRM_MODE("640x350", DRM_MODE_TYPE_DRIVER, 31500, 640, 672, + 736, 832, 0, 350, 382, 385, 445, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 320x...@85hz */ + { DRM_MODE("320x175", DRM_MODE_TYPE_DRIVER, 15750, 320, 336, + 368, 416, 0, 175, 191, 192, 222, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 640x...@85hz */ + { DRM_MODE("640x400", DRM_MODE_TYPE_DRIVER, 31500, 640, 672, + 736, 832, 0, 400, 401, 405, 445, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 320x...@85hz */ + { DRM_MODE("320x200", DRM_MODE_TYPE_DRIVER, 15750, 320, 336, + 368, 416, 0, 200, 200, 202, 222, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 720x...@85hz */ + { DRM_MODE("720x400", DRM_MODE_TYPE_DRIVER, 35500, 720, 756, + 828, 936, 0, 400, 401, 405, 446, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 360x...@85hz */ + { DRM_MODE("360x200", DRM_MODE_TYPE_DRIVER, 17750, 360, 378, + 414, 468, 0, 200, 200, 202, 223, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 640x...@60hz */ + { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 25175, 600, 656, + 752, 800, 0, 480, 490, 492, 525, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 320x...@60hz */ + { DRM_MODE("320x240", DRM_MODE_TYPE_DRIVER, 12587, 320, 328, + 376, 400, 0, 240, 245, 246, 262, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 640x...@72hz */ + { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 31500, 640, 664, + 704, 832, 0, 480, 489, 492, 520, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 320x...@72hz */ + { DRM_MODE("320x240", DRM_MODE_TYPE_DRIVER, 15750, 320, 332, + 352, 416, 0, 240, 244, 246, 260, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 640x...@75hz */ + { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 31500, 640, 656, + 720, 840, 0, 480, 481, 484, 500, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 320x...@75hz */ + { DRM_MODE("320x240", DRM_MODE_TYPE_DRIVER, 15750, 320, 328, + 360, 420, 0, 240, 240, 242, 250, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 640x...@85hz */ + { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 36000, 640, 696, + 752, 832, 0, 480, 481, 484, 509, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 320x...@85hz */ + { DRM_MODE("320x240", DRM_MODE_TYPE_DRIVER, 18000, 320, 348, + 376, 416, 0, 240, 240, 242, 254, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 800x...@56hz */ + { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 36000, 800, 824, + 968, 1024, 0, 600, 601, 603, 625, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 400x...@56hz */ + { DRM_MODE("400x300", DRM_MODE_TYPE_DRIVER, 18000, 400, 412, + 484, 512, 0, 300, 300, 301, 312, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 800x...@60hz */ + { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 40000, 800, 840, + 968, 1056, 0, 600, 601, 605, 628, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 400x...@60hz */ + { DRM_MODE("400x300", DRM_MODE_TYPE_DRIVER, 20000, 400, 426, + 484, 528, 0, 300, 300, 302, 314, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 800x...@72hz */ + { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 50000, 800, 856, + 976, 1040, 0, 600, 637, 643, 666, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 400x...@72hz */ + { DRM_MODE("400x300", DRM_MODE_TYPE_DRIVER, 25000, 400, 428, + 488, 520, 0, 300, 318, 321, 333, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 800x...@75hz */ + { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 49500, 800, 816, + 896, 1056, 0, 600, 601, 604, 625, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 400x...@75hz */ + { DRM_MODE("400x300", DRM_MODE_TYPE_DRIVER, 24750, 400, 408, + 448, 528, 0, 300, 300, 302, 312, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 800x...@85hz */ + { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 56300, 800, 832, + 896, 1048, 0, 600, 601, 604, 631, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 400x...@85hz */ + { DRM_MODE("400x300", DRM_MODE_TYPE_DRIVER, 28150, 400, 416, + 448, 524, 0, 300, 300, 302, 315, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 1024x...@43hz */ + { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 44900, 1024, 1032, + 1208, 1264, 0, 768, 768, 776, 817, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 512x...@43hz */ + { DRM_MODE("512x384", DRM_MODE_TYPE_DRIVER, 22450, 512, 516, + 604, 632, 0, 384, 384, 388, 408, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 1024x...@60hz */ + { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 65000, 1024, 1048, + 1184, 1344, 0, 768, 771, 777, 806, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 512x...@60hz */ + { DRM_MODE("512x384", DRM_MODE_TYPE_DRIVER, 32500, 512, 524, + 592, 672, 0, 384, 385, 388, 403, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 1024x...@70hz */ + { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 75000, 1020, 1048, + 1184, 1328, 0, 768, 771, 777, 806, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 512x...@70hz */ + { DRM_MODE("512x384", DRM_MODE_TYPE_DRIVER, 37500, 510, 524, + 592, 664, 0, 384, 385, 388, 403, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 1024x...@75hz */ + { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 78750, 1024, 1040, + 1136, 1312, 0, 768, 769, 772, 800, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 512x...@75hz */ + { DRM_MODE("512x384", DRM_MODE_TYPE_DRIVER, 39375, 512, 520, + 568, 656, 0, 384, 384, 386, 400, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 1024x...@85hz */ + { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 94500, 1024, 1072, + 1168, 1376, 0, 768, 769, 772, 808, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 512x...@85hz */ + { DRM_MODE("512x384", DRM_MODE_TYPE_DRIVER, 47250, 512, 536, + 584, 688, 0, 384, 384, 386, 404, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 1152x...@75hz */ + { DRM_MODE("1152x864", DRM_MODE_TYPE_DRIVER, 108000, 1152, 1216, + 1344, 1600, 0, 864, 865, 868, 900, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 576x...@85hz */ + { DRM_MODE("576x432", DRM_MODE_TYPE_DRIVER, 54000, 576, 608, + 672, 800, 0, 432, 432, 434, 450, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 1280x...@60hz */ + { DRM_MODE("1280x960", DRM_MODE_TYPE_DRIVER, 108000, 1280, 1376, + 1488, 1800, 0, 960, 961, 964, 1000, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 1280x...@60hz */ + { DRM_MODE("1280x960", DRM_MODE_TYPE_DRIVER, 540000, 640, 684, + 744, 900, 0, 480, 480, 482, 500, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 1280x...@85hz */ + { DRM_MODE("1280x960", DRM_MODE_TYPE_DRIVER, 148500, 1280, 1344, + 1504, 1728, 0, 960, 961, 964, 1011, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 1280x...@85hz */ + { DRM_MODE("1280x960", DRM_MODE_TYPE_DRIVER, 74250, 640, 672, + 752, 864, 0, 480, 480, 482, 505, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 1280x1...@60hz */ + { DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 108000, 1280, 1328, + 1440, 1688, 0, 1024, 1025, 1028, 1066, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 640x...@60hz */ + { DRM_MODE("640x512", DRM_MODE_TYPE_DRIVER, 54000, 640, 664, + 720, 744, 0, 512, 512, 514, 533, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 1280x1...@75hz */ + { DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 135000, 1280, 1296, + 1440, 1688, 0, 1024, 1025, 1028, 1066, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 640x...@75hz */ + { DRM_MODE("640x512", DRM_MODE_TYPE_DRIVER, 67500, 640, 648, + 720, 844, 0, 512, 512, 514, 533, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 1280x1...@85hz */ + { DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 157500, 1280, 1344, + 1504, 1728, 0, 1024, 1025, 1028, 1072, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 640x...@85hz */ + { DRM_MODE("640x512", DRM_MODE_TYPE_DRIVER, 78750, 640, 672, + 752, 864, 0, 512, 512, 514, 536, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 1600x1...@60hz */ + { DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 162000, 1600, 1664, + 1854, 2160, 0, 1200, 1201, 1205, 1250, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 800x...@60hz */ + { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 81000, 800, 832, + 928, 1080, 0, 600, 600, 602, 625, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 1600x1...@65hz */ + { DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 175500, 1600, 1664, + 1854, 2160, 0, 1200, 1201, 1205, 1250, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 800x...@65hz */ + { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 87750, 800, 832, + 928, 1080, 0, 600, 600, 602, 625, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 1600x1...@70hz */ + { DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 189000, 1600, 1664, + 1854, 2160, 0, 1200, 1201, 1205, 1250, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 800x...@70hz */ + { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 94500, 800, 832, + 928, 1080, 0, 600, 600, 602, 625, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 1600x1...@75hz */ + { DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 202500, 1600, 1664, + 1854, 2160, 0, 1200, 1201, 1205, 1250, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 800x...@75hz */ + { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 101250, 800, 832, + 928, 1080, 0, 600, 600, 602, 625, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 1600x1...@85hz */ + { DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 229500, 1600, 1664, + 1854, 2160, 0, 1200, 1201, 1205, 1250, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 800x...@85hz */ + { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 114750, 800, 832, + 928, 1080, 0, 600, 600, 602, 625, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 1792x1...@60hz */ + { DRM_MODE("1792x1344", DRM_MODE_TYPE_DRIVER, 204800, 1792, 1920, + 2104, 2448, 0, 1344, 1345, 1348, 1394, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 896x...@60hz */ + { DRM_MODE("896x672", DRM_MODE_TYPE_DRIVER, 102400, 896, 960, + 1052, 1224, 0, 672, 672, 674, 697, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 1792x1...@75hz */ + { DRM_MODE("1792x1344", DRM_MODE_TYPE_DRIVER, 261000, 1792, 1888, + 2104, 2456, 0, 1344, 1345, 1348, 1417, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 896x...@75hz */ + { DRM_MODE("896x672", DRM_MODE_TYPE_DRIVER, 130500, 896, 944, + 1052, 1228, 0, 672, 672, 674, 708, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 1856x1...@60hz */ + { DRM_MODE("1856x1392", DRM_MODE_TYPE_DRIVER, 218300, 1856, 1952, + 2176, 2528, 0, 1392, 1393, 1396, 1439, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 928x...@60hz */ + { DRM_MODE("928x696", DRM_MODE_TYPE_DRIVER, 109150, 928, 976, + 1088, 1264, 0, 696, 696, 698, 719, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 1856x1...@75hz */ + { DRM_MODE("1856x1392", DRM_MODE_TYPE_DRIVER, 288000, 1792, 1984, + 2208, 2560, 0, 1392, 1393, 1396, 1500, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 928x...@75hz */ + { DRM_MODE("928x696", DRM_MODE_TYPE_DRIVER, 144000, 896, 992, + 1104, 1280, 0, 696, 696, 698, 750, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 1920x1...@60hz */ + { DRM_MODE("1920x1440", DRM_MODE_TYPE_DRIVER, 234000, 1920, 2048, + 2256, 2600, 0, 1440, 1441, 1444, 1500, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 960x...@60hz */ + { DRM_MODE("960x720", DRM_MODE_TYPE_DRIVER, 117000, 960, 1024, + 1128, 1300, 0, 720, 720, 722, 750, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 1920x1...@75hz */ + { DRM_MODE("1920x1440", DRM_MODE_TYPE_DRIVER, 297000, 1920, 2064, + 2288, 2640, 0, 1440, 1441, 1444, 1500, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 960x...@75hz */ + { DRM_MODE("960x720", DRM_MODE_TYPE_DRIVER, 148500, 960, 1032, + 1144, 1320, 0, 720, 720, 722, 750, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* 832x...@75hz (fix if the official/Apple spec is different) */ + { DRM_MODE("832x624", DRM_MODE_TYPE_DRIVER, 57284, 832, 864, + 928, 1152, 0, 624, 625, 628, 667, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 416x...@75hz (fix if the official/Apple spec is different) */ + { DRM_MODE("416x312", DRM_MODE_TYPE_DRIVER, 28642, 416, 432, + 464, 576, 0, 312, 312, 314, 333, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* vesa GTF 1400x1...@60hz */ + { DRM_MODE("1400x1050", DRM_MODE_TYPE_DRIVER, 122200, 1400, 1488, + 1640, 1880, 0, 1050, 1052, 1064, 1082, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* vesa GTF 700x...@60hz */ + { DRM_MODE("700x525", DRM_MODE_TYPE_DRIVER, 61100, 700, 744, + 820, 940, 0, 525, 526, 532, 541, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* vesa GTF 1400x1...@75hz */ + { DRM_MODE("1400x1050", DRM_MODE_TYPE_DRIVER, 155800, 1400, 1464, + 1784, 1912, 0, 1050, 1052, 1064, 1090, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* vesa GTF 700x...@75hz */ + { DRM_MODE("700x525", DRM_MODE_TYPE_DRIVER, 77900, 700, 732, + 892, 956, 0, 525, 526, 532, 545, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* vesa GTF 1920x1...@85hz */ + { DRM_MODE("1920x1440", DRM_MODE_TYPE_DRIVER, 341350, 1920, 2072, + 2288, 2656, 0, 1440, 1441, 1444, 1512, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* vesa GFT 960x...@85hz */ + { DRM_MODE("960x720", DRM_MODE_TYPE_DRIVER, 170675, 960, 1036, + 1144, 1328, 0, 720, 720, 722, 756, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* vesa GTF 2048x1...@60hz */ + { DRM_MODE("2048x1536", DRM_MODE_TYPE_DRIVER, 266950, 2048, 2200, + 2424, 2800, 0, 1536, 1537, 1540, 1589, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* vesa GTF 1024x...@60hz */ + { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 133475, 1024, 1100, + 1212, 1400, 0, 768, 768, 770, 794, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* vesa GTF 2048x1...@75hz */ + { DRM_MODE("2048x1536", DRM_MODE_TYPE_DRIVER, 340480, 2048, 2216, + 2440, 2832, 0, 1536, 1537, 1540, 1603, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* vesa GTF 1024x...@75hz */ + { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 170240, 1024, 1108, + 1220, 1416, 0, 768, 768, 770, 801, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, + /* vesa GTF 2048x1...@85hz */ + { DRM_MODE("2048x1536", DRM_MODE_TYPE_DRIVER, 388040, 2048, 2216, + 2440, 2832, 0, 1536, 1537, 1540, 1612, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* vesa GTF 1024x...@85hz */ + { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 194020, 1024, 1108, + 1220, 1416, 0, 768, 768, 770, 806, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | + DRM_MODE_FLAG_DBLSCAN) }, +}; /* * the following four scaling options are defined. @@ -481,6 +856,22 @@ } /** + * Add the default mode to . + */ +static int lvds_add_default_modes(struct drm_connector *connector) +{ + int i, num_modes = 0; + struct drm_device *dev = connector->dev; + num_modes = sizeof(default_modes)/sizeof(struct drm_display_mode); + for (i = 0; i < num_modes; i++) { + struct drm_display_mode *mode; + + mode = drm_mode_duplicate(dev, &default_modes[i]); + drm_mode_probed_add(connector, mode); + } + return num_modes; +} +/** * Return the list of DDC modes if available, or the BIOS fixed mode otherwise. */ static int intel_lvds_get_modes(struct drm_connector *connector) @@ -488,13 +879,24 @@ struct drm_device *dev = connector->dev; struct intel_output *intel_output = to_intel_output(connector); struct drm_i915_private *dev_priv = dev->dev_private; - int ret = 0; - - ret = intel_ddc_get_modes(intel_output); - - if (ret) - return ret; + int ddc_ret = 0, ret = 0, fixed_ret = 0; + ddc_ret = intel_ddc_get_modes(intel_output); + /* + * When there exists the EDID info, the bit of feature.msc will always + * be set. + * It seems that bit of feature.msc will also be set even when the + * bogus edid_mon is constructed in 2D driver. + * So in such case the default mode will be added. + */ + if (ddc_ret) { + /* + * If the mode can be parsed from the EDID info, we will try + * to add the default mode + */ + fixed_ret = 0; + goto add_default_mode; + } /* Didn't get an EDID, so * Set wide sync ranges so we get all modes * handed to valid_mode for checking @@ -509,11 +911,11 @@ mode = drm_mode_duplicate(dev, dev_priv->panel_fixed_mode); drm_mode_probed_add(connector, mode); - - return 1; + fixed_ret = 1; } - - return 0; +add_default_mode: + ret = lvds_add_default_modes(connector); + return ddc_ret + fixed_ret + ret; } /** ------------------------------------------------------------------------------ Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are powering Web 2.0 with engaging, cross-platform capabilities. Quickly and easily build your RIAs with Flex Builder, the Eclipse(TM)based development software that enables intelligent coding and step-through debugging. Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com -- _______________________________________________ Dri-devel mailing list Dri-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/dri-devel