SOURCES: xorg-xserver-server-edid.patch, xorg-xserver-server-exa.patch, xor...

arekm arekm at pld-linux.org
Sun Nov 2 16:03:32 CET 2008


Author: arekm                        Date: Sun Nov  2 15:03:31 2008 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- more updates

---- Files affected:
SOURCES:
   xorg-xserver-server-edid.patch (1.1 -> 1.2) , xorg-xserver-server-exa.patch (1.2 -> 1.3) , xorg-xserver-server-fb-size.patch (NONE -> 1.1)  (NEW), xorg-xserver-server-pic-libxf86config.patch (NONE -> 1.1)  (NEW), xorg-xserver-server-glyph.patch (1.3 -> NONE)  (REMOVED)

---- Diffs:

================================================================
Index: SOURCES/xorg-xserver-server-edid.patch
diff -u SOURCES/xorg-xserver-server-edid.patch:1.1 SOURCES/xorg-xserver-server-edid.patch:1.2
--- SOURCES/xorg-xserver-server-edid.patch:1.1	Sun Nov  2 15:48:18 2008
+++ SOURCES/xorg-xserver-server-edid.patch	Sun Nov  2 16:03:22 2008
@@ -1,3 +1,979 @@
+From 2a0e3188588bce1759d3cef4d190909df2ca07ff Mon Sep 17 00:00:00 2001
+From: Adam Jackson <ajax at redhat.com>
+Date: Mon, 25 Aug 2008 12:55:56 -0400
+Subject: [PATCH] EDID backport from master.
+
+---
+ hw/xfree86/common/Makefile.am    |    3 +-
+ hw/xfree86/common/xf86Mode.c     |   14 +--
+ hw/xfree86/ddc/ddcProperty.c     |   11 ++-
+ hw/xfree86/ddc/edid.h            |    5 +-
+ hw/xfree86/ddc/interpret_edid.c  |   14 +++
+ hw/xfree86/ddc/print_edid.c      |   28 +++--
+ hw/xfree86/ddc/xf86DDC.c         |  241 +++++++++++++++++++++++---------------
+ hw/xfree86/ddc/xf86DDC.h         |    6 +
+ hw/xfree86/loader/xf86sym.c      |    1 +
+ hw/xfree86/modes/xf86Crtc.c      |   11 +-
+ hw/xfree86/modes/xf86EdidModes.c |  228 +++++++++++++++++++++++++++++++-----
+ hw/xfree86/modes/xf86Modes.c     |   12 ++
+ hw/xfree86/modes/xf86Modes.h     |    3 +
+ 13 files changed, 422 insertions(+), 155 deletions(-)
+
+diff --git a/hw/xfree86/common/Makefile.am b/hw/xfree86/common/Makefile.am
+index 0f44075..8aa3adc 100644
+--- a/hw/xfree86/common/Makefile.am
++++ b/hw/xfree86/common/Makefile.am
+@@ -45,7 +45,8 @@ libinit_a_SOURCES = xf86Build.h xf86Init.c
+ INCLUDES = $(XORG_INCS) -I$(srcdir)/../ddc -I$(srcdir)/../i2c \
+ 	   -I$(srcdir)/../loader -I$(srcdir)/../rac -I$(srcdir)/../parser \
+            -I$(srcdir)/../vbe -I$(srcdir)/../int10 \
+-	   -I$(srcdir)/../vgahw -I$(srcdir)/../dixmods/extmod
++	   -I$(srcdir)/../vgahw -I$(srcdir)/../dixmods/extmod \
++	   -I$(srcdir)/../modes
+ 
+ sdk_HEADERS = compiler.h fourcc.h xf86.h xf86Module.h xf86Opt.h \
+               xf86PciInfo.h xf86Priv.h xf86Privstr.h xf86Resources.h \
+diff --git a/hw/xfree86/common/xf86Mode.c b/hw/xfree86/common/xf86Mode.c
+index c1b0a5f..24a431d 100644
+--- a/hw/xfree86/common/xf86Mode.c
++++ b/hw/xfree86/common/xf86Mode.c
+@@ -39,6 +39,7 @@
+ #endif
+ 
+ #include <X11/X.h>
++#include "xf86Modes.h"
+ #include "os.h"
+ #include "servermd.h"
+ #include "mibank.h"
+@@ -705,16 +706,9 @@ xf86CheckModeForMonitor(DisplayModePtr mode, MonPtr monitor)
+      * -- libv
+      */
+ 
+-    /* Is the horizontal blanking a bit lowish? */
+-    if (((mode->HDisplay * 5 / 4) & ~0x07) > mode->HTotal) {
+-        /* is this a cvt -r mode, and only a cvt -r mode? */
+-        if (((mode->HTotal - mode->HDisplay) == 160) &&
+-            ((mode->HSyncEnd - mode->HDisplay) == 80) &&
+-            ((mode->HSyncEnd - mode->HSyncStart) == 32) &&
+-            ((mode->VSyncStart - mode->VDisplay) == 3)) {
+-            if (!monitor->reducedblanking && !(mode->type & M_T_DRIVER))
+-                return MODE_NO_REDUCED;
+-        }
++    if (xf86ModeIsReduced(mode)) {
++        if (!monitor->reducedblanking && !(mode->type & M_T_DRIVER))
++            return MODE_NO_REDUCED;
+     }
+ 
+     if ((monitor->maxPixClock) && (mode->Clock > monitor->maxPixClock))
+diff --git a/hw/xfree86/ddc/ddcProperty.c b/hw/xfree86/ddc/ddcProperty.c
+index 02125df..a4384f1 100644
+--- a/hw/xfree86/ddc/ddcProperty.c
++++ b/hw/xfree86/ddc/ddcProperty.c
+@@ -83,13 +83,18 @@ addRootWindowProperties(ScrnInfoPtr pScrn, xf86MonPtr DDC)
+     }
+ 
+     if (makeEDID1prop) {
+-	if ((EDID1rawdata = xalloc(128*sizeof(CARD8)))==NULL)
++	int size = 128;
++
++	if (DDC->flags & EDID_COMPLETE_RAWDATA)
++	    size += DDC->no_sections * 128;
++
++	if ((EDID1rawdata = xalloc(size*sizeof(CARD8)))==NULL)
+ 	    return;
+ 
+ 	EDID1Atom = MakeAtom(EDID1_ATOM_NAME, sizeof(EDID1_ATOM_NAME) - 1, TRUE);
+-	memcpy(EDID1rawdata, DDC->rawData, 128);
++	memcpy(EDID1rawdata, DDC->rawData, size);
+ 	xf86RegisterRootWindowProperty(scrnIndex, EDID1Atom, XA_INTEGER, 8,
+-		128, (unsigned char *)EDID1rawdata);
++		size, (unsigned char *)EDID1rawdata);
+     } 
+ 
+     if (makeEDID2prop) {
+diff --git a/hw/xfree86/ddc/edid.h b/hw/xfree86/ddc/edid.h
+index a4e79da..45caf6e 100644
+--- a/hw/xfree86/ddc/edid.h
++++ b/hw/xfree86/ddc/edid.h
+@@ -531,6 +531,9 @@ struct detailed_monitor_section {
+   } section;				/* max: 80 */
+ };
+ 
++/* flags */
++#define EDID_COMPLETE_RAWDATA	0x1
++
+ typedef struct {
+   int scrnIndex;
+   struct vendor vendor;
+@@ -539,7 +542,7 @@ typedef struct {
+   struct established_timings timings1;
+   struct std_timings timings2[8];
+   struct detailed_monitor_section det_mon[4];
+-  void *vdif; /* unused */
++  unsigned long flags;
+   int no_sections;
+   Uchar *rawData;
+ } xf86Monitor, *xf86MonPtr;
+diff --git a/hw/xfree86/ddc/interpret_edid.c b/hw/xfree86/ddc/interpret_edid.c
+index 21391dd..d293861 100644
+--- a/hw/xfree86/ddc/interpret_edid.c
++++ b/hw/xfree86/ddc/interpret_edid.c
+@@ -118,6 +118,20 @@ xf86InterpretEDID(int scrnIndex, Uchar *block)
+     return NULL;
+ }
+ 
++xf86MonPtr
++xf86InterpretEEDID(int scrnIndex, Uchar *block)
++{
++    xf86MonPtr m;
++
++    m = xf86InterpretEDID(scrnIndex, block);
++    if (!m)
++	return NULL;
++
++    /* extension parse */
++
++    return m;
++}
++
+ static void
+ get_vendor_section(Uchar *c, struct vendor *r)
+ {
+diff --git a/hw/xfree86/ddc/print_edid.c b/hw/xfree86/ddc/print_edid.c
+index f5442ad..5e89b40 100644
+--- a/hw/xfree86/ddc/print_edid.c
++++ b/hw/xfree86/ddc/print_edid.c
+@@ -462,22 +462,28 @@ print_number_sections(int scrnIndex, int num)
+ xf86MonPtr
+ xf86PrintEDID(xf86MonPtr m)
+ {
+-    CARD16 i, j;
++    CARD16 i, j, n;
+     char buf[EDID_WIDTH * 2 + 1];
+ 
+-    if (!(m)) return NULL;
++    if (!m) return NULL;
+ 
+-    print_vendor(m->scrnIndex,&m->vendor);
+-    print_version(m->scrnIndex,&m->ver);
+-    print_display(m->scrnIndex,&m->features, &m->ver);
+-    print_established_timings(m->scrnIndex,&m->timings1);
+-    print_std_timings(m->scrnIndex,m->timings2);
+-    print_detailed_monitor_section(m->scrnIndex,m->det_mon);
+-    print_number_sections(m->scrnIndex,m->no_sections);
++    print_vendor(m->scrnIndex, &m->vendor);
++    print_version(m->scrnIndex, &m->ver);
++    print_display(m->scrnIndex, &m->features, &m->ver);
++    print_established_timings(m->scrnIndex, &m->timings1);
++    print_std_timings(m->scrnIndex, m->timings2);
++    print_detailed_monitor_section(m->scrnIndex, m->det_mon);
++    print_number_sections(m->scrnIndex, m->no_sections);
++
++    /* extension block section stuff */
+ 
+     xf86DrvMsg(m->scrnIndex, X_INFO, "EDID (in hex):\n");
+- 
+-    for (i = 0; i < 128; i += j) {
++
++    n = 128;
++    if (m->flags & EDID_COMPLETE_RAWDATA)
++	n += m->no_sections * 128;
++
++    for (i = 0; i < n; i += j) {
+ 	for (j = 0; j < EDID_WIDTH; ++j) {
+ 	    sprintf(&buf[j * 2], "%02x", m->rawData[i + j]);
+ 	}
+diff --git a/hw/xfree86/ddc/xf86DDC.c b/hw/xfree86/ddc/xf86DDC.c
+index 28e2ead..0d86776 100644
+--- a/hw/xfree86/ddc/xf86DDC.c
++++ b/hw/xfree86/ddc/xf86DDC.c
+@@ -2,6 +2,14 @@
+  * 
+  * Copyright 1998,1999 by Egbert Eich <Egbert.Eich at Physik.TU-Darmstadt.DE>
+  */
++
++/*
++ * Note that DDC1 does not define any method for returning blocks beyond
++ * the first.  DDC2 does, but the original implementation would only ever
++ * read the first block.  If you want to read and parse all blocks, use
++ * xf86DoEEDID().
++ */
++
+ #ifdef HAVE_XORG_CONFIG_H
+ #include <xorg-config.h>
+ #endif
+@@ -31,18 +39,6 @@ static unsigned int *FetchEDID_DDC1(
+     register unsigned int (*)(ScrnInfoPtr)
+ );
+ 
+-static unsigned char* EDID1Read_DDC2(
+-    int scrnIndex, 
+-    I2CBusPtr pBus
+-);
+-
+-static unsigned char * DDCRead_DDC2(
+-    int scrnIndex,
+-    I2CBusPtr pBus, 
+-    int start, 
+-    int len
+-);
+-
+ typedef enum {
+     DDCOPT_NODDC1,
+     DDCOPT_NODDC2,
+@@ -107,10 +103,102 @@ xf86DoEDID_DDC1(
+ 	return tmp;
+ }
+ 
++static I2CDevPtr
++DDC2MakeDevice(I2CBusPtr pBus, int address, char *name)
++{
++    I2CDevPtr dev = NULL;
++
++    if (!(dev = xf86I2CFindDev(pBus, address))) {
++	dev = xf86CreateI2CDevRec();
++	dev->DevName = name;
++	dev->SlaveAddr = address;
++	dev->ByteTimeout = 2200; /* VESA DDC spec 3 p. 43 (+10 %) */
++	dev->StartTimeout = 550;
++	dev->BitTimeout = 40;
++	dev->AcknTimeout = 40;
++
++	dev->pI2CBus = pBus;
++	if (!xf86I2CDevInit(dev)) {
++	    xf86DrvMsg(pBus->scrnIndex, X_PROBED, "No DDC2 device\n");
++	    return NULL;
++	}
++    }
++
++    return dev;
++}
++
++static I2CDevPtr
++DDC2Init(int scrnIndex, I2CBusPtr pBus)
++{
++    I2CDevPtr dev = NULL;
++
++    /*
++     * Slow down the bus so that older monitors don't 
++     * miss things.
++     */
++    pBus->RiseFallTime = 20;
++ 
++    DDC2MakeDevice(pBus, 0x0060, "E-EDID segment register");
++    dev = DDC2MakeDevice(pBus, 0x00A0, "ddc2");
++
++    return dev;
++}
++
++/* Mmmm, smell the hacks */
++static void
++EEDIDStop(I2CDevPtr d)
++{
++}
++
++/* block is the EDID block number.  a segment is two blocks. */
++static Bool
++DDC2Read(I2CDevPtr dev, int block, unsigned char *R_Buffer)
++{
++    unsigned char W_Buffer[1];
++    int i, segment;
++    I2CDevPtr seg;
++    void (*stop)(I2CDevPtr);
++
++    for (i = 0; i < RETRIES; i++) {
++	/* Stop bits reset the segment pointer to 0, so be careful here. */
++	segment = block >> 1;
++	if (segment) {
++	    Bool b;
++	    
++	    if (!(seg = xf86I2CFindDev(dev->pI2CBus, 0x0060)))
++		return FALSE;
++
++	    W_Buffer[0] = segment;
++
++	    stop = dev->pI2CBus->I2CStop;
++	    dev->pI2CBus->I2CStop = EEDIDStop;
++
++	    b = xf86I2CWriteRead(seg, W_Buffer, 1, NULL, 0);
++
++	    dev->pI2CBus->I2CStop = stop;
++	    if (!b) {
++		dev->pI2CBus->I2CStop(dev);
++		continue;
++	    }
++	}
++
++	W_Buffer[0] = (block & 0x01) * EDID1_LEN;
++
++	if (xf86I2CWriteRead(dev, W_Buffer, 1, R_Buffer, EDID1_LEN)) {
++	    if (!DDC_checksum(R_Buffer, EDID1_LEN))
++		return TRUE;
++	}
++    }
++ 
++    return FALSE;
++}
++
+ /**
+  * Attempts to probe the monitor for EDID information, if NoDDC and NoDDC2 are
+  * unset.  EDID information blocks are interpreted and the results returned in
+- * an xf86MonPtr.
++ * an xf86MonPtr.  Unlike xf86DoEDID_DDC[12](), this function will return
++ * the complete EDID data, including all extension blocks, if the 'complete'
++ * parameter is TRUE;
+  *
+  * This function does not affect the list of modes used by drivers -- it is up
+  * to the driver to decide policy on what to do with EDID information.
+@@ -119,46 +207,72 @@ xf86DoEDID_DDC1(
+  * @return NULL if no monitor attached or failure to interpret the EDID.
+  */
+ xf86MonPtr
+-xf86DoEDID_DDC2(int scrnIndex, I2CBusPtr pBus)
++xf86DoEEDID(int scrnIndex, I2CBusPtr pBus, Bool complete)
+ {
+     ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+     unsigned char *EDID_block = NULL;
+     xf86MonPtr tmp = NULL;
++    I2CDevPtr dev = NULL;
+     /* Default DDC and DDC2 to enabled. */
+     Bool noddc = FALSE, noddc2 = FALSE;
+     OptionInfoPtr options;
+ 
+-    options = xnfalloc(sizeof(DDCOptions));
+-    (void)memcpy(options, DDCOptions, sizeof(DDCOptions));
++    options = xalloc(sizeof(DDCOptions));
++    if (!options)
++	return NULL;
++    memcpy(options, DDCOptions, sizeof(DDCOptions));
+     xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, options);
+ 
+     xf86GetOptValBool(options, DDCOPT_NODDC, &noddc);
+     xf86GetOptValBool(options, DDCOPT_NODDC2, &noddc2);
+     xfree(options);
+-    
++
+     if (noddc || noddc2)
+ 	return NULL;
+ 
+-    EDID_block = EDID1Read_DDC2(scrnIndex,pBus);
++    if (!(dev = DDC2Init(scrnIndex, pBus)))
++	return NULL;
+ 
+-    if (EDID_block){
+-	tmp = xf86InterpretEDID(scrnIndex,EDID_block);
+-    } else {
+-#ifdef DEBUG
+-	ErrorF("No EDID block returned\n");
+-#endif
++    EDID_block = xcalloc(1, EDID1_LEN);
++    if (!EDID_block)
+ 	return NULL;
++
++    if (DDC2Read(dev, 0, EDID_block)) {
++	int i, n = EDID_block[0x7e];
++
++	if (complete && n) {
++	    EDID_block = xrealloc(EDID_block, EDID1_LEN * (1+n));
++
++	    for (i = 0; i < n; i++)
++		DDC2Read(dev, i+1, EDID_block + (EDID1_LEN * (1+i)));
++	}
++
++	tmp = xf86InterpretEEDID(scrnIndex, EDID_block);
+     }
+-#ifdef DEBUG
+-    if (!tmp)
+-	ErrorF("Cannot interpret EDID block\n");
+-    else
+-        ErrorF("Sections to follow: %i\n",tmp->no_sections);
+-#endif
+-    
++
++    if (tmp && complete)
++	tmp->flags |= EDID_COMPLETE_RAWDATA;
++
+     return tmp;
+ }
+ 
++/**
++ * Attempts to probe the monitor for EDID information, if NoDDC and NoDDC2 are
++ * unset.  EDID information blocks are interpreted and the results returned in
++ * an xf86MonPtr.
++ *
++ * This function does not affect the list of modes used by drivers -- it is up
++ * to the driver to decide policy on what to do with EDID information.
++ *
++ * @return pointer to a new xf86MonPtr containing the EDID information.
++ * @return NULL if no monitor attached or failure to interpret the EDID.
++ */
++xf86MonPtr
++xf86DoEDID_DDC2(int scrnIndex, I2CBusPtr pBus)
++{
++    return xf86DoEEDID(scrnIndex, pBus, FALSE);
++}
++
+ /* 
+  * read EDID record , pass it to callback function to interpret.
+  * callback function will store it for further use by calling
+@@ -225,68 +339,3 @@ FetchEDID_DDC1(register ScrnInfoPtr pScrn,
+     } while(--count);
+     return (ptr);
+ }
+-
+-static unsigned char*
+-EDID1Read_DDC2(int scrnIndex, I2CBusPtr pBus)
+-{
+-    return  DDCRead_DDC2(scrnIndex, pBus, 0, EDID1_LEN);
+-}
+-
+-static unsigned char *
+-DDCRead_DDC2(int scrnIndex, I2CBusPtr pBus, int start, int len)
+-{
+-    I2CDevPtr dev;
+-    unsigned char W_Buffer[2];
+-    int w_bytes;
+-    unsigned char *R_Buffer;
+-    int i;
+-    
+-    /*
+-     * Slow down the bus so that older monitors don't 
+-     * miss things.
+-     */
+-    pBus->RiseFallTime = 20;
+-    
+-    if (!(dev = xf86I2CFindDev(pBus, 0x00A0))) {
+-	dev = xf86CreateI2CDevRec();
+-	dev->DevName = "ddc2";
+-	dev->SlaveAddr = 0xA0;
+-	dev->ByteTimeout = 2200; /* VESA DDC spec 3 p. 43 (+10 %) */
+-	dev->StartTimeout = 550;
+-	dev->BitTimeout = 40;
+-	dev->AcknTimeout = 40;
+-
+-	dev->pI2CBus = pBus;
+-	if (!xf86I2CDevInit(dev)) {
+-	    xf86DrvMsg(scrnIndex, X_PROBED, "No DDC2 device\n");
+-	    return NULL;
+-	}
+-    }
+-    if (start < 0x100) {
+-	w_bytes = 1;
+-	W_Buffer[0] = start;
+-    } else {
+-	w_bytes = 2;
+-	W_Buffer[0] = start & 0xFF;
+-	W_Buffer[1] = (start & 0xFF00) >> 8;
+-    }
+-    R_Buffer = xcalloc(1,sizeof(unsigned char) 
+-					* (len));
+-    for (i=0; i<RETRIES; i++) {
+-	if (xf86I2CWriteRead(dev, W_Buffer,w_bytes, R_Buffer,len)) {
+-	    if (!DDC_checksum(R_Buffer,len))
+-		return R_Buffer;
+-
+-#ifdef DEBUG
+-	    else ErrorF("Checksum error in EDID block\n");
+-#endif
+-	}
+-#ifdef DEBUG
+-	else ErrorF("Error reading EDID block\n");
+-#endif
+-    }
+-    
+-    xf86DestroyI2CDevRec(dev,TRUE);
+-    xfree(R_Buffer);
+-    return NULL;
+-}
+diff --git a/hw/xfree86/ddc/xf86DDC.h b/hw/xfree86/ddc/xf86DDC.h
+index 3b072dd..42d9ce6 100644
+--- a/hw/xfree86/ddc/xf86DDC.h
++++ b/hw/xfree86/ddc/xf86DDC.h
+@@ -35,6 +35,8 @@ extern xf86MonPtr xf86DoEDID_DDC2(
+    I2CBusPtr pBus
+ );
+ 
++extern xf86MonPtr xf86DoEEDID(int scrnIndex, I2CBusPtr pBus, Bool);
++
+ extern xf86MonPtr xf86PrintEDID(
+     xf86MonPtr monPtr
+ );
+@@ -43,6 +45,10 @@ extern xf86MonPtr xf86InterpretEDID(
+     int screenIndex, Uchar *block
+ );
+ 
++extern xf86MonPtr xf86InterpretEEDID(
++    int screenIndex, Uchar *block
++);
++
+ extern void 
+ xf86DDCMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC);
+ 
+diff --git a/hw/xfree86/loader/xf86sym.c b/hw/xfree86/loader/xf86sym.c
+index 24fc44c..77d7d45 100644
+--- a/hw/xfree86/loader/xf86sym.c
++++ b/hw/xfree86/loader/xf86sym.c
+@@ -1009,6 +1009,7 @@ _X_HIDDEN void *xfree86LookupTab[] = {
+     SYMFUNC(xf86DoEDID_DDC2)
+     SYMFUNC(xf86InterpretEDID)
+     SYMFUNC(xf86PrintEDID)
++    SYMFUNC(xf86DoEEDID)
+     SYMFUNC(xf86DDCMonitorSet)
+     SYMFUNC(xf86SetDDCproperties)
+ 
+diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
+index 91ba1b7..2941b8b 100644
+--- a/hw/xfree86/modes/xf86Crtc.c
++++ b/hw/xfree86/modes/xf86Crtc.c
+@@ -2575,9 +2575,11 @@ xf86OutputSetEDID (xf86OutputPtr output, xf86MonPtr edid_mon)
+     size = 0;
+     if (edid_mon)
+     {
+-	if (edid_mon->ver.version == 1)
++	if (edid_mon->ver.version == 1) {
+ 	    size = 128;
+-	else if (edid_mon->ver.version == 2)
++	    if (edid_mon->flags & EDID_COMPLETE_RAWDATA)
++		size += edid_mon->no_sections * 128;
++	} else if (edid_mon->ver.version == 2)
+ 	    size = 256;
+     }
+     xf86OutputSetEDIDProperty (output, edid_mon ? edid_mon->rawData : NULL, size);
+@@ -2622,15 +2624,16 @@ xf86OutputGetEDIDModes (xf86OutputPtr output)
+     return xf86DDCGetModes(scrn->scrnIndex, edid_mon);
+ }
+ 
++/* maybe we should care about DDC1?  meh. */
+ _X_EXPORT xf86MonPtr
+ xf86OutputGetEDID (xf86OutputPtr output, I2CBusPtr pDDCBus)
+ {
+     ScrnInfoPtr	scrn = output->scrn;
+     xf86MonPtr mon;
+ 
+-    mon = xf86DoEDID_DDC2 (scrn->scrnIndex, pDDCBus);
++    mon = xf86DoEEDID(scrn->scrnIndex, pDDCBus, TRUE);
+     if (mon)
+-        xf86DDCApplyQuirks (scrn->scrnIndex, mon);
++        xf86DDCApplyQuirks(scrn->scrnIndex, mon);
+ 
+     return mon;
+ }
+diff --git a/hw/xfree86/modes/xf86EdidModes.c b/hw/xfree86/modes/xf86EdidModes.c
+index bf0ea3f..7e80601 100644
+--- a/hw/xfree86/modes/xf86EdidModes.c
++++ b/hw/xfree86/modes/xf86EdidModes.c
+@@ -1,5 +1,6 @@
+ /*
+  * Copyright 2006 Luc Verhaegen.
++ * Copyright 2008 Red Hat, Inc.
+  *
+  * Permission is hereby granted, free of charge, to any person obtaining a
+  * copy of this software and associated documentation files (the "Software"),
+@@ -34,16 +35,39 @@
+ #endif
+ #endif
+ 
++#define _PARSE_EDID_
+ #include "xf86.h"
+ #include "xf86DDC.h"
+ #include <X11/Xatom.h>
+ #include "property.h"
+ #include "propertyst.h"
+-#include "xf86DDC.h"
+ #include "xf86Crtc.h"
+ #include <string.h>
+ #include <math.h>
+ 
++static Bool
++xf86MonitorSupportsReducedBlanking(xf86MonPtr DDC)
++{
++    /* EDID 1.4 explicitly defines RB support */
++    if (DDC->ver.revision >= 4) {
<<Diff was trimmed, longer than 597 lines>>

---- CVS-web:
    http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/SOURCES/xorg-xserver-server-edid.patch?r1=1.1&r2=1.2&f=u
    http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/SOURCES/xorg-xserver-server-exa.patch?r1=1.2&r2=1.3&f=u



More information about the pld-cvs-commit mailing list