hi Keith, I happen to encounter the same issue, and did a patch for situation when we can't find EDID from display, and set the flag (edid_mon->features.msc |= 0x1). Could you have some opinion on it ?
Thanks Ma Ling >-----Original Message----- >From: intel-gfx-boun...@lists.freedesktop.org >[mailto:intel-gfx-boun...@lists.freedesktop.org] On Behalf Of >Keith Packard >Sent: 2008年11月26日 16:32 >To: intel-...@lists.freedesktop.org >Cc: dri-devel@lists.sourceforge.net >Subject: [Intel-gfx] [PATCH] Fix LVDS EDID to match all >possible default modes > >If the EDID data from the LVDS doesn't indicate support for a >wide range of >continuous frequencies, it will not match any of the default >modes although >our LVDS scaler logic ignores refresh rates when programming >LVDS modes. Fix >this by smashing the compute EDID data to open up the sync rates. > >Signed-off-by: Keith Packard <kei...@keithp.com> >--- > src/i830_lvds.c | 30 ++++++++++++++++++++++++++++++ > 1 files changed, 30 insertions(+), 0 deletions(-) > >diff --git a/src/i830_lvds.c b/src/i830_lvds.c >index 0d67d50..66e706c 100644 >--- a/src/i830_lvds.c >+++ b/src/i830_lvds.c >@@ -787,6 +787,36 @@ i830_lvds_get_modes(xf86OutputPtr output) > DisplayModePtr modes; > > edid_mon = xf86OutputGetEDID (output, intel_output->pDDCBus); >+ >+ /* Our LVDS scaler can hit any size, so mark the EDID data as >+ * supporting continuous timings >+ */ >+ if (edid_mon) { >+ int i, j = -1; >+ edid_mon->features.msc |= 0x1; >+ >+ /* Either find a DS_RANGES block, or replace a DS_VENDOR block, >+ * smashing it into a DS_RANGES block with wide open refresh to >+ * match all default modes >+ */ >+ for (i = 0; i < sizeof (edid_mon->det_mon) / sizeof >(edid_mon->det_mon[0]); i++) >+ { >+ if (edid_mon->det_mon[i].type >= DS_VENDOR && j == -1) >+ j = i; >+ if (edid_mon->det_mon[i].type == DS_RANGES) { >+ j = i; >+ break; >+ } >+ } >+ if (j != -1) { >+ struct monitor_ranges *ranges = >&edid_mon->det_mon[j].section.ranges; >+ edid_mon->det_mon[j].type = DS_RANGES; >+ ranges->min_v = 0; >+ ranges->max_v = 200; >+ ranges->min_h = 0; >+ ranges->max_h = 200; >+ } >+ } > xf86OutputSetEDID (output, edid_mon); > > modes = xf86OutputGetEDIDModes (output); >-- >1.5.6.5 > >_______________________________________________ >Intel-gfx mailing list >intel-...@lists.freedesktop.org >http://lists.freedesktop.org/mailman/listinfo/intel-gfx > >
19247.patch
Description: 19247.patch
------------------------------------------------------------------------------
-- _______________________________________________ Dri-devel mailing list Dri-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/dri-devel