xf86-video-ati: Branch 'atombios-support' - 6 commits

Alex Deucher agd5f at kemper.freedesktop.org
Tue Nov 20 23:25:44 PST 2007


 src/atombios_crtc.c   |   41 +++------
 src/atombios_output.c |  209 ++++++++++++++++++++++----------------------------
 src/radeon_bios.c     |    3 
 src/radeon_output.c   |    2 
 src/radeon_probe.h    |    2 
 5 files changed, 114 insertions(+), 143 deletions(-)

New commits:
commit a12390c832abe423def60e39cd5a9118e5910339
Merge: d531792... e74dca1...
Author: Alex Deucher <alex at botch2.(none)>
Date:   Wed Nov 21 02:24:48 2007 -0500

    Merge branch 'atombios-support' of git://git.freedesktop.org/git/xorg/driver/xf86-video-ati into atombios-support

commit d5317922f29a57b6c4127826a2fc126c5fd7c117
Author: Alex Deucher <alex at botch2.(none)>
Date:   Wed Nov 21 02:23:37 2007 -0500

    RADEON: attempt to fix crtc to output routing
    
    The output routing seems to be based on the output ids from the bios
    connector tables and the connected status in the bios scratch regs.
    I don't fully understand this yet, but this seems to work
    for the most part, however changing modes can sometimes
    lead to a blanked head.  This can be remedied by forcing
    a dpms off cycle.

diff --git a/src/atombios_crtc.c b/src/atombios_crtc.c
index 1ab2f6d..5188ec3 100644
--- a/src/atombios_crtc.c
+++ b/src/atombios_crtc.c
@@ -353,37 +353,26 @@ atombios_set_crtc_source(xf86CrtcPtr crtc)
         xf86OutputPtr output = xf86_config->output[i];
         RADEONOutputPrivatePtr radeon_output = output->driver_private;
 
-	switch(major) {
-	case 1: {
-	    switch(minor) {
-	    case 0:
-	    case 1:
+	if (output->crtc == crtc) {
+	    switch(major) {
+	    case 1: {
+		switch(minor) {
+		case 0:
+		case 1:
+		default:
+		    crtc_src_param.ucDevice = radeon_output->output_id;
+		    break;
+		}
+		break;
+	    }
 	    default:
-		if (radeon_output->MonType == MT_CRT) {
-		    if (radeon_output->DACType == DAC_PRIMARY)
-			crtc_src_param.ucDevice |= ATOM_DEVICE_CRT1_SUPPORT;
-		    else
-			crtc_src_param.ucDevice |= ATOM_DEVICE_CRT2_SUPPORT;
-		} else if (radeon_output->MonType == MT_DFP) {
-		    if (radeon_output->TMDSType == TMDS_INT)
-			crtc_src_param.ucDevice |= ATOM_DEVICE_DFP1_SUPPORT;
-		    else
-			crtc_src_param.ucDevice |= ATOM_DEVICE_DFP2_SUPPORT;
-		} else if (radeon_output->MonType == MT_LCD)
-		    crtc_src_param.ucDevice |= ATOM_DEVICE_LCD1_SUPPORT;
-		else if (radeon_output->MonType == MT_STV || radeon_output->MonType == MT_CTV)
-		    crtc_src_param.ucDevice |= ATOM_DEVICE_TV1_SUPPORT;
-		else if (radeon_output->MonType == MT_CV)
-		    crtc_src_param.ucDevice |= ATOM_DEVICE_CV_SUPPORT;
 		break;
 	    }
-	    break;
-	}
-	default:
-	    break;
 	}
     }
 
+    ErrorF("devices sourced: 0x%x\n", crtc_src_param.ucDevice);
+
     data.exec.index = index;
     data.exec.dataSpace = (void *)&space;
     data.exec.pspace = &crtc_src_param;
commit 81ce299bffd75540925b4c8234adf11226147165
Author: Alex Deucher <alex at botch2.(none)>
Date:   Wed Nov 21 01:35:44 2007 -0500

    RADEON: provide clearer debugging info

diff --git a/src/atombios_crtc.c b/src/atombios_crtc.c
index e2f3a0b..1ab2f6d 100644
--- a/src/atombios_crtc.c
+++ b/src/atombios_crtc.c
@@ -389,7 +389,7 @@ atombios_set_crtc_source(xf86CrtcPtr crtc)
     data.exec.pspace = &crtc_src_param;
     
     if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
-	ErrorF("Set CRTC Source success\n");
+	ErrorF("Set CRTC %d Source success\n", radeon_crtc->crtc_id);
 	return;
     }
   
diff --git a/src/atombios_output.c b/src/atombios_output.c
index ed3a250..d94f2f3 100644
--- a/src/atombios_output.c
+++ b/src/atombios_output.c
@@ -58,11 +58,11 @@ atombios_output_dac1_setup(xf86OutputPtr output, DisplayModePtr mode)
     data.exec.pspace = &disp_data;
     
     if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
-	ErrorF("Output DAC1 enable success\n");
+	ErrorF("Output DAC1 setup success\n");
 	return ATOM_SUCCESS;
     }
     
-    ErrorF("Output DAC1 enable failed\n");
+    ErrorF("Output DAC1 setup failed\n");
     return ATOM_NOT_IMPLEMENTED;
 
 }
@@ -83,11 +83,11 @@ atombios_output_dac2_setup(xf86OutputPtr output, DisplayModePtr mode)
     data.exec.pspace = &disp_data;
     
     if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
-	ErrorF("Output DAC2 enable success\n");
+	ErrorF("Output DAC2 setup success\n");
 	return ATOM_SUCCESS;
     }
     
-    ErrorF("Output DAC2 enable failed\n");
+    ErrorF("Output DAC2 setup failed\n");
     return ATOM_NOT_IMPLEMENTED;
 
 }
@@ -115,11 +115,11 @@ atombios_external_tmds_setup(xf86OutputPtr output, DisplayModePtr mode)
     data.exec.pspace = &disp_data;
     
     if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
-	ErrorF("External TMDS enable success\n");
+	ErrorF("External TMDS setup success\n");
 	return ATOM_SUCCESS;
     }
     
-    ErrorF("External TMDS enable failed\n");
+    ErrorF("External TMDS setup failed\n");
     return ATOM_NOT_IMPLEMENTED;
 }
 
@@ -142,11 +142,11 @@ atombios_output_tmds1_setup(xf86OutputPtr output, DisplayModePtr mode)
     data.exec.pspace = &disp_data;
     
     if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
-	ErrorF("Output TMDS1 enable success\n");
+	ErrorF("Output TMDS1 setup success\n");
 	return ATOM_SUCCESS;
     }
     
-    ErrorF("Output TMDS1 enable failed\n");
+    ErrorF("Output TMDS1 setup failed\n");
     return ATOM_NOT_IMPLEMENTED;
 
 }
@@ -170,11 +170,11 @@ atombios_output_tmds2_setup(xf86OutputPtr output, DisplayModePtr mode)
     data.exec.pspace = &disp_data;
     
     if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
-	ErrorF("Output TMDS2 enable success\n");
+	ErrorF("Output TMDS2 setup success\n");
 	return ATOM_SUCCESS;
     }
     
-    ErrorF("Output TMDS2 enable failed\n");
+    ErrorF("Output TMDS2 setup failed\n");
     return ATOM_NOT_IMPLEMENTED;
 }
 
@@ -197,11 +197,11 @@ atombios_output_lvds_setup(xf86OutputPtr output, DisplayModePtr mode)
     data.exec.pspace = &disp_data;
     
     if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
-	ErrorF("Output LVDS enable success\n");
+	ErrorF("Output LVDS setup success\n");
 	return ATOM_SUCCESS;
     }
     
-    ErrorF("Output LVDS enable failed\n");
+    ErrorF("Output LVDS setup failed\n");
     return ATOM_NOT_IMPLEMENTED;
 }
 
@@ -218,11 +218,11 @@ atombios_display_device_control(atomBiosHandlePtr atomBIOS, int device, Bool sta
     data.exec.pspace = &disp_data;
     
     if (RHDAtomBiosFunc(atomBIOS->scrnIndex, atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
-	ErrorF("Output %d enable success\n", device);
+	ErrorF("Output %d %s success\n", device, state? "enable":"disable");
 	return ATOM_SUCCESS;
     }
     
-    ErrorF("Output %d enable failed\n", device);
+    ErrorF("Output %d %s failed\n", device, state? "enable":"disable");
     return ATOM_NOT_IMPLEMENTED;
 }
 
commit 9c5b813dd6b3492cbc9833bc59792a5cec457e51
Author: Alex Deucher <alex at botch2.(none)>
Date:   Wed Nov 21 01:22:42 2007 -0500

    RADEON: major re-org and clean up of atom output control
    
    - use radeon_output->devices to determine output
    - clean up and simplify dpms and mode set

diff --git a/src/atombios_output.c b/src/atombios_output.c
index 441f7d6..ed3a250 100644
--- a/src/atombios_output.c
+++ b/src/atombios_output.c
@@ -42,43 +42,34 @@
 #include "radeon_macros.h"
 #include "radeon_atombios.h"
 
-static AtomBiosResult
-atombios_display_device_control(atomBiosHandlePtr atomBIOS, int device, Bool state)
+static int
+atombios_output_dac1_setup(xf86OutputPtr output, DisplayModePtr mode)
 {
-    DISPLAY_DEVICE_OUTPUT_CONTROL_PS_ALLOCATION disp_data;
+    RADEONInfoPtr info       = RADEONPTR(output->scrn);
+    DAC_ENCODER_CONTROL_PS_ALLOCATION disp_data;
     AtomBiosArgRec data;
     unsigned char *space;
 
-    disp_data.ucAction = state;
-    data.exec.index = device;
+    disp_data.ucAction = 1;
+    disp_data.ucDacStandard = 1;
+    disp_data.usPixelClock = mode->Clock / 10;
+    data.exec.index = GetIndexIntoMasterTable(COMMAND, DAC1EncoderControl);
     data.exec.dataSpace = (void *)&space;
     data.exec.pspace = &disp_data;
     
-    if (RHDAtomBiosFunc(atomBIOS->scrnIndex, atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
-	ErrorF("Output %d enable success\n", device);
+    if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
+	ErrorF("Output DAC1 enable success\n");
 	return ATOM_SUCCESS;
     }
     
-    ErrorF("Output %d enable failed\n", device);
+    ErrorF("Output DAC1 enable failed\n");
     return ATOM_NOT_IMPLEMENTED;
-}
-
-static void
-atombios_enable_crt(atomBiosHandlePtr atomBIOS, int dac, Bool state)
-{
-    int output;
-    if (dac == DAC_PRIMARY)
-	output = GetIndexIntoMasterTable(COMMAND, DAC1OutputControl);
-    else
-	output = GetIndexIntoMasterTable(COMMAND, DAC2OutputControl);
 
-    atombios_display_device_control(atomBIOS, output, state);
 }
 
 static int
-atombios_output_dac_setup(xf86OutputPtr output, DisplayModePtr mode)
+atombios_output_dac2_setup(xf86OutputPtr output, DisplayModePtr mode)
 {
-    RADEONOutputPrivatePtr radeon_output = output->driver_private;
     RADEONInfoPtr info       = RADEONPTR(output->scrn);
     DAC_ENCODER_CONTROL_PS_ALLOCATION disp_data;
     AtomBiosArgRec data;
@@ -87,19 +78,16 @@ atombios_output_dac_setup(xf86OutputPtr output, DisplayModePtr mode)
     disp_data.ucAction = 1;
     disp_data.ucDacStandard = 1;
     disp_data.usPixelClock = mode->Clock / 10;
-    if (radeon_output->DACType == DAC_PRIMARY)
-	data.exec.index = GetIndexIntoMasterTable(COMMAND, DAC1EncoderControl);
-    else
-	data.exec.index = GetIndexIntoMasterTable(COMMAND, DAC2EncoderControl);
+    data.exec.index = GetIndexIntoMasterTable(COMMAND, DAC2EncoderControl);
     data.exec.dataSpace = (void *)&space;
     data.exec.pspace = &disp_data;
     
     if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
-	ErrorF("Output DAC %d enable success\n", radeon_output->DACType);
+	ErrorF("Output DAC2 enable success\n");
 	return ATOM_SUCCESS;
     }
     
-    ErrorF("Output DAC %d enable failed\n", radeon_output->DACType);
+    ErrorF("Output DAC2 enable failed\n");
     return ATOM_NOT_IMPLEMENTED;
 
 }
@@ -122,7 +110,7 @@ atombios_external_tmds_setup(xf86OutputPtr output, DisplayModePtr mode)
     if (!info->dac6bits)
 	disp_data.sXTmdsEncoder.ucMisc |= (1 << 1);
 
-    data.exec.index = GetIndexIntoMasterTable(COMMAND, EnableExternalTMDS_Encoder);
+    data.exec.index = GetIndexIntoMasterTable(COMMAND, DVOEncoderControl);
     data.exec.dataSpace = (void *)&space;
     data.exec.pspace = &disp_data;
     
@@ -217,77 +205,64 @@ atombios_output_lvds_setup(xf86OutputPtr output, DisplayModePtr mode)
     return ATOM_NOT_IMPLEMENTED;
 }
 
