xf86-video-ati: Branch 'master'
Alex Deucher
agd5f at kemper.freedesktop.org
Mon Dec 1 15:52:12 PST 2008
src/radeon_atombios.c | 4 ++--
src/radeon_bios.c | 19 +++++++++++++++++--
src/radeon_output.c | 34 ++++++++++++++++++++++++----------
src/radeon_probe.h | 1 +
4 files changed, 44 insertions(+), 14 deletions(-)
New commits:
commit 6e0c48958c6a50a639368e369ce72d813256aee4
Author: Alex Deucher <alexdeucher at gmail.com>
Date: Mon Dec 1 18:50:40 2008 -0500
Add quirk for r200 card with the primary dac wired to both ports
refactor load detection setup as a byproduct
should fix bug 18719
diff --git a/src/radeon_atombios.c b/src/radeon_atombios.c
index 3dfca17..169e31b 100644
--- a/src/radeon_atombios.c
+++ b/src/radeon_atombios.c
@@ -1946,6 +1946,7 @@ RADEONGetATOMConnectorInfoFromBIOSConnectorTable (ScrnInfoPtr pScrn)
#endif
info->BiosConnector[i].valid = TRUE;
+ info->BiosConnector[i].load_detection = TRUE;
info->BiosConnector[i].shared_ddc = FALSE;
info->BiosConnector[i].output_id = ci.sucI2cId.sbfAccess.bfI2C_LineMux;
info->BiosConnector[i].devices = (1 << i);
@@ -2018,9 +2019,8 @@ RADEONGetATOMConnectorInfoFromBIOSConnectorTable (ScrnInfoPtr pScrn)
info->BiosConnector[i].hpd_mask = 0;
break;
}
- } else {
+ } else
info->BiosConnector[i].hpd_mask = 0;
- }
RADEONApplyATOMQuirks(pScrn, i);
diff --git a/src/radeon_bios.c b/src/radeon_bios.c
index 3e3613a..37954d3 100644
--- a/src/radeon_bios.c
+++ b/src/radeon_bios.c
@@ -507,6 +507,16 @@ static void RADEONApplyLegacyQuirks(ScrnInfoPtr pScrn, int index)
}
}
+ /* r200 card with primary dac routed to both VGA and DVI - disable load detection
+ * otherwise you end up detecing load if either port is attached
+ */
+ if (info->Chipset == PCI_CHIP_R200_QL &&
+ PCI_SUB_VENDOR_ID(info->PciInfo) == 0x1569 &&
+ PCI_SUB_DEVICE_ID(info->PciInfo) == 0x514c &&
+ info->BiosConnector[index].DACType == DAC_PRIMARY) {
+ info->BiosConnector[index].load_detection = FALSE;
+ }
+
}
static Bool RADEONGetLegacyConnectorInfoFromBIOS (ScrnInfoPtr pScrn)
@@ -586,6 +596,11 @@ static Bool RADEONGetLegacyConnectorInfoFromBIOS (ScrnInfoPtr pScrn)
else
info->BiosConnector[i].TMDSType = TMDS_INT;
+ if (info->BiosConnector[i].DACType == DAC_TVDAC)
+ info->BiosConnector[i].load_detection = FALSE;
+ else
+ info->BiosConnector[i].load_detection = TRUE;
+
RADEONApplyLegacyQuirks(pScrn, i);
}
@@ -668,9 +683,8 @@ static Bool RADEONGetLegacyConnectorInfoFromBIOS (ScrnInfoPtr pScrn)
xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "LCD DDC Info Table found!\n");
}
}
- } else {
+ } else
info->BiosConnector[4].ddc_i2c.valid = FALSE;
- }
}
}
@@ -683,6 +697,7 @@ static Bool RADEONGetLegacyConnectorInfoFromBIOS (ScrnInfoPtr pScrn)
/* assume s-video for now */
info->BiosConnector[5].ConnectorType = CONNECTOR_STV;
info->BiosConnector[5].DACType = DAC_TVDAC;
+ info->BiosConnector[5].load_detection = FALSE;
info->BiosConnector[5].TMDSType = TMDS_NONE;
info->BiosConnector[5].ddc_i2c.valid = FALSE;
}
diff --git a/src/radeon_output.c b/src/radeon_output.c
index 035f2b8..41cbd6d 100644
--- a/src/radeon_output.c
+++ b/src/radeon_output.c
@@ -2174,17 +2174,9 @@ void RADEONInitConnector(xf86OutputPtr output)
RADEONInfoPtr info = RADEONPTR(pScrn);
RADEONOutputPrivatePtr radeon_output = output->driver_private;
- if (info->IsAtomBios &&
- ((radeon_output->DACType == DAC_PRIMARY) ||
- (radeon_output->DACType == DAC_TVDAC)))
+ if ((radeon_output->DACType == DAC_TVDAC) &&
+ xf86ReturnOptValBool(info->Options, OPTION_TVDAC_LOAD_DETECT, FALSE))
radeon_output->load_detection = 1;
- else if (radeon_output->DACType == DAC_PRIMARY)
- radeon_output->load_detection = 1; /* primary dac, only drives vga */
- else if ((radeon_output->DACType == DAC_TVDAC) &&
- (xf86ReturnOptValBool(info->Options, OPTION_TVDAC_LOAD_DETECT, FALSE)))
- radeon_output->load_detection = 1; /* shared tvdac between vga/dvi/tv */
- else
- radeon_output->load_detection = 0;
if (radeon_output->type == OUTPUT_LVDS) {
radeon_output->rmx_type = RMX_FULL;
@@ -2247,12 +2239,14 @@ static Bool RADEONSetupAppleConnectors(ScrnInfoPtr pScrn)
info->BiosConnector[1].ddc_i2c = legacy_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
info->BiosConnector[1].DACType = DAC_TVDAC;
+ info->BiosConnector[1].load_detection = FALSE;
info->BiosConnector[1].TMDSType = TMDS_NONE;
info->BiosConnector[1].ConnectorType = CONNECTOR_VGA;
info->BiosConnector[1].valid = TRUE;
info->BiosConnector[2].ConnectorType = CONNECTOR_STV;
info->BiosConnector[2].DACType = DAC_TVDAC;
+ info->BiosConnector[2].load_detection = FALSE;
info->BiosConnector[2].TMDSType = TMDS_NONE;
info->BiosConnector[2].ddc_i2c.valid = FALSE;
info->BiosConnector[2].valid = TRUE;
@@ -2272,6 +2266,7 @@ static Bool RADEONSetupAppleConnectors(ScrnInfoPtr pScrn)
info->BiosConnector[2].ConnectorType = CONNECTOR_STV;
info->BiosConnector[2].DACType = DAC_TVDAC;
+ info->BiosConnector[2].load_detection = FALSE;
info->BiosConnector[2].TMDSType = TMDS_NONE;
info->BiosConnector[2].ddc_i2c.valid = FALSE;
info->BiosConnector[2].valid = TRUE;
@@ -2292,6 +2287,7 @@ static Bool RADEONSetupAppleConnectors(ScrnInfoPtr pScrn)
info->BiosConnector[2].ConnectorType = CONNECTOR_STV;
info->BiosConnector[2].DACType = DAC_TVDAC;
+ info->BiosConnector[2].load_detection = FALSE;
info->BiosConnector[2].TMDSType = TMDS_NONE;
info->BiosConnector[2].ddc_i2c.valid = FALSE;
info->BiosConnector[2].valid = TRUE;
@@ -2311,6 +2307,7 @@ static Bool RADEONSetupAppleConnectors(ScrnInfoPtr pScrn)
info->BiosConnector[2].ConnectorType = CONNECTOR_STV;
info->BiosConnector[2].DACType = DAC_TVDAC;
+ info->BiosConnector[2].load_detection = FALSE;
info->BiosConnector[2].TMDSType = TMDS_NONE;
info->BiosConnector[2].ddc_i2c.valid = FALSE;
info->BiosConnector[2].valid = TRUE;
@@ -2318,12 +2315,14 @@ static Bool RADEONSetupAppleConnectors(ScrnInfoPtr pScrn)
case RADEON_MAC_MINI_EXTERNAL:
info->BiosConnector[0].ddc_i2c = legacy_setup_i2c_bus(RADEON_GPIO_CRT2_DDC);
info->BiosConnector[0].DACType = DAC_TVDAC;
+ info->BiosConnector[0].load_detection = FALSE;
info->BiosConnector[0].TMDSType = TMDS_EXT;
info->BiosConnector[0].ConnectorType = CONNECTOR_DVI_I;
info->BiosConnector[0].valid = TRUE;
info->BiosConnector[1].ConnectorType = CONNECTOR_STV;
info->BiosConnector[1].DACType = DAC_TVDAC;
+ info->BiosConnector[1].load_detection = FALSE;
info->BiosConnector[1].TMDSType = TMDS_NONE;
info->BiosConnector[1].ddc_i2c.valid = FALSE;
info->BiosConnector[1].valid = TRUE;
@@ -2331,12 +2330,14 @@ static Bool RADEONSetupAppleConnectors(ScrnInfoPtr pScrn)
case RADEON_MAC_MINI_INTERNAL:
info->BiosConnector[0].ddc_i2c = legacy_setup_i2c_bus(RADEON_GPIO_CRT2_DDC);
info->BiosConnector[0].DACType = DAC_TVDAC;
+ info->BiosConnector[0].load_detection = FALSE;
info->BiosConnector[0].TMDSType = TMDS_INT;
info->BiosConnector[0].ConnectorType = CONNECTOR_DVI_I;
info->BiosConnector[0].valid = TRUE;
info->BiosConnector[1].ConnectorType = CONNECTOR_STV;
info->BiosConnector[1].DACType = DAC_TVDAC;
+ info->BiosConnector[1].load_detection = FALSE;
info->BiosConnector[1].TMDSType = TMDS_NONE;
info->BiosConnector[1].ddc_i2c.valid = FALSE;
info->BiosConnector[1].valid = TRUE;
@@ -2350,12 +2351,14 @@ static Bool RADEONSetupAppleConnectors(ScrnInfoPtr pScrn)
info->BiosConnector[1].ddc_i2c = legacy_setup_i2c_bus(RADEON_GPIO_DVI_DDC);
info->BiosConnector[1].DACType = DAC_TVDAC;
+ info->BiosConnector[1].load_detection = FALSE;
info->BiosConnector[1].TMDSType = TMDS_NONE;
info->BiosConnector[1].ConnectorType = CONNECTOR_VGA;
info->BiosConnector[1].valid = TRUE;
info->BiosConnector[2].ConnectorType = CONNECTOR_STV;
info->BiosConnector[2].DACType = DAC_TVDAC;
+ info->BiosConnector[2].load_detection = FALSE;
info->BiosConnector[2].TMDSType = TMDS_NONE;
info->BiosConnector[2].ddc_i2c.valid = FALSE;
info->BiosConnector[2].valid = TRUE;
@@ -2436,6 +2439,7 @@ static void RADEONSetupGenericConnectors(ScrnInfoPtr pScrn)
else
info->BiosConnector[1].ddc_i2c = legacy_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
info->BiosConnector[1].DACType = DAC_TVDAC;
+ info->BiosConnector[1].load_detection = FALSE;
info->BiosConnector[1].TMDSType = TMDS_NONE;
info->BiosConnector[1].ConnectorType = CONNECTOR_VGA;
info->BiosConnector[1].valid = TRUE;
@@ -2465,6 +2469,7 @@ static void RADEONSetupGenericConnectors(ScrnInfoPtr pScrn)
else
info->BiosConnector[0].ddc_i2c = legacy_setup_i2c_bus(RADEON_GPIO_VGA_DDC);
info->BiosConnector[0].DACType = DAC_TVDAC;
+ info->BiosConnector[0].load_detection = FALSE;
info->BiosConnector[0].TMDSType = TMDS_NONE;
info->BiosConnector[0].ConnectorType = CONNECTOR_VGA;
info->BiosConnector[0].valid = TRUE;
@@ -2480,6 +2485,7 @@ static void RADEONSetupGenericConnectors(ScrnInfoPtr pScrn)
} else {
info->BiosConnector[0].ddc_i2c = legacy_setup_i2c_bus(RADEON_GPIO_DVI_DDC);
info->BiosConnector[0].DACType = DAC_TVDAC;
+ info->BiosConnector[0].load_detection = FALSE;
info->BiosConnector[0].TMDSType = TMDS_INT;
info->BiosConnector[0].ConnectorType = CONNECTOR_DVI_I;
info->BiosConnector[0].valid = TRUE;
@@ -2503,6 +2509,7 @@ static void RADEONSetupGenericConnectors(ScrnInfoPtr pScrn)
if (info->InternalTVOut) {
info->BiosConnector[2].ConnectorType = CONNECTOR_STV;
info->BiosConnector[2].DACType = DAC_TVDAC;
+ info->BiosConnector[2].load_detection = FALSE;
info->BiosConnector[2].TMDSType = TMDS_NONE;
info->BiosConnector[2].ddc_i2c.valid = FALSE;
info->BiosConnector[2].valid = TRUE;
@@ -2689,6 +2696,7 @@ Bool RADEONSetupConnectors(ScrnInfoPtr pScrn)
*/
for (i = 0; i < RADEON_MAX_BIOS_CONNECTOR; i++) {
info->BiosConnector[i].valid = FALSE;
+ info->BiosConnector[i].load_detection = TRUE;
info->BiosConnector[i].shared_ddc = FALSE;
info->BiosConnector[i].ddc_i2c.valid = FALSE;
info->BiosConnector[i].DACType = DAC_NONE;
@@ -2765,6 +2773,11 @@ Bool RADEONSetupConnectors(ScrnInfoPtr pScrn)
return FALSE;
}
+ if (info->BiosConnector[0].DACType == DAC_TVDAC)
+ info->BiosConnector[0].load_detection = FALSE;
+ if (info->BiosConnector[1].DACType == DAC_TVDAC)
+ info->BiosConnector[1].load_detection = FALSE;
+
info->BiosConnector[0].ddc_i2c = legacy_setup_i2c_bus(ddc_line[0]);
info->BiosConnector[1].ddc_i2c = legacy_setup_i2c_bus(ddc_line[1]);
}
@@ -2814,6 +2827,7 @@ Bool RADEONSetupConnectors(ScrnInfoPtr pScrn)
radeon_output->ddc_i2c = info->BiosConnector[i].ddc_i2c;
radeon_output->igp_lane_info = info->BiosConnector[i].igp_lane_info;
radeon_output->shared_ddc = info->BiosConnector[i].shared_ddc;
+ radeon_output->load_detection = info->BiosConnector[i].load_detection;
if (radeon_output->ConnectorType == CONNECTOR_DVI_D)
radeon_output->DACType = DAC_NONE;
diff --git a/src/radeon_probe.h b/src/radeon_probe.h
index a971a31..8c6845f 100644
--- a/src/radeon_probe.h
+++ b/src/radeon_probe.h
@@ -210,6 +210,7 @@ typedef struct {
int igp_lane_info;
Bool shared_ddc;
int i2c_line_mux;
+ Bool load_detection;
} RADEONBIOSConnector;
typedef struct _RADEONOutputPrivateRec {
More information about the xorg-commit
mailing list