diff options
author | Alex Deucher <alexdeucher@gmail.com> | 2009-05-03 13:09:39 -0400 |
---|---|---|
committer | Alex Deucher <alexdeucher@gmail.com> | 2009-05-08 12:26:03 -0400 |
commit | 96667eebd8c7949873d63454746129d270bb36e5 (patch) | |
tree | 6b701e6276ca44a3a2f27a6f070556a7642562dd | |
parent | faa782c7a56de99900c9b3f54714f010ce73dcf3 (diff) |
RS690: gpio/connector fixes
Fixes bug 21521
-rw-r--r-- | src/radeon_atombios.c | 27 |
1 files changed, 10 insertions, 17 deletions
diff --git a/src/radeon_atombios.c b/src/radeon_atombios.c index 1dde10d5..10158a8d 100644 --- a/src/radeon_atombios.c +++ b/src/radeon_atombios.c @@ -1535,19 +1535,6 @@ static void RADEONApplyATOMQuirks(ScrnInfoPtr pScrn, int index) } } - /* Acer board, gpios for DFPs are not off by one */ - if ((info->Chipset == PCI_CHIP_RS690_791E) && - (PCI_SUB_VENDOR_ID(info->PciInfo) == 0x105b) && - (PCI_SUB_DEVICE_ID(info->PciInfo) == 0x0e0b)) { - if (index == ATOM_DEVICE_DFP3_INDEX) { - info->BiosConnector[index].ConnectorType = CONNECTOR_DVI_I; - info->BiosConnector[index].output_id = 0; - info->BiosConnector[index].ddc_i2c = RADEONLookupGPIOLineForDDC(pScrn, 0); - } - if (index == ATOM_DEVICE_DFP2_INDEX) - info->BiosConnector[index].ddc_i2c = RADEONLookupGPIOLineForDDC(pScrn, 1); - } - /* a-bit f-i90hd - ciaranm on #radeonhd - this board has no DVI */ if ((info->Chipset == PCI_CHIP_RS600_7941) && (PCI_SUB_VENDOR_ID(info->PciInfo) == 0x147b) && @@ -2254,12 +2241,14 @@ RADEONGetATOMConnectorInfoFromBIOSConnectorTable (ScrnInfoPtr pScrn) info->BiosConnector[i].ddc_i2c.valid = FALSE; else if ((info->ChipFamily == CHIP_FAMILY_RS690) || (info->ChipFamily == CHIP_FAMILY_RS740)) { - /* IGP DFP ports use non-standard gpio entries */ - if ((i == ATOM_DEVICE_DFP2_INDEX) || (i == ATOM_DEVICE_DFP3_INDEX)) { + /* IGP DFP ports sometimes use non-standard gpio entries */ + if ((i == ATOM_DEVICE_DFP2_INDEX) && (ci.sucI2cId.sbfAccess.bfI2C_LineMux == 2)) info->BiosConnector[i].ddc_i2c = RADEONLookupGPIOLineForDDC(pScrn, ci.sucI2cId.sbfAccess.bfI2C_LineMux + 1); - info->BiosConnector[i].output_id = ci.sucI2cId.sbfAccess.bfI2C_LineMux + 1; - } else + else if ((i == ATOM_DEVICE_DFP3_INDEX) && (ci.sucI2cId.sbfAccess.bfI2C_LineMux == 1)) + info->BiosConnector[i].ddc_i2c = + RADEONLookupGPIOLineForDDC(pScrn, ci.sucI2cId.sbfAccess.bfI2C_LineMux + 1); + else info->BiosConnector[i].ddc_i2c = RADEONLookupGPIOLineForDDC(pScrn, ci.sucI2cId.sbfAccess.bfI2C_LineMux); } else @@ -2318,6 +2307,8 @@ RADEONGetATOMConnectorInfoFromBIOSConnectorTable (ScrnInfoPtr pScrn) ((j == ATOM_DEVICE_CRT1_INDEX) || (j == ATOM_DEVICE_CRT2_INDEX))) { info->BiosConnector[i].devices |= info->BiosConnector[j].devices; + if (info->BiosConnector[i].ConnectorType == CONNECTOR_DVI_D) + info->BiosConnector[i].ConnectorType = CONNECTOR_DVI_I; info->BiosConnector[j].valid = FALSE; } else if (((j == ATOM_DEVICE_DFP1_INDEX) || (j == ATOM_DEVICE_DFP2_INDEX) || @@ -2325,6 +2316,8 @@ RADEONGetATOMConnectorInfoFromBIOSConnectorTable (ScrnInfoPtr pScrn) ((i == ATOM_DEVICE_CRT1_INDEX) || (i == ATOM_DEVICE_CRT2_INDEX))) { info->BiosConnector[j].devices |= info->BiosConnector[i].devices; + if (info->BiosConnector[j].ConnectorType == CONNECTOR_DVI_D) + info->BiosConnector[j].ConnectorType = CONNECTOR_DVI_I; info->BiosConnector[i].valid = FALSE; } else { info->BiosConnector[i].shared_ddc = TRUE; |