-static void
-atombios_output_dac_dpms(xf86OutputPtr output, int mode)
-{
-    RADEONOutputPrivatePtr radeon_output = output->driver_private;
-    RADEONInfoPtr info       = RADEONPTR(output->scrn);
-
-    switch(mode) {
-    case DPMSModeOn:
-	atombios_enable_crt(info->atomBIOS, radeon_output->DACType, ATOM_ENABLE);
-        break;
-    case DPMSModeStandby:
-    case DPMSModeSuspend:
-    case DPMSModeOff:
-	atombios_enable_crt(info->atomBIOS, radeon_output->DACType, ATOM_DISABLE);
-	break;
-    }
-}
-
-static void
-atombios_output_tmds1_dpms(xf86OutputPtr output, int mode)
+static AtomBiosResult
+atombios_display_device_control(atomBiosHandlePtr atomBIOS, int device, Bool state)
 {
-    RADEONInfoPtr info       = RADEONPTR(output->scrn);
+    DISPLAY_DEVICE_OUTPUT_CONTROL_PS_ALLOCATION disp_data;
+    AtomBiosArgRec data;
+    unsigned char *space;
 
-    switch(mode) {
-    case DPMSModeOn:
-	/* TODO */
-	atombios_display_device_control(info->atomBIOS, GetIndexIntoMasterTable(COMMAND, TMDSAOutputControl), ATOM_ENABLE);
+    disp_data.ucAction = state;
+    data.exec.index = device;
+    data.exec.dataSpace = (void *)&space;
+    data.exec.pspace = &disp_data;
     
-        break;
-    case DPMSModeStandby:
-    case DPMSModeSuspend:
-    case DPMSModeOff:
-	/* TODO */
-	atombios_display_device_control(info->atomBIOS, GetIndexIntoMasterTable(COMMAND, TMDSAOutputControl), ATOM_DISABLE);
-        break;
+    if (RHDAtomBiosFunc(atomBIOS->scrnIndex, atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
+	ErrorF("Output %d enable success\n", device);
+	return ATOM_SUCCESS;
     }
+    
+    ErrorF("Output %d enable failed\n", device);
+    return ATOM_NOT_IMPLEMENTED;
 }
 
 static void
-atombios_output_tmds2_dpms(xf86OutputPtr output, int mode)
+atombios_device_dpms(xf86OutputPtr output, int device, int mode)
 {
     RADEONInfoPtr info       = RADEONPTR(output->scrn);
+    int index;
 
-    switch(mode) {
-    case DPMSModeOn:
-	atombios_display_device_control(info->atomBIOS, GetIndexIntoMasterTable(COMMAND, LVTMAOutputControl), ATOM_ENABLE);
-	/* TODO */
-        break;
-    case DPMSModeStandby:
-    case DPMSModeSuspend:
-    case DPMSModeOff:
-	atombios_display_device_control(info->atomBIOS, GetIndexIntoMasterTable(COMMAND, LVTMAOutputControl), ATOM_DISABLE);
-	/* TODO */
-        break;
+    switch (device) {
+    case ATOM_DEVICE_CRT1_SUPPORT:
+	index = GetIndexIntoMasterTable(COMMAND, DAC1OutputControl);
+	break;
+    case ATOM_DEVICE_CRT2_SUPPORT:
+	index = GetIndexIntoMasterTable(COMMAND, DAC2OutputControl);
+	break;
+    case ATOM_DEVICE_DFP1_SUPPORT:
+	index = GetIndexIntoMasterTable(COMMAND, TMDSAOutputControl);
+	break;
+    case ATOM_DEVICE_DFP2_SUPPORT:
+	index = GetIndexIntoMasterTable(COMMAND, DVOOutputControl);
+	break;
+    case ATOM_DEVICE_DFP3_SUPPORT:
+	index = GetIndexIntoMasterTable(COMMAND, LVTMAOutputControl);
+	break;
+    case ATOM_DEVICE_LCD1_SUPPORT:
+	index = GetIndexIntoMasterTable(COMMAND, LCD1OutputControl);
+	break;
+    default:
+	return;
     }
-}
 
-static void
-atombios_output_lvds_dpms(xf86OutputPtr output, int mode)
-{
-    RADEONInfoPtr info       = RADEONPTR(output->scrn);
-
-    switch(mode) {
+    switch (mode) {
     case DPMSModeOn:
-	atombios_display_device_control(info->atomBIOS, GetIndexIntoMasterTable(COMMAND, LCD1OutputControl), ATOM_ENABLE);
-    
+	atombios_display_device_control(info->atomBIOS, index, ATOM_ENABLE);
         break;
     case DPMSModeStandby:
     case DPMSModeSuspend:
     case DPMSModeOff:
-	atombios_display_device_control(info->atomBIOS, GetIndexIntoMasterTable(COMMAND, LCD1OutputControl), ATOM_DISABLE);
+	atombios_display_device_control(info->atomBIOS, index, ATOM_DISABLE);
         break;
     }
 }
@@ -323,16 +298,22 @@ atombios_output_dpms(xf86OutputPtr output, int mode)
     ErrorF("AGD: output dpms\n");
 
    if (radeon_output->MonType == MT_LCD) {
-       atombios_output_lvds_dpms(output, mode);
+       if (radeon_output->devices & ATOM_DEVICE_LCD1_SUPPORT)
+	   atombios_device_dpms(output, ATOM_DEVICE_LCD1_SUPPORT, mode);
    } else if (radeon_output->MonType == MT_DFP) {
        ErrorF("AGD: tmds dpms\n");
-       if (radeon_output->TMDSType == TMDS_INT)
-	   atombios_output_tmds1_dpms(output, mode);
-       else
-	   atombios_output_tmds2_dpms(output, mode);
+       if (radeon_output->devices & ATOM_DEVICE_DFP1_SUPPORT)
+	   atombios_device_dpms(output, ATOM_DEVICE_DFP1_SUPPORT, mode);
+       else if (radeon_output->devices & ATOM_DEVICE_DFP2_SUPPORT)
+	   atombios_device_dpms(output, ATOM_DEVICE_DFP2_SUPPORT, mode);
+       else if (radeon_output->devices & ATOM_DEVICE_DFP3_SUPPORT)
+	   atombios_device_dpms(output, ATOM_DEVICE_DFP3_SUPPORT, mode);
    } else if (radeon_output->MonType == MT_CRT) {
        ErrorF("AGD: dac dpms\n");
-       atombios_output_dac_dpms(output, mode);
+       if (radeon_output->devices & ATOM_DEVICE_CRT1_SUPPORT)
+	   atombios_device_dpms(output, ATOM_DEVICE_CRT1_SUPPORT, mode);
+       else if (radeon_output->devices & ATOM_DEVICE_CRT2_SUPPORT)
+	   atombios_device_dpms(output, ATOM_DEVICE_CRT2_SUPPORT, mode);
    }
 
 #if 1
@@ -350,14 +331,20 @@ atombios_output_mode_set(xf86OutputPtr output,
     RADEONOutputPrivatePtr radeon_output = output->driver_private;
 
     if (radeon_output->MonType == MT_CRT) {
-	atombios_output_dac_setup(output, adjusted_mode);
+       if (radeon_output->devices & ATOM_DEVICE_CRT1_SUPPORT)
+	   atombios_output_dac1_setup(output, adjusted_mode);
+       else if (radeon_output->devices & ATOM_DEVICE_CRT2_SUPPORT)
+	   atombios_output_dac2_setup(output, adjusted_mode);
     } else if (radeon_output->MonType == MT_DFP) {
-	if (radeon_output->TMDSType == TMDS_INT) 
-	    atombios_output_tmds1_setup(output, adjusted_mode);
-	else
-	    atombios_output_tmds2_setup(output, adjusted_mode);
+       if (radeon_output->devices & ATOM_DEVICE_DFP1_SUPPORT)
+	   atombios_output_tmds1_setup(output, adjusted_mode);
+       else if (radeon_output->devices & ATOM_DEVICE_DFP2_SUPPORT)
+	   atombios_external_tmds_setup(output, adjusted_mode);
+       else if (radeon_output->devices & ATOM_DEVICE_DFP3_SUPPORT)
+	   atombios_output_tmds2_setup(output, adjusted_mode);
     } else if (radeon_output->MonType == MT_LCD) {
-	atombios_output_lvds_setup(output, adjusted_mode);
+       if (radeon_output->devices & ATOM_DEVICE_LCD1_SUPPORT)
+	   atombios_output_lvds_setup(output, adjusted_mode);
     }
 }
 
@@ -398,13 +385,13 @@ atombios_dac_detect(ScrnInfoPtr pScrn, xf86OutputPtr output)
 
     ret = atom_bios_dac_load_detect(info->atomBIOS, radeon_output->DACType);
     if (ret == ATOM_SUCCESS) {
-      ErrorF("DAC connect %08X\n", (unsigned int)INREG(0x10));
+      ErrorF("DAC connect %08X\n", (unsigned int)INREG(RADEON_BIOS_0_SCRATCH));
 	bios_0_scratch = INREG(RADEON_BIOS_0_SCRATCH);
 	
-	if (radeon_output->DACType == DAC_PRIMARY) {
+	if (radeon_output->devices & ATOM_DEVICE_CRT1_SUPPORT) {
 	    if (bios_0_scratch & ATOM_S0_CRT1_COLOR)
 		MonType = MT_CRT;
-	} else {
+	} else if (radeon_output->devices & ATOM_DEVICE_CRT2_SUPPORT) {
 	    if (bios_0_scratch & ATOM_S0_CRT2_COLOR)
 		MonType = MT_CRT;
 	}
commit 7634cb6b96f938bc6615eb2c49ae75aaefd04cce
Author: Alex Deucher <alex at botch2.(none)>
Date:   Wed Nov 21 00:10:14 2007 -0500

    RADEON: make naming consistent and remove some cruft

diff --git a/src/atombios_output.c b/src/atombios_output.c
index 71112f6..441f7d6 100644
--- a/src/atombios_output.c
+++ b/src/atombios_output.c
@@ -43,7 +43,7 @@
 #include "radeon_atombios.h"
 
 static AtomBiosResult
-atom_bios_display_device_control(atomBiosHandlePtr atomBIOS, int device, Bool state)
+atombios_display_device_control(atomBiosHandlePtr atomBIOS, int device, Bool state)
 {
     DISPLAY_DEVICE_OUTPUT_CONTROL_PS_ALLOCATION disp_data;
     AtomBiosArgRec data;
@@ -64,7 +64,7 @@ atom_bios_display_device_control(atomBiosHandlePtr atomBIOS, int device, Bool st
 }
 
 static void
-atom_bios_enable_crt(atomBiosHandlePtr atomBIOS, int dac, Bool state)
+atombios_enable_crt(atomBiosHandlePtr atomBIOS, int dac, Bool state)
 {
     int output;
     if (dac == DAC_PRIMARY)
@@ -72,7 +72,7 @@ atom_bios_enable_crt(atomBiosHandlePtr atomBIOS, int dac, Bool state)
     else
 	output = GetIndexIntoMasterTable(COMMAND, DAC2OutputControl);
 
-    atom_bios_display_device_control(atomBIOS, output, state);
+    atombios_display_device_control(atomBIOS, output, state);
 }
 
 static int
@@ -102,12 +102,6 @@ atombios_output_dac_setup(xf86OutputPtr output, DisplayModePtr mode)
     ErrorF("Output DAC %d enable failed\n", radeon_output->DACType);
     return ATOM_NOT_IMPLEMENTED;
 
-#if 0
-    atom_bios_display_device_control(info->atomBIOS, GetIndexIntoMasterTable(COMMAND, CRT1OutputControl), ATOM_TRANSMITTER_ACTION_INIT);
-    atom_bios_display_device_control(info->atomBIOS, GetIndexIntoMasterTable(COMMAND, CRT1OutputControl), ATOM_TRANSMITTER_ACTION_SETUP);
-    atom_bios_display_device_control(info->atomBIOS, GetIndexIntoMasterTable(COMMAND, CRT1OutputControl), ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT);
-    return ATOM_SUCCESS;
-#endif
 }
 
 int
@@ -167,12 +161,6 @@ atombios_output_tmds1_setup(xf86OutputPtr output, DisplayModePtr mode)
     ErrorF("Output TMDS1 enable failed\n");
     return ATOM_NOT_IMPLEMENTED;
 
-#if 0
-    atom_bios_display_device_control(info->atomBIOS, GetIndexIntoMasterTable(COMMAND, DFP1OutputControl), ATOM_TRANSMITTER_ACTION_INIT);
-    atom_bios_display_device_control(info->atomBIOS, GetIndexIntoMasterTable(COMMAND, DFP1OutputControl), ATOM_TRANSMITTER_ACTION_SETUP);
-    atom_bios_display_device_control(info->atomBIOS, GetIndexIntoMasterTable(COMMAND, DFP1OutputControl), ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT);
-    return ATOM_SUCCESS;
-#endif
 }
 
 static int
@@ -237,12 +225,12 @@ atombios_output_dac_dpms(xf86OutputPtr output, int mode)
 
     switch(mode) {
     case DPMSModeOn:
-	atom_bios_enable_crt(info->atomBIOS, radeon_output->DACType, ATOM_ENABLE);
+	atombios_enable_crt(info->atomBIOS, radeon_output->DACType, ATOM_ENABLE);
         break;
     case DPMSModeStandby:
     case DPMSModeSuspend:
     case DPMSModeOff:
-	atom_bios_enable_crt(info->atomBIOS, radeon_output->DACType, ATOM_DISABLE);
+	atombios_enable_crt(info->atomBIOS, radeon_output->DACType, ATOM_DISABLE);
 	break;
     }
 }
@@ -255,14 +243,14 @@ atombios_output_tmds1_dpms(xf86OutputPtr output, int mode)
     switch(mode) {
     case DPMSModeOn:
 	/* TODO */
-	atom_bios_display_device_control(info->atomBIOS, GetIndexIntoMasterTable(COMMAND, TMDSAOutputControl), ATOM_ENABLE);
+	atombios_display_device_control(info->atomBIOS, GetIndexIntoMasterTable(COMMAND, TMDSAOutputControl), ATOM_ENABLE);
     
         break;
     case DPMSModeStandby:
     case DPMSModeSuspend:
     case DPMSModeOff:
 	/* TODO */
-	atom_bios_display_device_control(info->atomBIOS, GetIndexIntoMasterTable(COMMAND, TMDSAOutputControl), ATOM_DISABLE);
+	atombios_display_device_control(info->atomBIOS, GetIndexIntoMasterTable(COMMAND, TMDSAOutputControl), ATOM_DISABLE);
         break;
     }
 }
@@ -274,13 +262,13 @@ atombios_output_tmds2_dpms(xf86OutputPtr output, int mode)
 
     switch(mode) {
     case DPMSModeOn:
-	atom_bios_display_device_control(info->atomBIOS, GetIndexIntoMasterTable(COMMAND, LVTMAOutputControl), ATOM_ENABLE);
+	atombios_display_device_control(info->atomBIOS, GetIndexIntoMasterTable(COMMAND, LVTMAOutputControl), ATOM_ENABLE);
 	/* TODO */
         break;
     case DPMSModeStandby:
     case DPMSModeSuspend:
     case DPMSModeOff:
-	atom_bios_display_device_control(info->atomBIOS, GetIndexIntoMasterTable(COMMAND, LVTMAOutputControl), ATOM_DISABLE);
+	atombios_display_device_control(info->atomBIOS, GetIndexIntoMasterTable(COMMAND, LVTMAOutputControl), ATOM_DISABLE);
 	/* TODO */
         break;
     }
@@ -293,13 +281,13 @@ atombios_output_lvds_dpms(xf86OutputPtr output, int mode)
 
     switch(mode) {
     case DPMSModeOn:
-	atom_bios_display_device_control(info->atomBIOS, GetIndexIntoMasterTable(COMMAND, LCD1OutputControl), ATOM_ENABLE);
+	atombios_display_device_control(info->atomBIOS, GetIndexIntoMasterTable(COMMAND, LCD1OutputControl), ATOM_ENABLE);
     
         break;
     case DPMSModeStandby:
     case DPMSModeSuspend:
     case DPMSModeOff:
-	atom_bios_display_device_control(info->atomBIOS, GetIndexIntoMasterTable(COMMAND, LCD1OutputControl), ATOM_DISABLE);
+	atombios_display_device_control(info->atomBIOS, GetIndexIntoMasterTable(COMMAND, LCD1OutputControl), ATOM_DISABLE);
         break;
     }
 }
commit 908748343fc9a6cdc38af0fc028c63a82766da3f
Author: Alex Deucher <alex at botch2.(none)>
Date:   Wed Nov 21 00:05:42 2007 -0500

    RADEON: store devices ids from bios for each driver output

diff --git a/src/radeon_bios.c b/src/radeon_bios.c
index ac2495f..373659a 100644
--- a/src/radeon_bios.c
+++ b/src/radeon_bios.c
@@ -236,6 +236,7 @@ static Bool RADEONGetATOMConnectorInfoFromBIOS (ScrnInfoPtr pScrn)
 		    info->BiosConnector[i].ddc_line = gpio;
 
 		info->BiosConnector[i].output_id = id;
+		info->BiosConnector[i].devices = (1 << i);
 
 		if (i == ATOM_DEVICE_DFP1_INDEX)
 		    info->BiosConnector[i].TMDSType = TMDS_INT;
@@ -277,12 +278,14 @@ static Bool RADEONGetATOMConnectorInfoFromBIOS (ScrnInfoPtr pScrn)
 			     (i == ATOM_DEVICE_DFP3_INDEX)) &&
 			    ((j == ATOM_DEVICE_CRT1_INDEX) || (j == ATOM_DEVICE_CRT2_INDEX))) {
 			    info->BiosConnector[i].DACType = info->BiosConnector[j].DACType;
+			    info->BiosConnector[i].devices |= info->BiosConnector[j].devices;
 			    info->BiosConnector[j].valid = FALSE;
 			} else if (((j == ATOM_DEVICE_DFP1_INDEX) ||
 			     (j == ATOM_DEVICE_DFP2_INDEX) ||
 			     (j == ATOM_DEVICE_DFP3_INDEX)) &&
 			    ((i == ATOM_DEVICE_CRT1_INDEX) || (i == ATOM_DEVICE_CRT2_INDEX))) {
 			    info->BiosConnector[j].DACType = info->BiosConnector[i].DACType;
+			    info->BiosConnector[j].devices |= info->BiosConnector[i].devices;
 			    info->BiosConnector[i].valid = FALSE;
 			}
 			/* other possible combos?  */
