[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

xserver-xorg-video-ati: Changes to 'upstream-unstable'



Rebased ref, commits from common ancestor:
commit 1b02b93895c31a0c9d641e47b46dce43b40edd97
Author: Alex Deucher <alexdeucher@gmail.com>
Date:   Wed Apr 8 10:34:44 2009 -0400

    Bump for release

diff --git a/configure.ac b/configure.ac
index 660ea1f..709fb19 100644
--- a/configure.ac
+++ b/configure.ac
@@ -22,7 +22,7 @@
 
 AC_PREREQ(2.57)
 AC_INIT([xf86-video-ati],
-        6.12.1.99,
+        6.12.2,
         [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
         xf86-video-ati)
 

commit da74b94a5da8f0bcf4ae99b20e594d2f0f4fc6f6
Author: Alex Deucher <alexdeucher@gmail.com>
Date:   Tue Apr 7 18:59:06 2009 -0400

    ATOM: code cleanup
    
    - remove cases that aren't possible (e.g., no TMDSA on DCE3 cards)
    - condense duplicate cases

diff --git a/src/atombios_output.c b/src/atombios_output.c
index 8e30348..158e76f 100644
--- a/src/atombios_output.c
+++ b/src/atombios_output.c
@@ -520,14 +520,10 @@ atombios_output_dig_encoder_setup(xf86OutputPtr output, int action)
 	num = dig_block + 1;
     } else {
 	switch (radeon_encoder->encoder_id) {
-	case ENCODER_OBJECT_ID_INTERNAL_TMDS1:
-	case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1:
 	case ENCODER_OBJECT_ID_INTERNAL_UNIPHY:
 	    index = GetIndexIntoMasterTable(COMMAND, DIG1EncoderControl);
 	    num = 1;
 	    break;
-	case ENCODER_OBJECT_ID_INTERNAL_LVDS:
-	case ENCODER_OBJECT_ID_INTERNAL_LVTM1:
 	case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA:
 	    index = GetIndexIntoMasterTable(COMMAND, DIG2EncoderControl);
 	    num = 2;
@@ -557,14 +553,8 @@ atombios_output_dig_encoder_setup(xf86OutputPtr output, int action)
 	case ENCODER_OBJECT_ID_INTERNAL_UNIPHY:
 	    disp_data.ucConfig = ATOM_ENCODER_CONFIG_UNIPHY;
 	    break;
-	case ENCODER_OBJECT_ID_INTERNAL_TMDS1:
-	case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1:
-	    disp_data.ucConfig = ATOM_ENCODER_CONFIG_TRANSMITTER1;
-	    break;
-	case ENCODER_OBJECT_ID_INTERNAL_LVDS:
-	case ENCODER_OBJECT_ID_INTERNAL_LVTM1:
 	case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA:
-	    disp_data.ucConfig = ATOM_ENCODER_CONFIG_TRANSMITTER2;
+	    disp_data.ucConfig = ATOM_ENCODER_CONFIG_LVTMA;
 	    break;
 	}
     }
@@ -635,13 +625,9 @@ atombios_output_dig_transmitter_setup(xf86OutputPtr output, int action)
 	index = GetIndexIntoMasterTable(COMMAND, UNIPHYTransmitterControl);
     else {
 	switch (radeon_encoder->encoder_id) {
-	case ENCODER_OBJECT_ID_INTERNAL_TMDS1:
-	case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1:
 	case ENCODER_OBJECT_ID_INTERNAL_UNIPHY:
 	    index = GetIndexIntoMasterTable(COMMAND, DIG1TransmitterControl);
 	    break;
-	case ENCODER_OBJECT_ID_INTERNAL_LVDS:
-	case ENCODER_OBJECT_ID_INTERNAL_LVTM1:
 	case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA:
 	    index = GetIndexIntoMasterTable(COMMAND, DIG2TransmitterControl);
 	    break;
@@ -699,24 +685,12 @@ atombios_output_dig_transmitter_setup(xf86OutputPtr output, int action)
 
 	switch (radeon_encoder->encoder_id) {
 	case ENCODER_OBJECT_ID_INTERNAL_UNIPHY:
-	    if (radeon_output->MonType == MT_DP) {
-		if (radeon_output->linkb)
-		    disp_data.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_LINKB
-					| ATOM_TRANSMITTER_CONFIG_DIG2_ENCODER;
-		else
-		    disp_data.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_LINKA
-					| ATOM_TRANSMITTER_CONFIG_DIG1_ENCODER;
-		break;
-	    };
-	    /* else, fall through */
-	case ENCODER_OBJECT_ID_INTERNAL_TMDS1:
-	case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1:
 	    disp_data.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_DIG1_ENCODER;
 	    if (info->IsIGP) {
 		if (clock > 165000) {
 		    disp_data.v1.ucConfig |= (ATOM_TRANSMITTER_CONFIG_8LANE_LINK |
 					      ATOM_TRANSMITTER_CONFIG_LINKA_B);
-		    /* guess */
+
 		    if (radeon_output->igp_lane_info & 0x3)
 			disp_data.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_LANE_0_7;
 		    else if (radeon_output->igp_lane_info & 0xc)
@@ -746,8 +720,6 @@ atombios_output_dig_transmitter_setup(xf86OutputPtr output, int action)
 		}
 	    }
 	    break;
-	case ENCODER_OBJECT_ID_INTERNAL_LVDS:
-	case ENCODER_OBJECT_ID_INTERNAL_LVTM1:
 	case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA:
 	    disp_data.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_DIG2_ENCODER;
 	    if (clock > 165000)
@@ -1370,7 +1342,6 @@ atombios_set_output_crtc_source(xf86OutputPtr output)
 		break;
 	    case ENCODER_OBJECT_ID_INTERNAL_LVDS:
 	    case ENCODER_OBJECT_ID_INTERNAL_LVTM1:
-	    case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA:
 		if (radeon_output->active_device & ATOM_DEVICE_LCD1_SUPPORT)
 		    crtc_src_param.ucDevice = ATOM_DEVICE_LCD1_INDEX;
 		else
@@ -1407,13 +1378,6 @@ atombios_set_output_crtc_source(xf86OutputPtr output)
 	    crtc_src_param2.ucCRTC = radeon_crtc->crtc_id;
 	    crtc_src_param2.ucEncodeMode = atombios_get_encoder_mode(output);
 	    switch (radeon_encoder->encoder_id) {
-	    case ENCODER_OBJECT_ID_INTERNAL_TMDS1:
-	    case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1:
-		if (IS_DCE3_VARIANT)
-		    crtc_src_param2.ucEncoderID = ASIC_INT_DIG2_ENCODER_ID;
-		else
-		    crtc_src_param2.ucEncoderID = radeon_get_device_index(radeon_output->active_device);
-		break;
 	    case ENCODER_OBJECT_ID_INTERNAL_UNIPHY:
 	    case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1:
 	    case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2:
@@ -1425,20 +1389,9 @@ atombios_set_output_crtc_source(xf86OutputPtr output)
 		} else
 		    crtc_src_param2.ucEncoderID = ASIC_INT_DIG1_ENCODER_ID;
 		break;
-	    case ENCODER_OBJECT_ID_INTERNAL_DVO1:
-	    case ENCODER_OBJECT_ID_INTERNAL_DDI:
-	    case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DVO1:
-		crtc_src_param2.ucEncoderID = radeon_get_device_index(radeon_output->active_device);
-		break;
-	    case ENCODER_OBJECT_ID_INTERNAL_LVDS:
-	    case ENCODER_OBJECT_ID_INTERNAL_LVTM1:
 	    case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA:
-		if (IS_DCE3_VARIANT)
-		    crtc_src_param2.ucEncoderID = ASIC_INT_DIG2_ENCODER_ID;
-		else
-		    crtc_src_param2.ucEncoderID = radeon_get_device_index(radeon_output->active_device);
+		crtc_src_param2.ucEncoderID = ASIC_INT_DIG2_ENCODER_ID;
 		break;
-	    case ENCODER_OBJECT_ID_INTERNAL_DAC1:
 	    case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1:
 		if (radeon_output->active_device & (ATOM_DEVICE_TV_SUPPORT))
 		    crtc_src_param2.ucEncoderID = ASIC_INT_TV_ENCODER_ID;
@@ -1447,7 +1400,6 @@ atombios_set_output_crtc_source(xf86OutputPtr output)
 		else
 		    crtc_src_param2.ucEncoderID = ASIC_INT_DAC1_ENCODER_ID;
 		break;
-	    case ENCODER_OBJECT_ID_INTERNAL_DAC2:
 	    case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2:
 		if (radeon_output->active_device & (ATOM_DEVICE_TV_SUPPORT))
 		    crtc_src_param2.ucEncoderID = ASIC_INT_TV_ENCODER_ID;
@@ -1589,80 +1541,48 @@ atom_bios_dac_load_detect(atomBiosHandlePtr atomBIOS, xf86OutputPtr output)
 
     if (radeon_output->devices & ATOM_DEVICE_CRT1_SUPPORT) {
 	dac_data.sDacload.usDeviceID = cpu_to_le16(ATOM_DEVICE_CRT1_SUPPORT);
-	if (IS_AVIVO_VARIANT) {
-	    if (info->encoders[ATOM_DEVICE_CRT1_INDEX] &&
-		(info->encoders[ATOM_DEVICE_CRT1_INDEX]->encoder_id == ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1))
-		dac_data.sDacload.ucDacType = ATOM_DAC_A;
-	    else
-		dac_data.sDacload.ucDacType = ATOM_DAC_B;
-	} else {
-	    if (info->encoders[ATOM_DEVICE_CRT1_INDEX] &&
-		(info->encoders[ATOM_DEVICE_CRT1_INDEX]->encoder_id == ENCODER_OBJECT_ID_INTERNAL_DAC1))
-		dac_data.sDacload.ucDacType = ATOM_DAC_A;
-	    else
-		dac_data.sDacload.ucDacType = ATOM_DAC_B;
-	}
+	if (info->encoders[ATOM_DEVICE_CRT1_INDEX] &&
+	    ((info->encoders[ATOM_DEVICE_CRT1_INDEX]->encoder_id == ENCODER_OBJECT_ID_INTERNAL_DAC1) ||
+	     (info->encoders[ATOM_DEVICE_CRT1_INDEX]->encoder_id == ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1)))
+	    dac_data.sDacload.ucDacType = ATOM_DAC_A;
+	else
+	    dac_data.sDacload.ucDacType = ATOM_DAC_B;
     } else if (radeon_output->devices & ATOM_DEVICE_CRT2_SUPPORT) {
 	dac_data.sDacload.usDeviceID = cpu_to_le16(ATOM_DEVICE_CRT2_SUPPORT);
-	if (IS_AVIVO_VARIANT) {
-	    if (info->encoders[ATOM_DEVICE_CRT2_INDEX] &&
-		(info->encoders[ATOM_DEVICE_CRT2_INDEX]->encoder_id == ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1))
-		dac_data.sDacload.ucDacType = ATOM_DAC_A;
-	    else
-		dac_data.sDacload.ucDacType = ATOM_DAC_B;
-	} else {
-	    if (info->encoders[ATOM_DEVICE_CRT2_INDEX] &&
-		(info->encoders[ATOM_DEVICE_CRT2_INDEX]->encoder_id == ENCODER_OBJECT_ID_INTERNAL_DAC1))
-		dac_data.sDacload.ucDacType = ATOM_DAC_A;
-	    else
-		dac_data.sDacload.ucDacType = ATOM_DAC_B;
-	}
+	if (info->encoders[ATOM_DEVICE_CRT2_INDEX] &&
+	    ((info->encoders[ATOM_DEVICE_CRT2_INDEX]->encoder_id == ENCODER_OBJECT_ID_INTERNAL_DAC1) ||
+	     (info->encoders[ATOM_DEVICE_CRT2_INDEX]->encoder_id == ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1)))
+	    dac_data.sDacload.ucDacType = ATOM_DAC_A;
+	else
+	    dac_data.sDacload.ucDacType = ATOM_DAC_B;
     } else if (radeon_output->devices & ATOM_DEVICE_CV_SUPPORT) {
 	dac_data.sDacload.usDeviceID = cpu_to_le16(ATOM_DEVICE_CV_SUPPORT);
-	if (IS_AVIVO_VARIANT) {
-	    if (info->encoders[ATOM_DEVICE_CV_INDEX] &&
-		(info->encoders[ATOM_DEVICE_CV_INDEX]->encoder_id == ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1))
-		dac_data.sDacload.ucDacType = ATOM_DAC_A;
-	    else
-		dac_data.sDacload.ucDacType = ATOM_DAC_B;
-	} else {
-	    if (info->encoders[ATOM_DEVICE_CV_INDEX] &&
-		(info->encoders[ATOM_DEVICE_CV_INDEX]->encoder_id == ENCODER_OBJECT_ID_INTERNAL_DAC1))
-		dac_data.sDacload.ucDacType = ATOM_DAC_A;
-	    else
-	       dac_data.sDacload.ucDacType = ATOM_DAC_B;
-	}
+	if (info->encoders[ATOM_DEVICE_CV_INDEX] &&
+	    ((info->encoders[ATOM_DEVICE_CV_INDEX]->encoder_id == ENCODER_OBJECT_ID_INTERNAL_DAC1) ||
+	     (info->encoders[ATOM_DEVICE_CV_INDEX]->encoder_id == ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1)))
+	    dac_data.sDacload.ucDacType = ATOM_DAC_A;
+	else
+	    dac_data.sDacload.ucDacType = ATOM_DAC_B;
 	if (minor >= 3)
 	    dac_data.sDacload.ucMisc = DAC_LOAD_MISC_YPrPb;
     } else if (radeon_output->devices & ATOM_DEVICE_TV1_SUPPORT) {
 	dac_data.sDacload.usDeviceID = cpu_to_le16(ATOM_DEVICE_TV1_SUPPORT);
-	if (IS_AVIVO_VARIANT) {
-	    if (info->encoders[ATOM_DEVICE_TV1_INDEX] &&
-		(info->encoders[ATOM_DEVICE_TV1_INDEX]->encoder_id == ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1))
-		dac_data.sDacload.ucDacType = ATOM_DAC_A;
-	    else
-		dac_data.sDacload.ucDacType = ATOM_DAC_B;
-	} else {
-	    if (info->encoders[ATOM_DEVICE_TV1_INDEX] &&
-		(info->encoders[ATOM_DEVICE_TV1_INDEX]->encoder_id == ENCODER_OBJECT_ID_INTERNAL_DAC1))
-		dac_data.sDacload.ucDacType = ATOM_DAC_A;
-	    else
-		dac_data.sDacload.ucDacType = ATOM_DAC_B;
-	}
+	if (info->encoders[ATOM_DEVICE_TV1_INDEX] &&
+	    ((info->encoders[ATOM_DEVICE_TV1_INDEX]->encoder_id == ENCODER_OBJECT_ID_INTERNAL_DAC1) ||
+	     (info->encoders[ATOM_DEVICE_TV1_INDEX]->encoder_id == ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1)))
+	    dac_data.sDacload.ucDacType = ATOM_DAC_A;
+	else
+	    dac_data.sDacload.ucDacType = ATOM_DAC_B;
 	if (minor >= 3)
 	    dac_data.sDacload.ucMisc = DAC_LOAD_MISC_YPrPb;
-    } else {
-	ErrorF("invalid output device for dac detection\n");
+    } else
 	return ATOM_NOT_IMPLEMENTED;
-    }
-
 
     data.exec.index = index;
     data.exec.dataSpace = (void *)&space;
     data.exec.pspace = &dac_data;
 
     if (RHDAtomBiosFunc(atomBIOS->scrnIndex, atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
-
 	ErrorF("Dac detection success\n");
 	return ATOM_SUCCESS ;
     }

commit a24aa7250d09ae68ceaaba987314388b5e52096c
Author: Alex Deucher <alexdeucher@gmail.com>
Date:   Tue Apr 7 18:52:08 2009 -0400

    DCE3/3.2: further fixes
    
    disable the dig transmitter and encoder before setup and enable

diff --git a/src/atombios_output.c b/src/atombios_output.c
index 60d6c10..8e30348 100644
--- a/src/atombios_output.c
+++ b/src/atombios_output.c
@@ -1544,8 +1544,12 @@ atombios_output_mode_set(xf86OutputPtr output,
     case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1:
     case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2:
     case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA:
+	/* disable encoder and transmitter */
+	atombios_output_dig_transmitter_setup(output, ATOM_TRANSMITTER_ACTION_DISABLE);
+	atombios_output_dig_encoder_setup(output, ATOM_DISABLE);
+
+	/* setup and enable the encoder and transmitter */
 	atombios_output_dig_encoder_setup(output, ATOM_ENABLE);
-	atombios_output_dig_transmitter_setup(output, ATOM_TRANSMITTER_ACTION_INIT);
 	atombios_output_dig_transmitter_setup(output, ATOM_TRANSMITTER_ACTION_SETUP);
 	atombios_output_dig_transmitter_setup(output, ATOM_TRANSMITTER_ACTION_ENABLE);
 	break;

commit 284e1943f6726ed08e796f99e49fbd90ac7fa8a4
Author: Alex Deucher <alexdeucher@gmail.com>
Date:   Wed Apr 1 15:07:01 2009 -0400

    Cast info->sclk to int

diff --git a/src/radeon_atombios.c b/src/radeon_atombios.c
index 47f5103..a657fac 100644
--- a/src/radeon_atombios.c
+++ b/src/radeon_atombios.c
@@ -1398,7 +1398,7 @@ xf86MonPtr radeon_atom_get_edid(xf86OutputPtr output)
     AtomBiosArgRec data;
     unsigned char *space;
     int i2c_clock = 50;
-    int engine_clk = info->sclk * 100;
+    int engine_clk = (int)info->sclk * 100;
     int prescale;
     unsigned char *edid;
     xf86MonPtr mon = NULL;

commit b580e388e0e31843308c783c1ca859672dc6ca0e
Author: Alex Deucher <alexdeucher@gmail.com>
Date:   Wed Apr 1 14:59:43 2009 -0400

    Fix missing ')' in PCIE macro

diff --git a/src/radeon_macros.h b/src/radeon_macros.h
index b7056b0..19307c8 100644
--- a/src/radeon_macros.h
+++ b/src/radeon_macros.h
@@ -155,6 +155,6 @@ do {									\
 #define OUTMC(pScrn, addr, val) RADEONOUTMC(pScrn, addr, val)
 
 #define INPCIE(pScrn, addr) RADEONINPCIE(pScrn, addr)
-#define OUTPCIE(pScrn, addr, val) RADEONOUTPCIE(pScrn, addr, val
+#define OUTPCIE(pScrn, addr, val) RADEONOUTPCIE(pScrn, addr, val)
 
 #endif

commit 8ec27be3c8043a6ddc816b0b1480dd19f8d73832
Author: Alex Deucher <alexdeucher@gmail.com>
Date:   Tue Apr 7 11:33:44 2009 -0400

    radeon: fix Xv vsync for multi-head

diff --git a/src/r600_textured_videofuncs.c b/src/r600_textured_videofuncs.c
index 3dfe151..88745d5 100644
--- a/src/r600_textured_videofuncs.c
+++ b/src/r600_textured_videofuncs.c
@@ -446,17 +446,21 @@ R600DisplayTexturedVideo(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv)
     EREG(accel_state->ib, SPI_INTERP_CONTROL_0,                0);
 
 
-    if (pPriv->vsync)
-	cp_wait_vline_sync(pScrn, accel_state->ib, pPixmap,
-			   radeon_covering_crtc_num(pScrn,
+    if (pPriv->vsync) {
+	xf86CrtcPtr crtc = radeon_xv_pick_best_crtc(pScrn,
 						    pPriv->drw_x,
 						    pPriv->drw_x + pPriv->dst_w,
 						    pPriv->drw_y,
-						    pPriv->drw_y + pPriv->dst_h,
-						    pPriv->desired_crtc),
-			   pPriv->drw_y,
-			   pPriv->drw_y + pPriv->dst_h);
-
+						    pPriv->drw_y + pPriv->dst_h);
+	if (crtc) {
+	    RADEONCrtcPrivatePtr radeon_crtc = crtc->driver_private;
+
+	    cp_wait_vline_sync(pScrn, accel_state->ib, pPixmap,
+			       radeon_crtc->crtc_id,
+			       pPriv->drw_y - crtc->y,
+			       (pPriv->drw_y - crtc->y) + pPriv->dst_h);
+	}
+    }
 
     accel_state->vb_index = 0;
 
diff --git a/src/radeon_textured_videofuncs.c b/src/radeon_textured_videofuncs.c
index 05acb93..6cb2870 100644
--- a/src/radeon_textured_videofuncs.c
+++ b/src/radeon_textured_videofuncs.c
@@ -1983,17 +1983,21 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv
 	}
     }
 
-    if (pPriv->vsync)
-	FUNC_NAME(RADEONWaitForVLine)(pScrn, pPixmap,
-				      radeon_covering_crtc_num(pScrn,
-							       pPriv->drw_x,
-							       pPriv->drw_x + pPriv->dst_w,
-							       pPriv->drw_y,
-							       pPriv->drw_y + pPriv->dst_h,
-							       pPriv->desired_crtc),
-				      pPriv->drw_y,
-				      pPriv->drw_y + pPriv->dst_h);
-
+    if (pPriv->vsync) {
+	xf86CrtcPtr crtc = radeon_xv_pick_best_crtc(pScrn,
+						    pPriv->drw_x,
+						    pPriv->drw_x + pPriv->dst_w,
+						    pPriv->drw_y,
+						    pPriv->drw_y + pPriv->dst_h);
+	if (crtc) {
+	    RADEONCrtcPrivatePtr radeon_crtc = crtc->driver_private;
+
+	    FUNC_NAME(RADEONWaitForVLine)(pScrn, pPixmap,
+					  radeon_crtc->crtc_id,
+					  pPriv->drw_y - crtc->y,
+					  (pPriv->drw_y - crtc->y) + pPriv->dst_h);
+	}
+    }
     /*
      * Rendering of the actual polygon is done in two different
      * ways depending on chip generation:
diff --git a/src/radeon_video.c b/src/radeon_video.c
index 42aa036..6314eb1 100644
--- a/src/radeon_video.c
+++ b/src/radeon_video.c
@@ -135,15 +135,14 @@ radeon_box_area(BoxPtr box)
     return (int) (box->x2 - box->x1) * (int) (box->y2 - box->y1);
 }
 
-int
-radeon_covering_crtc_num(ScrnInfoPtr pScrn,
-			 int x1, int x2, int y1, int y2,
-			 xf86CrtcPtr desired)
+xf86CrtcPtr
+radeon_xv_pick_best_crtc(ScrnInfoPtr pScrn,
+			 int x1, int x2, int y1, int y2)
 {
     xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
-    int			coverage, best_coverage;
-    int			c, best_crtc = 0;
+    int			coverage, best_coverage, c;
     BoxRec		box, crtc_box, cover_box;
+    xf86CrtcPtr         best_crtc = NULL;
 
     box.x1 = x1;
     box.x2 = x2;
@@ -155,10 +154,8 @@ radeon_covering_crtc_num(ScrnInfoPtr pScrn,
 	radeon_crtc_box(crtc, &crtc_box);
 	radeon_box_intersect(&cover_box, &crtc_box, &box);
 	coverage = radeon_box_area(&cover_box);
-	if (coverage && crtc == desired) {
-	    return c;
-	} else if (coverage > best_coverage) {
-	    best_crtc = c;
+	if (coverage > best_coverage) {
+	    best_crtc = crtc;
 	    best_coverage = coverage;
 	}
     }
diff --git a/src/radeon_video.h b/src/radeon_video.h
index 34fb07f..4498002 100644
--- a/src/radeon_video.h
+++ b/src/radeon_video.h
@@ -123,10 +123,9 @@ typedef struct {
     int vsync;
 } RADEONPortPrivRec, *RADEONPortPrivPtr;
 
-int
-radeon_covering_crtc_num(ScrnInfoPtr pScrn,
-                         int x1, int x2, int y1, int y2,
-                         xf86CrtcPtr desired);
+xf86CrtcPtr
+radeon_xv_pick_best_crtc(ScrnInfoPtr pScrn,
+			 int x1, int x2, int y1, int y2);
 
 void RADEONInitI2C(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv);
 void RADEONResetI2C(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv);

commit f8c7d6a6162196a743f6885ecaf63ba50de1722a
Author: Alex Deucher <alexdeucher@gmail.com>
Date:   Sat Apr 4 16:05:20 2009 -0400

    DCE3/3.2: cleanup dpms after previous changes

diff --git a/src/radeon_crtc.c b/src/radeon_crtc.c
index cd0d55e..4b508ce 100644
--- a/src/radeon_crtc.c
+++ b/src/radeon_crtc.c
@@ -115,6 +115,9 @@ radeon_crtc_mode_prepare(xf86CrtcPtr crtc)
 {
     RADEONCrtcPrivatePtr radeon_crtc = crtc->driver_private;
 
+    if (radeon_crtc->initialized)
+	radeon_crtc_dpms(crtc, DPMSModeOff);
+
     if (radeon_crtc->enabled)
 	crtc->funcs->hide_cursor(crtc);
 }
@@ -283,6 +286,8 @@ radeon_crtc_mode_commit(xf86CrtcPtr crtc)
 {
     if (crtc->scrn->pScreen != NULL)
 	xf86_reload_cursors(crtc->scrn->pScreen);
+
+    radeon_crtc_dpms(crtc, DPMSModeOn);
 }
 
 void
diff --git a/src/radeon_output.c b/src/radeon_output.c
index c4041c7..712ac5f 100644
--- a/src/radeon_output.c
+++ b/src/radeon_output.c
@@ -520,32 +520,8 @@ radeon_mode_fixup(xf86OutputPtr output, DisplayModePtr mode,
 static void
 radeon_mode_prepare(xf86OutputPtr output)
 {
-    RADEONInfoPtr info = RADEONPTR(output->scrn);
-    xf86CrtcConfigPtr	config = XF86_CRTC_CONFIG_PTR (output->scrn);
-    int o;
-
-    for (o = 0; o < config->num_output; o++) {
-	xf86OutputPtr loop_output = config->output[o];
-	if (loop_output == output)
-	    continue;
-	else if (loop_output->crtc) {
-	    xf86CrtcPtr other_crtc = loop_output->crtc;
-	    RADEONCrtcPrivatePtr other_radeon_crtc = other_crtc->driver_private;
-	    if (other_crtc->enabled) {
-		if (other_radeon_crtc->initialized) {
-		    radeon_crtc_dpms(other_crtc, DPMSModeOff);
-		    if (IS_AVIVO_VARIANT || info->r4xx_atom)
-			atombios_lock_crtc(info->atomBIOS, other_radeon_crtc->crtc_id, 1);
-		    radeon_dpms(loop_output, DPMSModeOff);
-		}
-	    }
-	}
-    }
-
     radeon_bios_output_lock(output, TRUE);
     radeon_dpms(output, DPMSModeOff);
-    radeon_crtc_dpms(output->crtc, DPMSModeOff);
-
 }
 
 static void
@@ -565,30 +541,7 @@ radeon_mode_set(xf86OutputPtr output, DisplayModePtr mode,
 static void
 radeon_mode_commit(xf86OutputPtr output)
 {
-    RADEONInfoPtr info = RADEONPTR(output->scrn);
-    xf86CrtcConfigPtr	config = XF86_CRTC_CONFIG_PTR (output->scrn);
-    int o;
-
-    for (o = 0; o < config->num_output; o++) {
-	xf86OutputPtr loop_output = config->output[o];
-	if (loop_output == output)
-	    continue;
-	else if (loop_output->crtc) {
-	    xf86CrtcPtr other_crtc = loop_output->crtc;
-	    RADEONCrtcPrivatePtr other_radeon_crtc = other_crtc->driver_private;
-	    if (other_crtc->enabled) {
-		if (other_radeon_crtc->initialized) {
-		    radeon_crtc_dpms(other_crtc, DPMSModeOn);
-		    if (IS_AVIVO_VARIANT || info->r4xx_atom)
-			atombios_lock_crtc(info->atomBIOS, other_radeon_crtc->crtc_id, 0);
-		    radeon_dpms(loop_output, DPMSModeOn);
-		}
-	    }
-	}
-    }
-
     radeon_dpms(output, DPMSModeOn);
-    radeon_crtc_dpms(output->crtc, DPMSModeOn);
     radeon_bios_output_lock(output, FALSE);
 }
 

commit a707d355c3c6ff92252c5a060a1fc32d97547552
Author: Alex Deucher <alexdeucher@gmail.com>
Date:   Sat Apr 4 15:20:01 2009 -0400

    DCE3/3.2: fix up transmitter/encoder setup
    
    Should fix bug 21050

diff --git a/src/atombios_output.c b/src/atombios_output.c
index 4af04c1..60d6c10 100644
--- a/src/atombios_output.c
+++ b/src/atombios_output.c
@@ -61,7 +61,7 @@ const char *device_name[12] = {
 };
 
 static int
-atombios_output_dac_setup(xf86OutputPtr output, DisplayModePtr mode)
+atombios_output_dac_setup(xf86OutputPtr output, int action)
 {
     RADEONOutputPrivatePtr radeon_output = output->driver_private;
     RADEONInfoPtr info       = RADEONPTR(output->scrn);
@@ -71,6 +71,7 @@ atombios_output_dac_setup(xf86OutputPtr output, DisplayModePtr mode)
     AtomBiosArgRec data;
     unsigned char *space;
     int index = 0, num = 0;
+    int clock = radeon_output->pixel_clock;
 
     if (radeon_encoder == NULL)
 	return ATOM_NOT_IMPLEMENTED;
@@ -90,7 +91,7 @@ atombios_output_dac_setup(xf86OutputPtr output, DisplayModePtr mode)
 	break;
     }
 
-    disp_data.ucAction = ATOM_ENABLE;
+    disp_data.ucAction =action;
 
     if (radeon_output->active_device & (ATOM_DEVICE_CRT_SUPPORT))
 	disp_data.ucDacStandard = ATOM_DAC1_PS2;
@@ -113,7 +114,7 @@ atombios_output_dac_setup(xf86OutputPtr output, DisplayModePtr mode)
 	    break;
 	}
     }
-    disp_data.usPixelClock = cpu_to_le16(mode->Clock / 10);
+    disp_data.usPixelClock = cpu_to_le16(clock / 10);
 
     data.exec.index = index;
     data.exec.dataSpace = (void *)&space;
@@ -130,7 +131,7 @@ atombios_output_dac_setup(xf86OutputPtr output, DisplayModePtr mode)
 }
 
 static int
-atombios_output_tv_setup(xf86OutputPtr output, DisplayModePtr mode)
+atombios_output_tv_setup(xf86OutputPtr output, int action)
 {
     RADEONOutputPrivatePtr radeon_output = output->driver_private;
     radeon_tvout_ptr tvout = &radeon_output->tvout;
@@ -138,10 +139,11 @@ atombios_output_tv_setup(xf86OutputPtr output, DisplayModePtr mode)
     TV_ENCODER_CONTROL_PS_ALLOCATION disp_data;
     AtomBiosArgRec data;
     unsigned char *space;
+    int clock = radeon_output->pixel_clock;
 
     memset(&disp_data,0, sizeof(disp_data));
 
-    disp_data.sTVEncoder.ucAction = ATOM_ENABLE;
+    disp_data.sTVEncoder.ucAction = action;
 
     if (radeon_output->active_device & (ATOM_DEVICE_CV_SUPPORT))
 	disp_data.sTVEncoder.ucTvStandard = ATOM_TV_CV;
@@ -177,7 +179,7 @@ atombios_output_tv_setup(xf86OutputPtr output, DisplayModePtr mode)
 	}
     }
 
-    disp_data.sTVEncoder.usPixelClock = cpu_to_le16(mode->Clock / 10);
+    disp_data.sTVEncoder.usPixelClock = cpu_to_le16(clock / 10);
     data.exec.index = GetIndexIntoMasterTable(COMMAND, TVEncoderControl);
     data.exec.dataSpace = (void *)&space;
     data.exec.pspace = &disp_data;
@@ -193,19 +195,21 @@ atombios_output_tv_setup(xf86OutputPtr output, DisplayModePtr mode)
 }
 
 int
-atombios_external_tmds_setup(xf86OutputPtr output, DisplayModePtr mode)
+atombios_external_tmds_setup(xf86OutputPtr output, int action)
 {
+    RADEONOutputPrivatePtr radeon_output = output->driver_private;
     ScrnInfoPtr pScrn = output->scrn;
     RADEONInfoPtr info       = RADEONPTR(pScrn);
     ENABLE_EXTERNAL_TMDS_ENCODER_PS_ALLOCATION disp_data;
     AtomBiosArgRec data;
     unsigned char *space;
+    int clock = radeon_output->pixel_clock;
 
     memset(&disp_data,0, sizeof(disp_data));
 
-    disp_data.sXTmdsEncoder.ucEnable = ATOM_ENABLE;
+    disp_data.sXTmdsEncoder.ucEnable = action;
 
-    if (mode->Clock > 165000)
+    if (clock > 165000)
 	disp_data.sXTmdsEncoder.ucMisc = PANEL_ENCODER_MISC_DUAL;
 
     if (pScrn->rgbBits == 8)
@@ -225,19 +229,21 @@ atombios_external_tmds_setup(xf86OutputPtr output, DisplayModePtr mode)
 }
 
 static int
-atombios_output_ddia_setup(xf86OutputPtr output, DisplayModePtr mode)
+atombios_output_ddia_setup(xf86OutputPtr output, int action)
 {
+    RADEONOutputPrivatePtr radeon_output = output->driver_private;
     RADEONInfoPtr info       = RADEONPTR(output->scrn);
     DVO_ENCODER_CONTROL_PS_ALLOCATION disp_data;
     AtomBiosArgRec data;
     unsigned char *space;
+    int clock = radeon_output->pixel_clock;
 
     memset(&disp_data,0, sizeof(disp_data));
 
-    disp_data.sDVOEncoder.ucAction = ATOM_ENABLE;
-    disp_data.sDVOEncoder.usPixelClock = cpu_to_le16(mode->Clock / 10);
+    disp_data.sDVOEncoder.ucAction = action;
+    disp_data.sDVOEncoder.usPixelClock = cpu_to_le16(clock / 10);
 
-    if (mode->Clock > 165000)
+    if (clock > 165000)
 	disp_data.sDVOEncoder.usDevAttr.sDigAttrib.ucAttribute = PANEL_ENCODER_MISC_DUAL;
 
     data.exec.index = GetIndexIntoMasterTable(COMMAND, DVOEncoderControl);
@@ -254,7 +260,7 @@ atombios_output_ddia_setup(xf86OutputPtr output, DisplayModePtr mode)
 }
 
 static int
-atombios_output_digital_setup(xf86OutputPtr output, DisplayModePtr mode)
+atombios_output_digital_setup(xf86OutputPtr output, int action)
 {
     RADEONOutputPrivatePtr radeon_output = output->driver_private;
     ScrnInfoPtr pScrn = output->scrn;
@@ -267,6 +273,7 @@ atombios_output_digital_setup(xf86OutputPtr output, DisplayModePtr mode)
     int index = 0;
     int major, minor;
     int lvds_misc = 0;
+    int clock = radeon_output->pixel_clock;
 
     if (radeon_encoder == NULL)
 	return ATOM_NOT_IMPLEMENTED;
@@ -308,11 +315,11 @@ atombios_output_digital_setup(xf86OutputPtr output, DisplayModePtr mode)
 	switch (minor) {
 	case 1:
 	    disp_data.ucMisc = 0;
-	    disp_data.ucAction = PANEL_ENCODER_ACTION_ENABLE;
+	    disp_data.ucAction = action;
 	    if ((radeon_output->ConnectorType == CONNECTOR_HDMI_TYPE_A) ||
 		(radeon_output->ConnectorType == CONNECTOR_HDMI_TYPE_B))
 		disp_data.ucMisc |= PANEL_ENCODER_MISC_HDMI_TYPE;
-	    disp_data.usPixelClock = cpu_to_le16(mode->Clock / 10);
+	    disp_data.usPixelClock = cpu_to_le16(clock / 10);
 	    if (radeon_output->active_device & (ATOM_DEVICE_LCD_SUPPORT)) {
 		if (lvds_misc & (1 << 0))
 		    disp_data.ucMisc |= PANEL_ENCODER_MISC_DUAL;
@@ -321,7 +328,7 @@ atombios_output_digital_setup(xf86OutputPtr output, DisplayModePtr mode)
 	    } else {
 		if (radeon_output->linkb)
 		    disp_data.ucMisc |= PANEL_ENCODER_MISC_TMDS_LINKB;
-		if (mode->Clock > 165000)
+		if (clock > 165000)
 		    disp_data.ucMisc |= PANEL_ENCODER_MISC_DUAL;
 		if (pScrn->rgbBits == 8)
 		    disp_data.ucMisc |= (1 << 1);
@@ -331,7 +338,7 @@ atombios_output_digital_setup(xf86OutputPtr output, DisplayModePtr mode)
 	case 2:
 	case 3:
 	    disp_data2.ucMisc = 0;
-	    disp_data2.ucAction = PANEL_ENCODER_ACTION_ENABLE;
+	    disp_data2.ucAction = action;
 	    if (minor == 3) {
 		if (radeon_output->coherent_mode) {
 		    disp_data2.ucMisc |= PANEL_ENCODER_MISC_COHERENT;
@@ -341,7 +348,7 @@ atombios_output_digital_setup(xf86OutputPtr output, DisplayModePtr mode)
 	    if ((radeon_output->ConnectorType == CONNECTOR_HDMI_TYPE_A) ||
 		(radeon_output->ConnectorType == CONNECTOR_HDMI_TYPE_B))
 		disp_data2.ucMisc |= PANEL_ENCODER_MISC_HDMI_TYPE;
-	    disp_data2.usPixelClock = cpu_to_le16(mode->Clock / 10);
+	    disp_data2.usPixelClock = cpu_to_le16(clock / 10);
 	    disp_data2.ucTruncate = 0;
 	    disp_data2.ucSpatial = 0;
 	    disp_data2.ucTemporal = 0;
@@ -364,7 +371,7 @@ atombios_output_digital_setup(xf86OutputPtr output, DisplayModePtr mode)
 	    } else {
 		if (radeon_output->linkb)
 		    disp_data2.ucMisc |= PANEL_ENCODER_MISC_TMDS_LINKB;
-		if (mode->Clock > 165000)
+		if (clock > 165000)
 		    disp_data2.ucMisc |= PANEL_ENCODER_MISC_DUAL;
 	    }
 	    data.exec.pspace = &disp_data2;
@@ -488,16 +495,17 @@ dp_link_clock_for_mode_clock(int mode_clock)
 }
 
 static int
-atombios_output_dig_encoder_setup(xf86OutputPtr output, DisplayModePtr mode)
+atombios_output_dig_encoder_setup(xf86OutputPtr output, int action)
 {
     RADEONOutputPrivatePtr radeon_output = output->driver_private;
-    RADEONCrtcPrivatePtr radeon_crtc = output->crtc->driver_private;
     RADEONInfoPtr info       = RADEONPTR(output->scrn);
     radeon_encoder_ptr radeon_encoder = radeon_get_encoder(output);
     DIG_ENCODER_CONTROL_PS_ALLOCATION disp_data;
     AtomBiosArgRec data;
     unsigned char *space;
     int index = 0, major, minor, num = 0;
+    int clock = radeon_output->pixel_clock;
+    int dig_block = radeon_output->dig_block;
 
     if (radeon_encoder == NULL)
 	return ATOM_NOT_IMPLEMENTED;
@@ -505,11 +513,11 @@ atombios_output_dig_encoder_setup(xf86OutputPtr output, DisplayModePtr mode)
     memset(&disp_data,0, sizeof(disp_data));
 
     if (IS_DCE32_VARIANT) {
-	if (radeon_crtc->crtc_id)
+	if (dig_block)
 	    index = GetIndexIntoMasterTable(COMMAND, DIG2EncoderControl);
 	else
 	    index = GetIndexIntoMasterTable(COMMAND, DIG1EncoderControl);
-	num = radeon_crtc->crtc_id + 1;
+	num = dig_block + 1;
     } else {
 	switch (radeon_encoder->encoder_id) {
 	case ENCODER_OBJECT_ID_INTERNAL_TMDS1:
@@ -529,8 +537,8 @@ atombios_output_dig_encoder_setup(xf86OutputPtr output, DisplayModePtr mode)
 
     atombios_get_command_table_version(info->atomBIOS, index, &major, &minor);
 
-    disp_data.ucAction = ATOM_ENABLE;
-    disp_data.usPixelClock = cpu_to_le16(mode->Clock / 10);
+    disp_data.ucAction = action;
+    disp_data.usPixelClock = cpu_to_le16(clock / 10);
 
     if (IS_DCE32_VARIANT) {
 	switch (radeon_encoder->encoder_id) {
@@ -569,11 +577,11 @@ atombios_output_dig_encoder_setup(xf86OutputPtr output, DisplayModePtr mode)
 	else
 	    disp_data.ucConfig |= ATOM_ENCODER_CONFIG_LINKA;
 
-	if (dp_link_clock_for_mode_clock(mode->Clock) == 27000)
+	if (dp_link_clock_for_mode_clock(clock) == 27000)
 	    disp_data.ucConfig |= ATOM_ENCODER_CONFIG_DPLINKRATE_2_70GHZ;
 
-	disp_data.ucLaneNum = dp_lanes_for_mode_clock(mode->Clock);
-    } else if (mode->Clock > 165000) {
+	disp_data.ucLaneNum = dp_lanes_for_mode_clock(clock);
+    } else if (clock > 165000) {
 	disp_data.ucConfig |= ATOM_ENCODER_CONFIG_LINKA_B;
 	disp_data.ucLaneNum = 8;
     } else {
@@ -605,10 +613,9 @@ union dig_transmitter_control {
 };
 
 static int
-atombios_output_dig_transmitter_setup(xf86OutputPtr output, DisplayModePtr mode)
+atombios_output_dig_transmitter_setup(xf86OutputPtr output, int action)
 {
     RADEONOutputPrivatePtr radeon_output = output->driver_private;
-    RADEONCrtcPrivatePtr radeon_crtc = output->crtc->driver_private;
     RADEONInfoPtr info       = RADEONPTR(output->scrn);
     radeon_encoder_ptr radeon_encoder = radeon_get_encoder(output);
     union dig_transmitter_control disp_data;
@@ -616,6 +623,8 @@ atombios_output_dig_transmitter_setup(xf86OutputPtr output, DisplayModePtr mode)
     unsigned char *space;
     int index = 0, num = 0;
     int major, minor;
+    int clock = radeon_output->pixel_clock;
+    int dig_block = radeon_output->dig_block;
 
     if (radeon_encoder == NULL)
         return ATOM_NOT_IMPLEMENTED;
@@ -641,20 +650,20 @@ atombios_output_dig_transmitter_setup(xf86OutputPtr output, DisplayModePtr mode)
 
     atombios_get_command_table_version(info->atomBIOS, index, &major, &minor);
 
-    disp_data.v1.ucAction = ATOM_TRANSMITTER_ACTION_ENABLE;
+    disp_data.v1.ucAction = action;
 
     if (IS_DCE32_VARIANT) {
 	if (radeon_output->MonType == MT_DP) {
 	    disp_data.v2.usPixelClock =
-		cpu_to_le16(dp_link_clock_for_mode_clock(mode->Clock));
+		cpu_to_le16(dp_link_clock_for_mode_clock(clock));
 	    disp_data.v2.acConfig.fDPConnector = 1;
-	} else if (mode->Clock > 165000) {
-	    disp_data.v2.usPixelClock = cpu_to_le16((mode->Clock * 10 * 2) / 100);
+	} else if (clock > 165000) {
+	    disp_data.v2.usPixelClock = cpu_to_le16((clock * 10 * 2) / 100);
 	    disp_data.v2.acConfig.fDualLinkConnector = 1;
 	} else {
-	    disp_data.v2.usPixelClock = cpu_to_le16((mode->Clock * 10 * 4) / 100);
+	    disp_data.v2.usPixelClock = cpu_to_le16((clock * 10 * 4) / 100);
 	}
-	if (radeon_crtc->crtc_id)
+	if (dig_block)
 	    disp_data.v2.acConfig.ucEncoderSel = 1;
 
 	switch (radeon_encoder->encoder_id) {
@@ -684,9 +693,9 @@ atombios_output_dig_transmitter_setup(xf86OutputPtr output, DisplayModePtr mode)
 
 	if (radeon_output->MonType == MT_DP)
 	    disp_data.v1.usPixelClock =
-		cpu_to_le16(dp_link_clock_for_mode_clock(mode->Clock));
+		cpu_to_le16(dp_link_clock_for_mode_clock(clock));
 	else
-	    disp_data.v1.usPixelClock = cpu_to_le16((mode->Clock) / 10);
+	    disp_data.v1.usPixelClock = cpu_to_le16((clock) / 10);
 
 	switch (radeon_encoder->encoder_id) {
 	case ENCODER_OBJECT_ID_INTERNAL_UNIPHY:
@@ -704,7 +713,7 @@ atombios_output_dig_transmitter_setup(xf86OutputPtr output, DisplayModePtr mode)
 	case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1:
 	    disp_data.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_DIG1_ENCODER;
 	    if (info->IsIGP) {
-		if (mode->Clock > 165000) {
+		if (clock > 165000) {
 		    disp_data.v1.ucConfig |= (ATOM_TRANSMITTER_CONFIG_8LANE_LINK |
 					      ATOM_TRANSMITTER_CONFIG_LINKA_B);
 		    /* guess */
@@ -724,7 +733,7 @@ atombios_output_dig_transmitter_setup(xf86OutputPtr output, DisplayModePtr mode)
 			disp_data.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_LANE_12_15;
 		}
 	    } else {
-		if (mode->Clock > 165000)
+		if (clock > 165000)
 		    disp_data.v1.ucConfig |= (ATOM_TRANSMITTER_CONFIG_8LANE_LINK |
 					      ATOM_TRANSMITTER_CONFIG_LINKA_B |
 					      ATOM_TRANSMITTER_CONFIG_LANE_0_7);
@@ -741,7 +750,7 @@ atombios_output_dig_transmitter_setup(xf86OutputPtr output, DisplayModePtr mode)
 	case ENCODER_OBJECT_ID_INTERNAL_LVTM1:
 	case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA:
 	    disp_data.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_DIG2_ENCODER;
-	    if (mode->Clock > 165000)
+	    if (clock > 165000)
 		disp_data.v1.ucConfig |= (ATOM_TRANSMITTER_CONFIG_8LANE_LINK |
 					  ATOM_TRANSMITTER_CONFIG_LINKA_B |
 					  ATOM_TRANSMITTER_CONFIG_LANE_0_7);
@@ -767,7 +776,6 @@ atombios_output_dig_transmitter_setup(xf86OutputPtr output, DisplayModePtr mode)
 	    }
 	}
     }
