I don't think this patch is correct. R200 did not actually have a TV dac. It was an external DAC connected via DVO. To do load detection on it, you'd probably have to mess with the external dac. Alex On Mon, Oct 29, 2012 at 8:43 AM, Egbert Eich <eich@xxxxxxx> wrote: > Signed-off-by: Egbert Eich <eich@xxxxxxx> > --- > drivers/gpu/drm/radeon/radeon_legacy_encoders.c | 17 ++++++++++++++++- > 1 files changed, 16 insertions(+), 1 deletions(-) > > diff --git a/drivers/gpu/drm/radeon/radeon_legacy_encoders.c b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c > index a1409e9..ef18569 100644 > --- a/drivers/gpu/drm/radeon/radeon_legacy_encoders.c > +++ b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c > @@ -679,6 +679,9 @@ static enum drm_connector_status radeon_legacy_primary_dac_detect(struct drm_enc > if (RREG32(RADEON_DAC_CNTL) & RADEON_DAC_CMP_OUTPUT) > found = connector_status_connected; > > + DRM_DEBUG_KMS("[%s]: Load detected: %s\n", drm_get_encoder_name(encoder), > + (found == connector_status_connected) ? "yes" : "no"); > + > /* restore the regs we used */ > WREG32(RADEON_DAC_CNTL, dac_cntl); > WREG32(RADEON_DAC_MACRO_CNTL, dac_macro_cntl); > @@ -1420,7 +1423,7 @@ static enum drm_connector_status radeon_legacy_tv_dac_detect(struct drm_encoder > struct radeon_device *rdev = dev->dev_private; > uint32_t crtc2_gen_cntl, tv_dac_cntl, dac_cntl2, dac_ext_cntl; > uint32_t gpiopad_a = 0, pixclks_cntl, tmp; > - uint32_t disp_output_cntl = 0, disp_hw_debug = 0; > + uint32_t disp_output_cntl = 0, disp_hw_debug = 0, fp2_gen_cntl = 0; > enum drm_connector_status found = connector_status_disconnected; > struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); > struct radeon_encoder_tv_dac *tv_dac = radeon_encoder->enc_priv; > @@ -1462,6 +1465,8 @@ static enum drm_connector_status radeon_legacy_tv_dac_detect(struct drm_encoder > if (ASIC_IS_R300(rdev)) { > gpiopad_a = RREG32(RADEON_GPIOPAD_A); > disp_output_cntl = RREG32(RADEON_DISP_OUTPUT_CNTL); > + } else if (rdev->family == CHIP_R200) { > + fp2_gen_cntl = RREG32(RADEON_FP2_GEN_CNTL); > } else { > disp_hw_debug = RREG32(RADEON_DISP_HW_DEBUG); > } > @@ -1484,6 +1489,11 @@ static enum drm_connector_status radeon_legacy_tv_dac_detect(struct drm_encoder > tmp = disp_output_cntl & ~RADEON_DISP_TVDAC_SOURCE_MASK; > tmp |= RADEON_DISP_TVDAC_SOURCE_CRTC2; > WREG32(RADEON_DISP_OUTPUT_CNTL, tmp); > + } else if (rdev->family == CHIP_R200) { > + tmp = fp2_gen_cntl & ~(R200_FP2_SOURCE_SEL_MASK | > + RADEON_FP2_DVO_RATE_SEL_SDR); > + tmp |= RADEON_DISP_TV_PATH_SRC_CRTC2; > + WREG32(RADEON_FP2_GEN_CNTL, tmp); > } else { > tmp = disp_hw_debug & ~RADEON_CRT2_DISP1_SEL; > WREG32(RADEON_DISP_HW_DEBUG, tmp); > @@ -1524,6 +1534,9 @@ static enum drm_connector_status radeon_legacy_tv_dac_detect(struct drm_encoder > found = connector_status_connected; > } > > + DRM_DEBUG_KMS("[%s]: Load detected: %s\n", drm_get_encoder_name(encoder), > + (found == connector_status_connected) ? "yes" : "no"); > + > /* restore regs we used */ > WREG32(RADEON_DAC_CNTL2, dac_cntl2); > WREG32(RADEON_DAC_EXT_CNTL, dac_ext_cntl); > @@ -1533,6 +1546,8 @@ static enum drm_connector_status radeon_legacy_tv_dac_detect(struct drm_encoder > if (ASIC_IS_R300(rdev)) { > WREG32(RADEON_DISP_OUTPUT_CNTL, disp_output_cntl); > WREG32_P(RADEON_GPIOPAD_A, gpiopad_a, ~1); > + } else if (rdev->family == CHIP_R200) { > + WREG32(RADEON_FP2_GEN_CNTL, fp2_gen_cntl); > } else { > WREG32(RADEON_DISP_HW_DEBUG, disp_hw_debug); > } > -- > 1.7.6.3 > _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel