[Intel-gfx] [PATCH] Fix LVDS EDID to match all possible default modes
Ma, Ling
ling.ma at intel.com
Mon Dec 29 06:46:43 CET 2008
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-bounces at lists.freedesktop.org
>[mailto:intel-gfx-bounces at lists.freedesktop.org] On Behalf Of
>Keith Packard
>Sent: 2008年11月26日 16:32
>To: intel-gfx at lists.freedesktop.org
>Cc: dri-devel at 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 <keithp at 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-gfx at lists.freedesktop.org
>http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 19247.patch
Type: application/octet-stream
Size: 536 bytes
Desc: 19247.patch
URL: <http://lists.freedesktop.org/archives/intel-gfx/attachments/20081229/dc5733d5/attachment.obj>
More information about the Intel-gfx
mailing list