[Intel-gfx] [Patch 1/3_v2]: [DRM/I915] : Sync the mode validation for INTERLACE/DBLSCAN
yakui_zhao
yakui.zhao at intel.com
Mon Mar 23 04:15:34 CET 2009
Subject: [DRM/I915]: Sync the mode validation for INTERLACE/DBLSCAN
From: Zhao Yakui <yakui.zhao at 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.
Fix the code-style based on Eric's suggestion
Signed-off-by: Zhao Yakui <yakui.zhao at intel.com>
---
drivers/gpu/drm/drm_crtc_helper.c | 29 +++++++++++++++++++++++++++++
1 file changed, 29 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-23 09:29:59.000000000 +0800
+++ linux-2.6/drivers/gpu/drm/drm_crtc_helper.c 2009-03-23 11:13:43.000000000 +0800
@@ -42,6 +42,25 @@
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;
+ }
+
+ return;
+}
+
/**
* drm_helper_probe_connector_modes - get complete set of display modes
* @dev: DRM device
@@ -72,6 +91,7 @@
struct drm_connector_helper_funcs *connector_funcs =
connector->helper_private;
int count = 0;
+ int mode_flags = 0;
DRM_DEBUG("%s\n", drm_get_connector_name(connector));
/* set all modes to the unverified state */
@@ -96,6 +116,15 @@
if (maxX && maxY)
drm_mode_validate_size(dev, &connector->modes, maxX,
maxY, 0);
+
+ {
+ if (connector->interlace_allowed)
+ mode_flags |= DRM_MODE_FLAG_INTERLACE;
+ if (connector->doublescan_allowed)
+ mode_flags |= DRM_MODE_FLAG_DBLSCAN;
+ drm_mode_validate_flag(connector, mode_flags);
+ }
+
list_for_each_entry_safe(mode, t, &connector->modes, head) {
if (mode->status == MODE_OK)
mode->status = connector_funcs->mode_valid(connector,
More information about the Intel-gfx
mailing list