-    radeon_output->transmitter_config = disp_data.v1.ucConfig;
 
     data.exec.index = index;
     data.exec.dataSpace = (void *)&space;
@@ -1125,7 +1133,7 @@ atombios_output_overscan_setup(xf86OutputPtr output, DisplayModePtr mode, Displa
 }
 
 static int
-atombios_output_scaler_setup(xf86OutputPtr output, DisplayModePtr mode)
+atombios_output_scaler_setup(xf86OutputPtr output)
 {
     RADEONInfoPtr info       = RADEONPTR(output->scrn);
     RADEONOutputPrivatePtr radeon_output = output->driver_private;
@@ -1213,63 +1221,6 @@ atombios_output_scaler_setup(xf86OutputPtr output, DisplayModePtr mode)
 
 }
 
-static int
-atombios_dig_dpms(xf86OutputPtr output, int mode)
-{
-    RADEONOutputPrivatePtr radeon_output = output->driver_private;
-    RADEONInfoPtr info       = RADEONPTR(output->scrn);
-    radeon_encoder_ptr radeon_encoder = radeon_get_encoder(output);
-    DIG_TRANSMITTER_CONTROL_PS_ALLOCATION disp_data;
-    AtomBiosArgRec data;
-    unsigned char *space;
-
-    if (radeon_encoder == NULL)
-	return ATOM_NOT_IMPLEMENTED;
-
-    memset(&disp_data, 0, sizeof(disp_data));
-
-    switch (mode) {
-    case DPMSModeOn:
-	disp_data.ucAction = ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT;
-	break;
-    case DPMSModeStandby:
-    case DPMSModeSuspend:
-    case DPMSModeOff:
-	disp_data.ucAction = ATOM_TRANSMITTER_ACTION_DISABLE_OUTPUT;
-	break;
-    }
-
-    disp_data.ucConfig = radeon_output->transmitter_config;
-
-    if (IS_DCE32_VARIANT)
-	data.exec.index = GetIndexIntoMasterTable(COMMAND, UNIPHYTransmitterControl);
-    else {
-	switch (radeon_encoder->encoder_id) {
-	case ENCODER_OBJECT_ID_INTERNAL_TMDS1:
-	case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1:
-	case ENCODER_OBJECT_ID_INTERNAL_UNIPHY:
-	    data.exec.index = GetIndexIntoMasterTable(COMMAND, DIG1TransmitterControl);
-	    break;
-	case ENCODER_OBJECT_ID_INTERNAL_LVDS:
-	case ENCODER_OBJECT_ID_INTERNAL_LVTM1:
-	case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA:
-	    data.exec.index = GetIndexIntoMasterTable(COMMAND, DIG2TransmitterControl);
-	    break;
-	}
-    }
-    data.exec.dataSpace = (void *)&space;
-    data.exec.pspace = &disp_data;
-
-    if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
-	ErrorF("Output DIG dpms success\n");
-	return ATOM_SUCCESS;
-    }
-
-    ErrorF("Output DIG dpms failed\n");
-    return ATOM_NOT_IMPLEMENTED;
-
-}
-
 void
 atombios_output_dpms(xf86OutputPtr output, int mode)
 {
@@ -1334,7 +1285,7 @@ atombios_output_dpms(xf86OutputPtr output, int mode)
     case DPMSModeOn:
 	radeon_encoder->devices |= radeon_output->active_device;
 	if (is_dig)
-	    (void)atombios_dig_dpms(output, mode);


Reply to: