xserver-xorg-video-ati: Changes to 'debian-experimental'
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 <bgoglin@debian.org>
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 <gsap7@yahoo.gr>
+Date: Tue Oct 9 13:27:27 2007 +0300
+
+ theatre compiles with pci-rework.
+
+commit 051435610a66735fd455bbb526fa294fcfe8c0b6
+Author: Alex Deucher <alex@t41p.hsd1.va.comcast.net>
+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 <airlied@linux.ie>
+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 <alex@botch2.(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 <bgoglin@debian.org> 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
-@XSERVER_LIBPCIACCESS_FALSE@am_theatre200_drv_la_OBJECTS = \
-@XSERVER_LIBPCIACCESS_FALSE@ theatre200_drv_la-theatre200.lo \
-@XSERVER_LIBPCIACCESS_FALSE@ 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 $@
-@XSERVER_LIBPCIACCESS_FALSE@am_theatre200_drv_la_rpath = -rpath \
-@XSERVER_LIBPCIACCESS_FALSE@ $(theatre200_drv_ladir)
theatre_detect_drv_la_LIBADD =
-am__theatre_detect_drv_la_SOURCES_DIST = theatre_detect.c \
- theatre_detect_module.c
-@XSERVER_LIBPCIACCESS_FALSE@am_theatre_detect_drv_la_OBJECTS = \
-@XSERVER_LIBPCIACCESS_FALSE@ theatre_detect.lo \
-@XSERVER_LIBPCIACCESS_FALSE@ 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 $@
-@XSERVER_LIBPCIACCESS_FALSE@am_theatre_detect_drv_la_rpath = -rpath \
-@XSERVER_LIBPCIACCESS_FALSE@ $(theatre_detect_drv_ladir)
theatre_drv_la_LIBADD =
-am__theatre_drv_la_SOURCES_DIST = theatre.c theatre_module.c
-@XSERVER_LIBPCIACCESS_FALSE@am_theatre_drv_la_OBJECTS = theatre.lo \
-@XSERVER_LIBPCIACCESS_FALSE@ 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 $@
-@XSERVER_LIBPCIACCESS_FALSE@am_theatre_drv_la_rpath = -rpath \
-@XSERVER_LIBPCIACCESS_FALSE@ $(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
+@XSERVER_LIBPCIACCESS_FALSE@r128_drv_la_LTLIBRARIES = r128_drv.la
+@XSERVER_LIBPCIACCESS_FALSE@r128_drv_la_LDFLAGS = -module -avoid-version
+@XSERVER_LIBPCIACCESS_FALSE@r128_drv_ladir = @moduledir@/drivers
+@XSERVER_LIBPCIACCESS_FALSE@r128_drv_la_SOURCES = \
+@XSERVER_LIBPCIACCESS_FALSE@ r128_accel.c r128_cursor.c r128_dga.c r128_driver.c \
+@XSERVER_LIBPCIACCESS_FALSE@ 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
-@XSERVER_LIBPCIACCESS_FALSE@r128_drv_la_LTLIBRARIES = r128_drv.la
-@XSERVER_LIBPCIACCESS_FALSE@r128_drv_la_LDFLAGS = -module -avoid-version
-@XSERVER_LIBPCIACCESS_FALSE@r128_drv_ladir = @moduledir@/drivers
-@XSERVER_LIBPCIACCESS_FALSE@r128_drv_la_SOURCES = \
-@XSERVER_LIBPCIACCESS_FALSE@ r128_accel.c r128_cursor.c r128_dga.c r128_driver.c \
-@XSERVER_LIBPCIACCESS_FALSE@ r128_video.c r128_misc.c r128_probe.c $(R128_DRI_SRCS)
-
-@XSERVER_LIBPCIACCESS_FALSE@theatre_detect_drv_la_LTLIBRARIES = theatre_detect_drv.la
-@XSERVER_LIBPCIACCESS_FALSE@theatre_detect_drv_la_LDFLAGS = -module -avoid-version
-@XSERVER_LIBPCIACCESS_FALSE@theatre_detect_drv_ladir = @moduledir@/multimedia
-@XSERVER_LIBPCIACCESS_FALSE@theatre_detect_drv_la_SOURCES = \
-@XSERVER_LIBPCIACCESS_FALSE@ theatre_detect.c theatre_detect_module.c
-
-@XSERVER_LIBPCIACCESS_FALSE@theatre_drv_la_LTLIBRARIES = theatre_drv.la
-@XSERVER_LIBPCIACCESS_FALSE@theatre_drv_la_LDFLAGS = -module -avoid-version
-@XSERVER_LIBPCIACCESS_FALSE@theatre_drv_ladir = @moduledir@/multimedia
-@XSERVER_LIBPCIACCESS_FALSE@theatre_drv_la_SOURCES = \
-@XSERVER_LIBPCIACCESS_FALSE@ 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
-@XSERVER_LIBPCIACCESS_FALSE@theatre200_drv_la_LTLIBRARIES = theatre200_drv.la
-@XSERVER_LIBPCIACCESS_FALSE@theatre200_drv_la_LDFLAGS = -module -avoid-version
-@XSERVER_LIBPCIACCESS_FALSE@theatre200_drv_ladir = @moduledir@/multimedia
-@XSERVER_LIBPCIACCESS_FALSE@theatre200_drv_la_CFLAGS = \
-@XSERVER_LIBPCIACCESS_FALSE@ $(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)\"
-@XSERVER_LIBPCIACCESS_FALSE@theatre200_drv_la_SOURCES = \
-@XSERVER_LIBPCIACCESS_FALSE@ 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 <gsap7@yahoo.gr>
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 <alex@t41p.hsd1.va.comcast.net>
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 <airlied@linux.ie>
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
Reply to: