Subject: [DRM/I915]: Sync the default modes for LVDS output device
From: Zhao Yakui <[email protected]>
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 correponding bit in the fake edid will be set.
In such case the default modes will be added to LVDS output device.
If not, the different modes are obtained by using KMS/UMS.
Signed-off-by: Zhao Yakui <[email protected]>
---
drivers/gpu/drm/i915/intel_lvds.c | 425 +++++++++++++++++++++++++++++++++++++-
1 file changed, 416 insertions(+), 9 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-23
11:19:40.000000000 +0800
+++ linux-2.6/drivers/gpu/drm/i915/intel_lvds.c 2009-03-23 11:25:28.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.
@@ -488,6 +863,22 @@
}
/**
+ * Add the default mode to mode list of connector.
+ */
+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)
@@ -495,13 +886,25 @@
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, num_modes = 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
+ */
+ num_modes = lvds_add_default_modes(connector);
+ num_modes += ddc_ret;
+ return num_modes;
+ }
/* Didn't get an EDID, so
* Set wide sync ranges so we get all modes
* handed to valid_mode for checking
@@ -516,10 +919,14 @@
mode = drm_mode_duplicate(dev, dev_priv->panel_fixed_mode);
drm_mode_probed_add(connector, mode);
-
- return 1;
+ num_modes = lvds_add_default_modes(connector);
+ num_modes++;
+ return num_modes;
}
-
+ /*
+ * If there is no panel_fix_mode, the default mode won't be added to
+ * the mode list. And the number will be zero
+ */
return 0;
}
------------------------------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/dri-devel