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

Attachment: 19247.patch
Description: 19247.patch

------------------------------------------------------------------------------
--
_______________________________________________
Dri-devel mailing list
Dri-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to