[Intel-gfx] [Patch 3/3]: [DRM/I915] : Sync the default modes for LVDS output device

Eric Anholt eric at anholt.net
Fri Mar 20 20:59:20 CET 2009


On Fri, 2009-03-20 at 14:13 +0800, yakui_zhao wrote:
> Subject: [DRM/I915]: Sync the default modes for LVDS output device
> From: Zhao Yakui <yakui.zhao at 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.

Similar whitespace concerns in this and the previous patch as the first,
plus a couple of review comments below.

> Signed-off-by: Zhao Yakui <yakui.zhao at 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[] = {
> +	/* 640x350 at 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) },
> +	/* 320x175 at 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) },
> +	/* 640x400 at 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) },
> +	/* 320x200 at 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) },
> +	/* 720x400 at 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) },
> +	/* 360x200 at 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) },
> +	/* 640x480 at 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) },
> +	/* 320x240 at 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) },
> +	/* 640x480 at 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) },
> +	/* 320x240 at 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) },
> +	/* 640x480 at 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) },
> +	/* 320x240 at 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) },
> +	/* 640x480 at 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) },
> +	/* 320x240 at 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) },
> +	/* 800x600 at 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) },
> +	/* 400x300 at 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) },
> +	/* 800x600 at 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) },
> +	/* 400x300 at 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) },
> +	/* 800x600 at 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) },
> +	/* 400x300 at 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) },
> +	/* 800x600 at 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) },
> +	/* 400x300 at 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) },
> +	/* 800x600 at 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) },
> +	/* 400x300 at 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) },
> +	/* 1024x768 at 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) },
> +	/* 512x384 at 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) },
> +	/* 1024x768 at 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) },
> +	/* 512x384 at 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) },
> +	/* 1024x768 at 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) },
> +	/* 512x384 at 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) },
> +	/* 1024x768 at 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) },
> +	/* 512x384 at 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) },
> +	/* 1024x768 at 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) },
> +	/* 512x384 at 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) },
> +	/* 1152x864 at 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) },
> +	/* 576x432 at 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) },
> +	/* 1280x960 at 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) },
> +	/* 1280x960 at 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) },
> +	/* 1280x960 at 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) },
> +	/* 1280x960 at 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) },
> +	/* 1280x1024 at 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) },
> +	/* 640x512 at 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) },
> +	/* 1280x1024 at 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) },
> +	/* 640x512 at 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) },
> +	/* 1280x1024 at 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) },
> +	/* 640x512 at 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) },
> +	/* 1600x1200 at 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) },
> +	/* 800x600 at 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) },
> +	/* 1600x1200 at 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) },
> +	/* 800x600 at 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) },
> +	/* 1600x1200 at 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) },
> +	/* 800x600 at 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) },
> +	/* 1600x1200 at 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) },
> +	/* 800x600 at 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) },
> +	/* 1600x1200 at 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) },
> +	/* 800x600 at 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) },
> +	/* 1792x1344 at 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) },
> +	/* 896x672 at 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) },
> +	/* 1792x1344 at 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) },
> +	/* 896x672 at 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) },
> +	/* 1856x1392 at 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) },
> +	/* 928x696 at 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) },
> +	/* 1856x1392 at 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) },
> +	/* 928x696 at 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) },
> +	/* 1920x1440 at 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) },
> +	/* 960x720 at 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) },
> +	/* 1920x1440 at 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) },
> +	/* 960x720 at 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) },
> +	/* 832x624 at 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) },
> +	/* 416x312 at 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 1400x1050 at 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 700x525 at 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 1400x1050 at 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 700x525 at 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 1920x1440 at 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 960x720 at 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 2048x1536 at 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 1024x768 at 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 2048x1536 at 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 1024x768 at 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 2048x1536 at 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 1024x768 at 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) },
> +};

This modes list looks like the EDID established modes plus a few extra
GTF modes.  Why are we statically putting this list in intel_lvds.c
instead of accessing the established modes plus cooking up a few GTF
modes on the fly?

>  /*
>   * the following four scaling options are defined.
> @@ -481,6 +856,22 @@
>  }
>  
>  /**
> + * Add the default mode to .
> + */

Sentence fragment?

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

Could we rename ret to "mode_count" or something?  int ret is usually "0
or a -ESOMETHING", while here it's a count of modes we've added to the
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;
> +	}

Please just put the non-DDC path following this goto under if (!ddc_ret)
{} and don't do this goto.

>  	/* 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;
>  }
>  
>  /**
> 
> 
-- 
Eric Anholt
eric at anholt.net                         eric.anholt at intel.com


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 197 bytes
Desc: This is a digitally signed message part
URL: <http://lists.freedesktop.org/archives/intel-gfx/attachments/20090320/6fb3bf25/attachment.sig>


More information about the Intel-gfx mailing list