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