> >
> >> Currently detailed timings are ignored on EDID < 1.3 with the comment
> >> "EDID up to and including 1.2 may put monitor info here". However, the
> >> EDID Implementation Guide only says that on EDID 1.1 (which introduced
> >> monitor descriptors) and EDID 1.2, the first descriptor block of the
> >> detailed timing section may also contain a monitor descriptor, while
> >> on later EDID revisions monitor descriptors are only allowed on the
> >> other blocks (2-4).
> >>
> >> Allow EDID < 1.2 to specify detailed timings by removing the check.
> >> The monitor descriptors on the first block will be correctly handled
> >> by the same code that handles monitor descriptors on blocks 2-4.
> >>
> >> X.org server, parse-edid and monitor-edid tools correctly do not
> >> ignore detailed timings in this case.
> >>
> >> Tested on Acer Aspire 7520 with GeForce 7000M and 17" 1440x900 LCD.
> >>
> >> Signed-off-by: Anssi Hannula <anssi.hann...@iki.fi>


Can you try the attached patch?

is does something similiar just along the lines of the X server checks.

Dave

> >>
> >> ---
> >>  drm_edid.c |    4 ----
> >>  1 file changed, 4 deletions(-)
> >>
> >> diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
> >> index 80cc6d0..9acdedf 100644
> >> --- a/drivers/gpu/drm/drm_edid.c
> >> +++ b/drivers/gpu/drm/drm_edid.c
> >> @@ -502,10 +502,6 @@ static int add_detailed_info(struct
> >> drm_connector *connector, struct detailed_non_pixel *data =
> >> &timing->data.other_data; struct drm_display_mode *newmode;
> >>
> >> -             /* EDID up to and including 1.2 may put monitor info
> >> here */
> >> -             if (edid->version == 1 && edid->revision < 3)
> >> -                     continue;
> >> -
> >>               /* Detailed mode timing */
> >>               if (timing->pixel_clock) {
> >>                       newmode = drm_mode_detailed(dev, edid,
> >> timing, quirks);
> >
> > Yeah I've sent this before too, but I think it got missed.  Dave can
> > you make sure something like this gets applied (if it hasn't been
> > already, I didn't check current sources)?
> >
> 
> the previous patch was to the edid revision in edid_is_valid, I don't
> remember seeing one to the detailed mode timings.
> 
> I'll compare to the X server.
> 
> Dave.
> 
> 
From ebb177d2afb8532a8a316489aed545ed0c170802 Mon Sep 17 00:00:00 2001
From: Dave Airlie <airl...@redhat.com>
Date: Sat, 15 Aug 2009 12:25:08 +1000
Subject: [PATCH] drm/edid: fixup detailed timings like the X server.

this syncs the versioning check with the code the X server uses.

Reported-by: Anssi Hannula <anssi.hann...@iki.fi>
Signed-off-by: Dave Airlie <airl...@redhat.com>
---
 drivers/gpu/drm/drm_edid.c |   72 ++++++++++++++++++++-----------------------
 1 files changed, 34 insertions(+), 38 deletions(-)

diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 80cc6d0..7f2728b 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -502,12 +502,40 @@ static int add_detailed_info(struct drm_connector *connector,
 		struct detailed_non_pixel *data = &timing->data.other_data;
 		struct drm_display_mode *newmode;
 
-		/* EDID up to and including 1.2 may put monitor info here */
-		if (edid->version == 1 && edid->revision < 3)
-			continue;
-
-		/* Detailed mode timing */
-		if (timing->pixel_clock) {
+		/* X server check is version 1.1 or higher */
+		if (edid->version == 1 && edid->revision >= 1 &&
+		    !timing->pixel_clock) {
+			/* Other timing or info */
+			switch (data->type) {
+			case EDID_DETAIL_MONITOR_SERIAL:
+				break;
+			case EDID_DETAIL_MONITOR_STRING:
+				break;
+			case EDID_DETAIL_MONITOR_RANGE:
+				/* Get monitor range data */
+				break;
+			case EDID_DETAIL_MONITOR_NAME:
+				break;
+			case EDID_DETAIL_MONITOR_CPDATA:
+				break;
+			case EDID_DETAIL_STD_MODES:
+				/* Five modes per detailed section */
+				for (j = 0; j < 5; i++) {
+					struct std_timing *std;
+					struct drm_display_mode *newmode;
+
+					std = &data->data.timings[j];
+					newmode = drm_mode_std(dev, std);
+					if (newmode) {
+						drm_mode_probed_add(connector, newmode);
+						modes++;
+					}
+				}
+				break;
+			default:
+				break;
+			}
+		} else {
 			newmode = drm_mode_detailed(dev, edid, timing, quirks);
 			if (!newmode)
 				continue;
@@ -518,38 +546,6 @@ static int add_detailed_info(struct drm_connector *connector,
 			drm_mode_probed_add(connector, newmode);
 
 			modes++;
-			continue;
-		}
-
-		/* Other timing or info */
-		switch (data->type) {
-		case EDID_DETAIL_MONITOR_SERIAL:
-			break;
-		case EDID_DETAIL_MONITOR_STRING:
-			break;
-		case EDID_DETAIL_MONITOR_RANGE:
-			/* Get monitor range data */
-			break;
-		case EDID_DETAIL_MONITOR_NAME:
-			break;
-		case EDID_DETAIL_MONITOR_CPDATA:
-			break;
-		case EDID_DETAIL_STD_MODES:
-			/* Five modes per detailed section */
-			for (j = 0; j < 5; i++) {
-				struct std_timing *std;
-				struct drm_display_mode *newmode;
-
-				std = &data->data.timings[j];
-				newmode = drm_mode_std(dev, std);
-				if (newmode) {
-					drm_mode_probed_add(connector, newmode);
-					modes++;
-				}
-			}
-			break;
-		default:
-			break;
 		}
 	}
 
-- 
1.6.0.6

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
--
_______________________________________________
Dri-devel mailing list
Dri-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to