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