Subject: [DRM/I915]: Sync the mode validation for INTERLACE/DBLSCAN
From: Zhao Yakui <yakui.z...@intel.com>

     Sync the mode validation for INTERLACE/DBLSCAN
     This covers:
     Check whether the INTERLACE/DBLSCAN is supported by output device. If
not, the mode containing the flag of INTERLACE/DBLSCAN will be marked
as unsupported.

Signed-off-by: Zhao Yakui <yakui.z...@intel.com>
---
 drivers/gpu/drm/drm_crtc_helper.c |   25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

Index: linux-2.6/drivers/gpu/drm/drm_crtc_helper.c
===================================================================
--- linux-2.6.orig/drivers/gpu/drm/drm_crtc_helper.c    2009-03-20 
11:47:32.000000000 +0800
+++ linux-2.6/drivers/gpu/drm/drm_crtc_helper.c 2009-03-20 13:36:22.000000000 
+0800
@@ -41,6 +41,23 @@
                   968, 1056, 0, 600, 601, 605, 628, 0,
                   DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
 };
+static void drm_mode_validate_flag(struct drm_connector *connector,
+                           int flags)
+{
+       struct drm_display_mode *mode, *t;
+       if (flags == (DRM_MODE_FLAG_DBLSCAN |
+                       DRM_MODE_FLAG_INTERLACE))
+               return ;
+
+       list_for_each_entry_safe(mode, t, &connector->modes, head) {
+               if (mode->flags & DRM_MODE_FLAG_INTERLACE &&
+                               !(flags & DRM_MODE_FLAG_INTERLACE))
+                       mode->status = MODE_NO_INTERLACE;
+               if (mode->flags & DRM_MODE_FLAG_DBLSCAN &&
+                               !(flags & DRM_MODE_FLAG_DBLSCAN))
+                       mode->status = MODE_NO_DBLESCAN;
+       }
+}
 
 /**
  * drm_helper_probe_connector_modes - get complete set of display modes
@@ -96,6 +113,14 @@
        if (maxX && maxY)
                drm_mode_validate_size(dev, &connector->modes, maxX,
                                       maxY, 0);
+       {
+               int flags = (connector->interlace_allowed ?
+                               DRM_MODE_FLAG_INTERLACE : 0) |
+                               (connector->doublescan_allowed ?
+                               DRM_MODE_FLAG_DBLSCAN : 0);
+               drm_mode_validate_flag(connector, flags);
+
+       }
        list_for_each_entry_safe(mode, t, &connector->modes, head) {
                if (mode->status == MODE_OK)
                        mode->status = connector_funcs->mode_valid(connector,



------------------------------------------------------------------------------
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

Reply via email to