ChangeLog | 25 ++++++++++++++ debian/changelog | 8 ++++ man/radeon.man | 8 ++++ src/Makefile.am | 22 ++++++------- src/Makefile.in | 87 +++++++++++++++++++++------------------------------- 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 11 files changed, 153 insertions(+), 74 deletions(-)
New commits: commit d832096cd70b61f29f5b790092f394c38091abc5 Author: Brice Goglin <[EMAIL PROTECTED]> Date: Tue Oct 9 18:37:10 2007 +0200 New upstream snapshot diff --git a/ChangeLog b/ChangeLog index 4e945d3..d30f388 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,28 @@ +commit ddec5783103045084a66a34d71326cc6e4a3f598 +Author: George Sapountzis <[EMAIL PROTECTED]> +Date: Tue Oct 9 13:27:27 2007 +0300 + + theatre compiles with pci-rework. + +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. + +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 + commit 83d7506a603889b6c18736cff9b2cd3296c95c84 Author: Alex Deucher <[EMAIL PROTECTED](none)> Date: Fri Oct 5 20:25:04 2007 -0400 diff --git a/debian/changelog b/debian/changelog index 098eb43..e0d5836 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +xserver-xorg-video-ati (1:6.7.195-2) experimental; urgency=low + + * New upstream snapshot, + based on commit ddec5783103045084a66a34d71326cc6e4a3f598 + + Fixes some LVDS issues, closes: #445746. + + -- Brice Goglin <[EMAIL PROTECTED]> Tue, 09 Oct 2007 18:27:22 +0200 + xserver-xorg-video-ati (1:6.7.195-1) experimental; urgency=low * New upstream release candidate. diff --git a/src/Makefile.in b/src/Makefile.in index c298884..a68ef76 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -160,39 +160,26 @@ radeon_drv_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(radeon_drv_la_LDFLAGS) $(LDFLAGS) -o $@ theatre200_drv_la_LIBADD = -am__theatre200_drv_la_SOURCES_DIST = theatre200.c theatre200_module.c [EMAIL PROTECTED]@am_theatre200_drv_la_OBJECTS = \ [EMAIL PROTECTED]@ theatre200_drv_la-theatre200.lo \ [EMAIL PROTECTED]@ theatre200_drv_la-theatre200_module.lo +am_theatre200_drv_la_OBJECTS = theatre200_drv_la-theatre200.lo \ + theatre200_drv_la-theatre200_module.lo theatre200_drv_la_OBJECTS = $(am_theatre200_drv_la_OBJECTS) theatre200_drv_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(theatre200_drv_la_CFLAGS) $(CFLAGS) \ $(theatre200_drv_la_LDFLAGS) $(LDFLAGS) -o $@ [EMAIL PROTECTED]@am_theatre200_drv_la_rpath = -rpath \ [EMAIL PROTECTED]@ $(theatre200_drv_ladir) theatre_detect_drv_la_LIBADD = -am__theatre_detect_drv_la_SOURCES_DIST = theatre_detect.c \ - theatre_detect_module.c [EMAIL PROTECTED]@am_theatre_detect_drv_la_OBJECTS = \ [EMAIL PROTECTED]@ theatre_detect.lo \ [EMAIL PROTECTED]@ theatre_detect_module.lo +am_theatre_detect_drv_la_OBJECTS = theatre_detect.lo \ + theatre_detect_module.lo theatre_detect_drv_la_OBJECTS = $(am_theatre_detect_drv_la_OBJECTS) theatre_detect_drv_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(theatre_detect_drv_la_LDFLAGS) $(LDFLAGS) -o $@ [EMAIL PROTECTED]@am_theatre_detect_drv_la_rpath = -rpath \ [EMAIL PROTECTED]@ $(theatre_detect_drv_ladir) theatre_drv_la_LIBADD = -am__theatre_drv_la_SOURCES_DIST = theatre.c theatre_module.c [EMAIL PROTECTED]@am_theatre_drv_la_OBJECTS = theatre.lo \ [EMAIL PROTECTED]@ theatre_module.lo +am_theatre_drv_la_OBJECTS = theatre.lo theatre_module.lo theatre_drv_la_OBJECTS = $(am_theatre_drv_la_OBJECTS) theatre_drv_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(theatre_drv_la_LDFLAGS) $(LDFLAGS) -o $@ [EMAIL PROTECTED]@am_theatre_drv_la_rpath = -rpath \ [EMAIL PROTECTED]@ $(theatre_drv_ladir) DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles @@ -212,10 +199,8 @@ SOURCES = $(ati_drv_la_SOURCES) $(atimisc_drv_la_SOURCES) \ DIST_SOURCES = $(ati_drv_la_SOURCES) \ $(am__atimisc_drv_la_SOURCES_DIST) \ $(am__r128_drv_la_SOURCES_DIST) \ - $(am__radeon_drv_la_SOURCES_DIST) \ - $(am__theatre200_drv_la_SOURCES_DIST) \ - $(am__theatre_detect_drv_la_SOURCES_DIST) \ - $(am__theatre_drv_la_SOURCES_DIST) + $(am__radeon_drv_la_SOURCES_DIST) $(theatre200_drv_la_SOURCES) \ + $(theatre_detect_drv_la_SOURCES) $(theatre_drv_la_SOURCES) pcidataDATA_INSTALL = $(INSTALL_DATA) DATA = $(pcidata_DATA) ETAGS = etags @@ -382,6 +367,15 @@ atimisc_drv_la_SOURCES = \ atiload.c atimisc.c atimach64probe.c $(ATIMISC_CPIO_SOURCES) \ $(ATIMISC_DGA_SOURCES) $(ATIMISC_DRI_SRCS) $(ATIMISC_EXA_SOURCES) + +# r128 has not been ported yet [EMAIL PROTECTED]@r128_drv_la_LTLIBRARIES = r128_drv.la [EMAIL PROTECTED]@r128_drv_la_LDFLAGS = -module -avoid-version [EMAIL PROTECTED]@r128_drv_ladir = @moduledir@/drivers [EMAIL PROTECTED]@r128_drv_la_SOURCES = \ [EMAIL PROTECTED]@ r128_accel.c r128_cursor.c r128_dga.c r128_driver.c \ [EMAIL PROTECTED]@ r128_video.c r128_misc.c r128_probe.c $(R128_DRI_SRCS) + radeon_drv_la_LTLIBRARIES = radeon_drv.la radeon_drv_la_LDFLAGS = -module -avoid-version radeon_drv_ladir = @moduledir@/drivers @@ -392,35 +386,26 @@ radeon_drv_la_SOURCES = \ radeon_crtc.c radeon_output.c radeon_modes.c radeon_tv.c \ $(RADEON_DRI_SRCS) $(RADEON_EXA_SOURCES) +theatre_detect_drv_la_LTLIBRARIES = theatre_detect_drv.la +theatre_detect_drv_la_LDFLAGS = -module -avoid-version +theatre_detect_drv_ladir = @moduledir@/multimedia +theatre_detect_drv_la_SOURCES = \ + theatre_detect.c theatre_detect_module.c -# r128 and theatre have not been ported yet [EMAIL PROTECTED]@r128_drv_la_LTLIBRARIES = r128_drv.la [EMAIL PROTECTED]@r128_drv_la_LDFLAGS = -module -avoid-version [EMAIL PROTECTED]@r128_drv_ladir = @moduledir@/drivers [EMAIL PROTECTED]@r128_drv_la_SOURCES = \ [EMAIL PROTECTED]@ r128_accel.c r128_cursor.c r128_dga.c r128_driver.c \ [EMAIL PROTECTED]@ r128_video.c r128_misc.c r128_probe.c $(R128_DRI_SRCS) - [EMAIL PROTECTED]@theatre_detect_drv_la_LTLIBRARIES = theatre_detect_drv.la [EMAIL PROTECTED]@theatre_detect_drv_la_LDFLAGS = -module -avoid-version [EMAIL PROTECTED]@theatre_detect_drv_ladir = @moduledir@/multimedia [EMAIL PROTECTED]@theatre_detect_drv_la_SOURCES = \ [EMAIL PROTECTED]@ theatre_detect.c theatre_detect_module.c - [EMAIL PROTECTED]@theatre_drv_la_LTLIBRARIES = theatre_drv.la [EMAIL PROTECTED]@theatre_drv_la_LDFLAGS = -module -avoid-version [EMAIL PROTECTED]@theatre_drv_ladir = @moduledir@/multimedia [EMAIL PROTECTED]@theatre_drv_la_SOURCES = \ [EMAIL PROTECTED]@ theatre.c theatre_module.c +theatre_drv_la_LTLIBRARIES = theatre_drv.la +theatre_drv_la_LDFLAGS = -module -avoid-version +theatre_drv_ladir = @moduledir@/multimedia +theatre_drv_la_SOURCES = \ + theatre.c theatre_module.c [EMAIL PROTECTED]@theatre200_drv_la_LTLIBRARIES = theatre200_drv.la [EMAIL PROTECTED]@theatre200_drv_la_LDFLAGS = -module -avoid-version [EMAIL PROTECTED]@theatre200_drv_ladir = @moduledir@/multimedia [EMAIL PROTECTED]@theatre200_drv_la_CFLAGS = \ [EMAIL PROTECTED]@ $(AM_CFLAGS) -DMICROC_DIR=\"$(theatre200_drv_ladir)\" +theatre200_drv_la_LTLIBRARIES = theatre200_drv.la +theatre200_drv_la_LDFLAGS = -module -avoid-version +theatre200_drv_ladir = @moduledir@/multimedia +theatre200_drv_la_CFLAGS = \ + $(AM_CFLAGS) -DMICROC_DIR=\"$(theatre200_drv_ladir)\" [EMAIL PROTECTED]@theatre200_drv_la_SOURCES = \ [EMAIL PROTECTED]@ theatre200.c theatre200_module.c +theatre200_drv_la_SOURCES = \ + theatre200.c theatre200_module.c EXTRA_DIST = \ atimach64render.c \ @@ -740,11 +725,11 @@ r128_drv.la: $(r128_drv_la_OBJECTS) $(r128_drv_la_DEPENDENCIES) radeon_drv.la: $(radeon_drv_la_OBJECTS) $(radeon_drv_la_DEPENDENCIES) $(radeon_drv_la_LINK) -rpath $(radeon_drv_ladir) $(radeon_drv_la_OBJECTS) $(radeon_drv_la_LIBADD) $(LIBS) theatre200_drv.la: $(theatre200_drv_la_OBJECTS) $(theatre200_drv_la_DEPENDENCIES) - $(theatre200_drv_la_LINK) $(am_theatre200_drv_la_rpath) $(theatre200_drv_la_OBJECTS) $(theatre200_drv_la_LIBADD) $(LIBS) + $(theatre200_drv_la_LINK) -rpath $(theatre200_drv_ladir) $(theatre200_drv_la_OBJECTS) $(theatre200_drv_la_LIBADD) $(LIBS) theatre_detect_drv.la: $(theatre_detect_drv_la_OBJECTS) $(theatre_detect_drv_la_DEPENDENCIES) - $(theatre_detect_drv_la_LINK) $(am_theatre_detect_drv_la_rpath) $(theatre_detect_drv_la_OBJECTS) $(theatre_detect_drv_la_LIBADD) $(LIBS) + $(theatre_detect_drv_la_LINK) -rpath $(theatre_detect_drv_ladir) $(theatre_detect_drv_la_OBJECTS) $(theatre_detect_drv_la_LIBADD) $(LIBS) theatre_drv.la: $(theatre_drv_la_OBJECTS) $(theatre_drv_la_DEPENDENCIES) - $(theatre_drv_la_LINK) $(am_theatre_drv_la_rpath) $(theatre_drv_la_OBJECTS) $(theatre_drv_la_LIBADD) $(LIBS) + $(theatre_drv_la_LINK) -rpath $(theatre_drv_ladir) $(theatre_drv_la_OBJECTS) $(theatre_drv_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) 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]