diff --git a/src/radeon_output.c b/src/radeon_output.c
index a824e5b..678e4d7 100644
--- a/src/radeon_output.c
+++ b/src/radeon_output.c
@@ -3134,7 +3134,9 @@ Bool RADEONSetupConnectors(ScrnInfoPtr pScrn)
 	    radeon_output->MonType = MT_UNKNOWN;
 	    radeon_output->ConnectorType = info->BiosConnector[i].ConnectorType;
 	    radeon_output->ddc_line = info->BiosConnector[i].ddc_line;
+	    radeon_output->devices = info->BiosConnector[i].devices;
 	    radeon_output->output_id = info->BiosConnector[i].output_id;
+
 	    if (radeon_output->ConnectorType == CONNECTOR_DVI_D)
 		radeon_output->DACType = DAC_NONE;
 	    else
diff --git a/src/radeon_probe.h b/src/radeon_probe.h
index bfc352f..c1a7913 100644
--- a/src/radeon_probe.h
+++ b/src/radeon_probe.h
@@ -195,6 +195,7 @@ typedef struct {
     RADEONConnectorType ConnectorType;
     Bool valid;
     int output_id;
+    int devices;
 } RADEONBIOSConnector;
 
 typedef struct _RADEONOutputPrivateRec {
@@ -243,6 +244,7 @@ typedef struct _RADEONOutputPrivateRec {
 
     char              *name;
     int               output_id;
+    int               devices;
 } RADEONOutputPrivateRec, *RADEONOutputPrivatePtr;
 
 #define RADEON_MAX_CRTC 2


More information about the xorg-commit mailing list