Rebased ref, commits from common ancestor:
commit 1b02b93895c31a0c9d641e47b46dce43b40edd97
Author: Alex Deucher <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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);


-- 
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]

Reply via email to