[arch-commits] CVS update of extra/x11-drivers/xf86-video-ati (3 files)

Alexander Baldeck alexander at archlinux.org
Sat Nov 10 21:04:39 UTC 2007


    Date: Saturday, November 10, 2007 @ 16:04:39
  Author: alexander
    Path: /home/cvs-extra/extra/x11-drivers/xf86-video-ati

   Added: 02_add_ddc_type_6.diff (1.1) 03_add_option_for_lvds_mode.diff (1.1)
Modified: PKGBUILD (1.27 -> 1.28)

* revise patches


----------------------------------+
 02_add_ddc_type_6.diff           |  109 ++++++++++++++++++++++++++++
 03_add_option_for_lvds_mode.diff |  141 +++++++++++++++++++++++++++++++++++++
 PKGBUILD                         |   11 +-
 3 files changed, 257 insertions(+), 4 deletions(-)


Index: extra/x11-drivers/xf86-video-ati/02_add_ddc_type_6.diff
diff -u /dev/null extra/x11-drivers/xf86-video-ati/02_add_ddc_type_6.diff:1.1
--- /dev/null	Sat Nov 10 16:04:39 2007
+++ extra/x11-drivers/xf86-video-ati/02_add_ddc_type_6.diff	Sat Nov 10 16:04:39 2007
@@ -0,0 +1,109 @@
+From: Dave Airlie <airlied at linux.ie>
+Date: Sat, 6 Oct 2007 10:11:19 +0000 (+1000)
+Subject: radeon: add support for DDC type 6
+X-Git-Url: http://gitweb.freedesktop.org/?p=xorg/driver/xf86-video-ati.git;a=commitdiff;h=0b03a73b7dcb4aa192c42f2a4c842d324c358122
+
+radeon: add support for DDC type 6
+
+thanks to arekm on xorg-devel for testing/feedback
+---
+
+--- a/src/radeon_bios.c
++++ b/src/radeon_bios.c
+@@ -176,6 +176,9 @@ static Bool RADEONGetATOMConnectorInfoFr
+ 		case RADEON_LCD_GPIO_MASK:
+ 		    info->BiosConnector[i].DDCType = DDC_LCD;
+ 		    break;
++		case RADEON_MDGPIO_EN_REG:
++		    info->BiosConnector[i].DDCType = DDC_GPIO;
++		    break;
+ 		default:
+ 		    info->BiosConnector[i].DDCType = DDC_NONE_DETECTED;
+ 		    break;
+@@ -277,7 +280,7 @@ static Bool RADEONGetLegacyConnectorInfo
+ 		    tmp1 = RADEON_BIOS8(tmp0+2) & 0x07;
+ 		    if (tmp1) {	    
+ 			info->BiosConnector[4].DDCType	= tmp1;      
+-			if (info->BiosConnector[4].DDCType > DDC_LCD) {
++			if (info->BiosConnector[4].DDCType > DDC_GPIO) {
+ 			    xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ 				       "Unknown DDCType %d found\n",
+ 				       info->BiosConnector[4].DDCType);
+--- a/src/radeon_output.c
++++ b/src/radeon_output.c
+@@ -75,13 +75,14 @@ const char *TMDSTypeName[4] = {
+   "None"
+ };
+ 
+-const char *DDCTypeName[6] = {
++const char *DDCTypeName[7] = {
+   "None",
+   "MONID",
+   "DVI_DDC",
+   "VGA_DDC",
+   "CRT2_DDC",
+-  "LCD_DDC"
++  "LCD_DDC",
++  "GPIO_DDC"
+ };
+ 
+ const char *DACTypeName[4] = {
+@@ -277,7 +278,7 @@ RADEONDisplayDDCConnected(ScrnInfoPtr pS
+     DDCReg = radeon_output->DDCReg;
+ 
+     /* Read and output monitor info using DDC2 over I2C bus */
+-    if (radeon_output->pI2CBus && info->ddc2 && (DDCReg != RADEON_LCD_GPIO_MASK)) {
++    if (radeon_output->pI2CBus && info->ddc2 && (DDCReg != RADEON_LCD_GPIO_MASK) && (DDCReg != RADEON_MDGPIO_EN_REG)) {
+ 	OUTREG(DDCReg, INREG(DDCReg) &
+ 	       (CARD32)~(RADEON_GPIO_A_0 | RADEON_GPIO_A_1));
+ 
+@@ -331,7 +332,7 @@ RADEONDisplayDDCConnected(ScrnInfoPtr pS
+ 	    usleep(15000);
+ 	    if(*MonInfo)  break;
+ 	}
+-    } else if (radeon_output->pI2CBus && info->ddc2 && DDCReg == RADEON_LCD_GPIO_MASK) {
++    } else if (radeon_output->pI2CBus && info->ddc2 && ((DDCReg == RADEON_LCD_GPIO_MASK) || (DDCReg == RADEON_MDGPIO_EN_REG))) {
+          *MonInfo = xf86DoEDID_DDC2(pScrn->scrnIndex, radeon_output->pI2CBus);
+     } else {
+ 	xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "DDC2/I2C is not properly initialized\n");
+@@ -2206,6 +2207,10 @@ static void RADEONI2CGetBits(I2CBusPtr b
+         val = INREG(b->DriverPrivate.uval+4);
+         *Clock = (val & (1<<13)) != 0;
+         *data  = (val & (1<<12)) != 0;
++    } else if (b->DriverPrivate.uval == RADEON_MDGPIO_EN_REG) {
++        val = INREG(b->DriverPrivate.uval+4);
++        *Clock = (val & (1<<19)) != 0;
++        *data  = (val & (1<<18)) != 0;
+     } else {
+         val = INREG(b->DriverPrivate.uval);
+         *Clock = (val & RADEON_GPIO_Y_1) != 0;
+@@ -2225,6 +2230,11 @@ static void RADEONI2CPutBits(I2CBusPtr b
+         val |= (Clock ? 0:(1<<13));
+         val |= (data ? 0:(1<<12));
+         OUTREG(b->DriverPrivate.uval, val);
++    } else if (b->DriverPrivate.uval == RADEON_MDGPIO_EN_REG) {
++        val = INREG(b->DriverPrivate.uval) & (CARD32)~((1<<18) | (1<<19));
++        val |= (Clock ? 0:(1<<19));
++        val |= (data ? 0:(1<<18));
++        OUTREG(b->DriverPrivate.uval, val);
+     } else {
+         val = INREG(b->DriverPrivate.uval) & (CARD32)~(RADEON_GPIO_EN_0 | RADEON_GPIO_EN_1);
+         val |= (Clock ? 0:RADEON_GPIO_EN_1);
+@@ -2547,6 +2557,7 @@ void RADEONInitConnector(xf86OutputPtr o
+     case DDC_VGA  : DDCReg = RADEON_GPIO_VGA_DDC; break;
+     case DDC_CRT2 : DDCReg = RADEON_GPIO_CRT2_DDC; break;
+     case DDC_LCD  : DDCReg = RADEON_LCD_GPIO_MASK; break;
++    case DDC_GPIO : DDCReg = RADEON_MDGPIO_EN_REG; break;
+     default: break;
+     }
+ 
+--- a/src/radeon_probe.h
++++ b/src/radeon_probe.h
+@@ -60,6 +60,7 @@ typedef enum
+     DDC_VGA,
+     DDC_CRT2,
+     DDC_LCD,
++    DDC_GPIO,
+ } RADEONDDCType;
+ 
+ typedef enum
Index: extra/x11-drivers/xf86-video-ati/03_add_option_for_lvds_mode.diff
diff -u /dev/null extra/x11-drivers/xf86-video-ati/03_add_option_for_lvds_mode.diff:1.1
--- /dev/null	Sat Nov 10 16:04:39 2007
+++ extra/x11-drivers/xf86-video-ati/03_add_option_for_lvds_mode.diff	Sat Nov 10 16:04:39 2007
@@ -0,0 +1,141 @@
+From: Alex Deucher <alex at t41p.hsd1.va.comcast.net>
+Date: Sun, 7 Oct 2007 23:39:47 +0000 (-0400)
+Subject: RADEON: still more LVDS fixes
+X-Git-Url: http://gitweb.freedesktop.org/?p=xorg/driver/xf86-video-ati.git;a=commitdiff;h=051435610a66735fd455bbb526fa294fcfe8c0b6
+
+RADEON: still more LVDS fixes
+
+Seems some laptops need the native mode from the bios for
+LVDS while others seem to prefer a CVT mode.  Add an option
+to pick the preferred mode.  The default it to use the bios
+table timing.
+---
+
+--- a/man/radeon.man
++++ b/man/radeon.man
+@@ -383,6 +383,14 @@ case.  This is only useful for LVDS pane
+ The default is
+ .B on.
+ .TP
++.BI "Option \*qLVDSBiosNativeMode\*q \*q" boolean \*q
++On some laptops, the LVDS mode from the timing tables in the bios does 
++not work properly.  In those cases, a CVT mode seems to work better.  
++If you get a blank screen or have LVDS display problems, disable this 
++option to use a CVT mode.  
++The default is
++.B on.
++.TP
+ .BI "Option \*qDRI\*q \*q" boolean \*q
+ Enable DRI support.  This option allows you to enable to disable the DRI.  
+ The default is
+--- a/src/radeon.h
++++ b/src/radeon.h
+@@ -157,7 +157,8 @@ typedef enum {
+ #if defined(__powerpc__)
+     OPTION_MAC_MODEL,
+ #endif
+-    OPTION_DEFAULT_TMDS_PLL
++    OPTION_DEFAULT_TMDS_PLL,
++    OPTION_LVDS_BIOS_NATIVE_MODE
+ } RADEONOpts;
+ 
+ 
+@@ -816,6 +817,8 @@ typedef struct {
+     RADEONMacModel    MacModel;
+ #endif
+ 
++    Bool              LVDSBiosNativeMode;
++
+     Rotation rotation;
+     void (*PointerMoved)(int, int, int);
+     CreateScreenResourcesProcPtr CreateScreenResources;
+--- a/src/radeon_driver.c
++++ b/src/radeon_driver.c
+@@ -190,6 +190,7 @@ static const OptionInfoRec RADEONOptions
+ #if defined(__powerpc__)
+     { OPTION_MAC_MODEL,      "MacModel",         OPTV_STRING,  {0}, FALSE },
+ #endif
++    { OPTION_LVDS_BIOS_NATIVE_MODE, "LVDSBiosNativeMode", OPTV_BOOLEAN, {0}, TRUE },
+     { -1,                    NULL,               OPTV_NONE,    {0}, FALSE }
+ };
+ 
+--- a/src/radeon_modes.c
++++ b/src/radeon_modes.c
+@@ -95,20 +95,45 @@ static DisplayModePtr RADEONTVModes(xf86
+ static DisplayModePtr RADEONFPNativeMode(xf86OutputPtr output)
+ {
+     ScrnInfoPtr pScrn = output->scrn;
++    RADEONInfoPtr info = RADEONPTR(pScrn);
+     RADEONOutputPrivatePtr radeon_output = output->driver_private;
+     DisplayModePtr  new   = NULL;
++    char            stmp[32];
+ 
+     if (radeon_output->PanelXRes != 0 &&
+ 	radeon_output->PanelYRes != 0 &&
+ 	radeon_output->DotClock != 0) {
+ 
+-	/* Add native panel size */
+-	new = xf86CVTMode(radeon_output->PanelXRes, radeon_output->PanelYRes, 60.0, TRUE, FALSE);
++	if (info->LVDSBiosNativeMode) {
++	    new             = xnfcalloc(1, sizeof (DisplayModeRec));
++	    sprintf(stmp, "%dx%d", radeon_output->PanelXRes, radeon_output->PanelYRes);
++	    new->name       = xnfalloc(strlen(stmp) + 1);
++	    strcpy(new->name, stmp);
++	    new->HDisplay   = radeon_output->PanelXRes;
++	    new->VDisplay   = radeon_output->PanelYRes;
++
++	    new->HTotal     = new->HDisplay + radeon_output->HBlank;
++	    new->HSyncStart = new->HDisplay + radeon_output->HOverPlus;
++	    new->HSyncEnd   = new->HSyncStart + radeon_output->HSyncWidth;
++	    new->VTotal     = new->VDisplay + radeon_output->VBlank;
++	    new->VSyncStart = new->VDisplay + radeon_output->VOverPlus;
++	    new->VSyncEnd   = new->VSyncStart + radeon_output->VSyncWidth;
++
++	    new->Clock      = radeon_output->DotClock;
++	    new->Flags      = 0;
++
++	} else {
++	    /* Add native panel size */
++	    new = xf86CVTMode(radeon_output->PanelXRes, radeon_output->PanelYRes, 60.0, FALSE, FALSE);
+ 
+-	new->type       = M_T_DRIVER | M_T_PREFERRED;
++	}
+ 
+-	new->next       = NULL;
+-	new->prev       = NULL;
++	if (new) {
++	    new->type       = M_T_DRIVER | M_T_PREFERRED;
++
++	    new->next       = NULL;
++	    new->prev       = NULL;
++	}
+ 
+ 	xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Added native panel mode: %dx%d\n",
+ 		   radeon_output->PanelXRes, radeon_output->PanelYRes);
+@@ -159,7 +184,7 @@ static void RADEONAddScreenModes(xf86Out
+ 	    }
+ 	}
+ 
+-	new = xf86CVTMode(width, height, 60.0, TRUE, FALSE);
++	new = xf86CVTMode(width, height, 60.0, FALSE, FALSE);
+ 
+ 	new->type      |= M_T_USERDEF;
+ 
+--- a/src/radeon_output.c
++++ b/src/radeon_output.c
+@@ -2440,6 +2440,15 @@ RADEONGetLVDSInfo (xf86OutputPtr output)
+ 	}
+     }
+ 
++    info->LVDSBiosNativeMode = TRUE;
++    if (!xf86ReturnOptValBool(info->Options, OPTION_LVDS_BIOS_NATIVE_MODE, TRUE)) {
++	info->LVDSBiosNativeMode = FALSE;
++	xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Using CVT mode for LVDS\n");
++    } else {
++	xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Using LVDS Native Mode\n");
++    }
++
++
+     /* The panel size we collected from BIOS may not be the
+      * maximum size supported by the panel.  If not, we update
+      * it now.  These will be used if no matching mode can be
Index: extra/x11-drivers/xf86-video-ati/PKGBUILD
diff -u extra/x11-drivers/xf86-video-ati/PKGBUILD:1.27 extra/x11-drivers/xf86-video-ati/PKGBUILD:1.28
--- extra/x11-drivers/xf86-video-ati/PKGBUILD:1.27	Fri Nov  9 08:53:19 2007
+++ extra/x11-drivers/xf86-video-ati/PKGBUILD	Sat Nov 10 16:04:39 2007
@@ -1,9 +1,9 @@
-# $Id: PKGBUILD,v 1.27 2007/11/09 13:53:19 alexander Exp $
+# $Id: PKGBUILD,v 1.28 2007/11/10 21:04:39 alexander Exp $
 # Maintainer: Alexander Baldeck <alexander at archlinux.org>
 # Contributor: Jan de Groot <jgc at archlinux.org>
 pkgname=xf86-video-ati
 pkgver=6.7.195
-pkgrel=2.1
+pkgrel=3
 _mesaver="7.0.1"
 pkgdesc="X.org ati video driver"
 arch=(i686 x86_64)
@@ -17,13 +17,15 @@
 	http://dl.sourceforge.net/mesa3d/MesaLib-${_mesaver}.tar.bz2
 	radeon-dualhead-mouse.patch
 	01_gen_pci_ids.diff
-	02_add_option_for_lvds_mode.diff)
+	02_add_ddc_type_6.diff
+	03_add_option_for_lvds_mode.diff)
 
 build() {
   cd ${startdir}/src/${pkgname}-${pkgver}
   patch -Np1 -i ${startdir}/src/radeon-dualhead-mouse.patch || return 1
   patch -Np1 -i ${startdir}/src/01_gen_pci_ids.diff || return 1
-  patch -Np1 -i ${startdir}/src/02_add_option_for_lvds_mode.diff || return 1
+  patch -Np1 -i ${startdir}/src/02_add_ddc_type_6.diff || return 1 
+  patch -Np1 -i ${startdir}/src/03_add_option_for_lvds_mode.diff || return 1
   ./configure --prefix=/usr \
               --enable-dri
   make || return 1
@@ -59,4 +61,5 @@
          'c056abd763e899114bf745c9eedbf9ad'
          '7d3d5de7effe85120076f86e4d28a242'
          '3dce80ebe3d814b1a6a54ee85357622a'
+         'a89c444fcd0df0aaf70fdb5a07738d55'
          '712dd9988e181e56fca67841888bfbee')




More information about the arch-commits mailing list