summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/radeon.h1
-rw-r--r--src/radeon_output.c16
2 files changed, 10 insertions, 7 deletions
diff --git a/src/radeon.h b/src/radeon.h
index 53fb5f7..fa2bccd 100644
--- a/src/radeon.h
+++ b/src/radeon.h
@@ -799,6 +799,7 @@ typedef struct {
Bool crtc2_on;
Bool InternalTVOut;
+ int tvdac_use_count;
Rotation rotation;
void (*PointerMoved)(int, int, int);
diff --git a/src/radeon_output.c b/src/radeon_output.c
index 78f451e..6bd0d95 100644
--- a/src/radeon_output.c
+++ b/src/radeon_output.c
@@ -1637,14 +1637,13 @@ radeon_create_resources(xf86OutputPtr output)
if (err != 0) {
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"RRConfigureOutputProperty error, %d\n", err);
- }
+ }
if (radeon_output->DACType == DAC_PRIMARY)
data = 1; /* primary dac, only drives vga */
else if (radeon_output->DACType == DAC_TVDAC &&
- info->IsMobility &&
- !info->IsIGP)
- data = 1; /* laptops with tv only on tvdac */
+ info->tvdac_use_count < 2)
+ data = 1; /* only one output with tvdac */
else
data = 0; /* shared tvdac between vga/dvi/tv */
@@ -2428,9 +2427,8 @@ void RADEONInitConnector(xf86OutputPtr output)
if (radeon_output->DACType == DAC_PRIMARY)
radeon_output->load_detection = 1; /* primary dac, only drives vga */
else if (radeon_output->DACType == DAC_TVDAC &&
- info->IsMobility &&
- !info->IsIGP)
- radeon_output->load_detection = 1; /* laptops with tv only on tvdac */
+ info->tvdac_use_count < 2)
+ radeon_output->load_detection = 1; /* only one output with tvdac */
else
radeon_output->load_detection = 0; /* shared tvdac between vga/dvi/tv */
@@ -2617,8 +2615,12 @@ Bool RADEONSetupConnectors(ScrnInfoPtr pScrn)
}
}
+ info->tvdac_use_count = 0;
for (i = 0; i < RADEON_MAX_BIOS_CONNECTOR; i++) {
if (info->BiosConnector[i].valid) {
+ if (info->BiosConnector[i].DACType == DAC_TVDAC)
+ info->tvdac_use_count++;
+
if (info->IsAtomBios) {
if ((info->BiosConnector[i].ConnectorType == CONNECTOR_DVI_D_ATOM) ||
(info->BiosConnector[i].ConnectorType == CONNECTOR_DVI_I_ATOM) ||