man/radeon.man      |    8 ++++++++
 src/Makefile.am     |   22 +++++++++++-----------
 src/radeon.h        |    5 ++++-
 src/radeon_bios.c   |    5 ++++-
 src/radeon_driver.c |    1 +
 src/radeon_modes.c  |   37 +++++++++++++++++++++++++++++++------
 src/radeon_output.c |   28 ++++++++++++++++++++++++----
 src/radeon_probe.h  |    1 +
 8 files changed, 84 insertions(+), 23 deletions(-)

New commits:
commit ddec5783103045084a66a34d71326cc6e4a3f598
Author: George Sapountzis <[EMAIL PROTECTED]>
Date:   Tue Oct 9 13:27:27 2007 +0300

    theatre compiles with pci-rework.

diff --git a/src/Makefile.am b/src/Makefile.am
index 1eea432..ff1e225 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -66,6 +66,17 @@ atimisc_drv_la_SOURCES = \
        atiload.c atimisc.c atimach64probe.c $(ATIMISC_CPIO_SOURCES) \
        $(ATIMISC_DGA_SOURCES) $(ATIMISC_DRI_SRCS) $(ATIMISC_EXA_SOURCES)
 
+if XSERVER_LIBPCIACCESS
+# r128 has not been ported yet
+else
+r128_drv_la_LTLIBRARIES = r128_drv.la
+r128_drv_la_LDFLAGS = -module -avoid-version
+r128_drv_ladir = @moduledir@/drivers
+r128_drv_la_SOURCES = \
+       r128_accel.c r128_cursor.c r128_dga.c r128_driver.c \
+       r128_video.c r128_misc.c r128_probe.c $(R128_DRI_SRCS)
+endif
+
 radeon_drv_la_LTLIBRARIES = radeon_drv.la
 radeon_drv_la_LDFLAGS = -module -avoid-version
 radeon_drv_ladir = @moduledir@/drivers
@@ -76,16 +87,6 @@ radeon_drv_la_SOURCES = \
        radeon_crtc.c radeon_output.c radeon_modes.c radeon_tv.c \
        $(RADEON_DRI_SRCS) $(RADEON_EXA_SOURCES)
 
-if XSERVER_LIBPCIACCESS
-# r128 and theatre have not been ported yet
-else
-r128_drv_la_LTLIBRARIES = r128_drv.la
-r128_drv_la_LDFLAGS = -module -avoid-version
-r128_drv_ladir = @moduledir@/drivers
-r128_drv_la_SOURCES = \
-       r128_accel.c r128_cursor.c r128_dga.c r128_driver.c \
-       r128_video.c r128_misc.c r128_probe.c $(R128_DRI_SRCS)
-
 theatre_detect_drv_la_LTLIBRARIES = theatre_detect_drv.la
 theatre_detect_drv_la_LDFLAGS = -module -avoid-version
 theatre_detect_drv_ladir = @moduledir@/multimedia
@@ -106,7 +107,6 @@ theatre200_drv_la_CFLAGS = \
        $(AM_CFLAGS) -DMICROC_DIR=\"$(theatre200_drv_ladir)\"
 theatre200_drv_la_SOURCES = \
        theatre200.c theatre200_module.c
-endif
 
 EXTRA_DIST = \
        atimach64render.c \

commit 051435610a66735fd455bbb526fa294fcfe8c0b6
Author: Alex Deucher <[EMAIL PROTECTED]>
Date:   Sun Oct 7 19:39:47 2007 -0400

    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.

diff --git a/man/radeon.man b/man/radeon.man
index 35dd701..9168254 100644
--- a/man/radeon.man
+++ b/man/radeon.man
@@ -383,6 +383,14 @@ case.  This is only useful for LVDS panels (laptop 
internal panels).
 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
diff --git a/src/radeon.h b/src/radeon.h
index ad94cc5..7248291 100644
--- 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;
diff --git a/src/radeon_driver.c b/src/radeon_driver.c
index 03f531e..ffd48a5 100644
--- 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 }
 };
 
diff --git a/src/radeon_modes.c b/src/radeon_modes.c
index ea2c229..6252ea0 100644
--- a/src/radeon_modes.c
+++ b/src/radeon_modes.c
@@ -95,20 +95,45 @@ static DisplayModePtr RADEONTVModes(xf86OutputPtr output)
 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->type       = M_T_DRIVER | M_T_PREFERRED;
+           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->next       = NULL;
-       new->prev       = NULL;
+           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);
+
+       }
+
+       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(xf86OutputPtr output, 
DisplayModePtr *modeList)
            }
        }
 
-       new = xf86CVTMode(width, height, 60.0, TRUE, FALSE);
+       new = xf86CVTMode(width, height, 60.0, FALSE, FALSE);
 
        new->type      |= M_T_USERDEF;
 
diff --git a/src/radeon_output.c b/src/radeon_output.c
index 8f9135d..0836005 100644
--- 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

commit 0b03a73b7dcb4aa192c42f2a4c842d324c358122
Author: Dave Airlie <[EMAIL PROTECTED]>
Date:   Sat Oct 6 20:11:19 2007 +1000

    radeon: add support for DDC type 6
    
    thanks to arekm on xorg-devel for testing/feedback

diff --git a/src/radeon_bios.c b/src/radeon_bios.c
index 65c2bb0..cb61428 100644
--- a/src/radeon_bios.c
+++ b/src/radeon_bios.c
@@ -176,6 +176,9 @@ static Bool RADEONGetATOMConnectorInfoFromBIOS (ScrnInfoPtr 
pScrn)
                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 RADEONGetLegacyConnectorInfoFromBIOS 
(ScrnInfoPtr pScrn)
                    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);
diff --git a/src/radeon_output.c b/src/radeon_output.c
index a6da78e..8f9135d 100644
--- 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 pScrn, xf86OutputPtr 
output)
     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 pScrn, xf86OutputPtr 
output)
            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, int *Clock, 
int *data)
         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, int Clock, int 
data)
         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 output)
     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;
     }
 
diff --git a/src/radeon_probe.h b/src/radeon_probe.h
index dbd50d7..66ece94 100644
--- 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


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to