diff options
author | Alex Deucher <alex@botch2.(none)> | 2007-11-09 17:11:43 -0500 |
---|---|---|
committer | Alex Deucher <alex@botch2.(none)> | 2007-11-09 17:11:43 -0500 |
commit | 342e3e207efda42ba679731c30dfb9d5e9d5643f (patch) | |
tree | 35f708c9531b42b2e8ac610eb77fd063a2b92d1c /src | |
parent | 8078c299d5941460243944d55051547c1a4d3791 (diff) |
combine outputs based on id
Diffstat (limited to 'src')
-rw-r--r-- | src/radeon_bios.c | 34 | ||||
-rw-r--r-- | src/radeon_output.c | 1 | ||||
-rw-r--r-- | src/radeon_probe.h | 2 |
3 files changed, 24 insertions, 13 deletions
diff --git a/src/radeon_bios.c b/src/radeon_bios.c index 9218079f..342e458b 100644 --- a/src/radeon_bios.c +++ b/src/radeon_bios.c @@ -162,7 +162,7 @@ Bool RADEONGetBIOSInfo(ScrnInfoPtr pScrn, xf86Int10InfoPtr pInt10) static Bool RADEONGetATOMConnectorInfoFromBIOS (ScrnInfoPtr pScrn) { RADEONInfoPtr info = RADEONPTR (pScrn); - int offset, i, tmp, tmp0, crtc, portinfo, gpio; + int offset, i, j, tmp, tmp0, id, portinfo, gpio; if (!info->VBIOS) return FALSE; @@ -176,10 +176,11 @@ static Bool RADEONGetATOMConnectorInfoFromBIOS (ScrnInfoPtr pScrn) portinfo = RADEON_BIOS16(offset + 6 + i * 2); info->BiosConnector[i].DACType = (portinfo & 0xf) - 1; info->BiosConnector[i].ConnectorType = (portinfo >> 4) & 0xf; - crtc = (portinfo >> 8) & 0xf; + id = (portinfo >> 8) & 0xf; tmp0 = RADEON_BIOS16(info->MasterDataStart + 24); - gpio = RADEON_BIOS16(tmp0 + 4 + 27 * crtc) * 4; + gpio = RADEON_BIOS16(tmp0 + 4 + 27 * id) * 4; info->BiosConnector[i].gpio = gpio; + info->BiosConnector[i].output_id = id; switch(gpio) { case RADEON_GPIO_MONID: @@ -221,18 +222,25 @@ static Bool RADEONGetATOMConnectorInfoFromBIOS (ScrnInfoPtr pScrn) return FALSE; } - /* DVI-I ports have 2 entries: one for analog, one for digital. combine them */ - if (info->BiosConnector[0].valid && info->BiosConnector[7].valid) { - info->BiosConnector[7].DACType = info->BiosConnector[0].DACType; - info->BiosConnector[0].valid = FALSE; - } - - if (info->BiosConnector[4].valid && info->BiosConnector[3].valid) { - info->BiosConnector[3].DACType = info->BiosConnector[4].DACType; - info->BiosConnector[4].valid = FALSE; + for (i = 0; i < 8; i++) { + if (info->BiosConnector[i].valid) { + for (j = 0; j < 8; j++) { + if (info->BiosConnector[j].valid && (i != j) ) { + if (info->BiosConnector[i].output_id == info->BiosConnector[j].output_id) { + if ((i == 3) || (i == 7)) { + info->BiosConnector[i].DACType = info->BiosConnector[j].DACType; + info->BiosConnector[j].valid = FALSE; + } else if ((j == 3) || (j == 7)) { + info->BiosConnector[j].DACType = info->BiosConnector[i].DACType; + info->BiosConnector[i].valid = FALSE; + } + /* other possible combos? */ + } + } + } + } } - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Bios Connector table: \n"); for (i = 0; i < RADEON_MAX_BIOS_CONNECTOR; i++) { if (info->BiosConnector[i].valid) { diff --git a/src/radeon_output.c b/src/radeon_output.c index ca9b110d..e6b5e3f7 100644 --- a/src/radeon_output.c +++ b/src/radeon_output.c @@ -3240,6 +3240,7 @@ Bool RADEONSetupConnectors(ScrnInfoPtr pScrn) radeon_output->MonType = MT_UNKNOWN; radeon_output->ConnectorType = info->BiosConnector[i].ConnectorType; radeon_output->gpio = info->BiosConnector[i].gpio; + radeon_output->output_id = info->BiosConnector[i].output_id; radeon_output->DDCType = info->BiosConnector[i].DDCType; if (info->IsAtomBios) { if (radeon_output->ConnectorType == CONNECTOR_DVI_D_ATOM) diff --git a/src/radeon_probe.h b/src/radeon_probe.h index db808d22..c24993c7 100644 --- a/src/radeon_probe.h +++ b/src/radeon_probe.h @@ -192,6 +192,7 @@ typedef struct { RADEONConnectorType ConnectorType; Bool valid; int gpio; + int output_id; } RADEONBIOSConnector; typedef struct _RADEONOutputPrivateRec { @@ -240,6 +241,7 @@ typedef struct _RADEONOutputPrivateRec { unsigned long gpio; char *name; + int output_id; } RADEONOutputPrivateRec, *RADEONOutputPrivatePtr; #define RADEON_MAX_CRTC 2 |