667,6 → 667,8 |
int |
atombios_get_encoder_mode(struct drm_encoder *encoder) |
{ |
struct drm_device *dev = encoder->dev; |
struct radeon_device *rdev = dev->dev_private; |
struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); |
struct drm_connector *connector; |
struct radeon_connector *radeon_connector; |
693,7 → 695,8 |
case DRM_MODE_CONNECTOR_DVII: |
case DRM_MODE_CONNECTOR_HDMIB: /* HDMI-B is basically DL-DVI; analog works fine */ |
if (drm_detect_hdmi_monitor(radeon_connector->edid) && |
radeon_audio) |
radeon_audio && |
!ASIC_IS_DCE6(rdev)) /* remove once we support DCE6 */ |
return ATOM_ENCODER_MODE_HDMI; |
else if (radeon_connector->use_digital) |
return ATOM_ENCODER_MODE_DVI; |
704,7 → 707,8 |
case DRM_MODE_CONNECTOR_HDMIA: |
default: |
if (drm_detect_hdmi_monitor(radeon_connector->edid) && |
radeon_audio) |
radeon_audio && |
!ASIC_IS_DCE6(rdev)) /* remove once we support DCE6 */ |
return ATOM_ENCODER_MODE_HDMI; |
else |
return ATOM_ENCODER_MODE_DVI; |
718,7 → 722,8 |
(dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP)) |
return ATOM_ENCODER_MODE_DP; |
else if (drm_detect_hdmi_monitor(radeon_connector->edid) && |
radeon_audio) |
radeon_audio && |
!ASIC_IS_DCE6(rdev)) /* remove once we support DCE6 */ |
return ATOM_ENCODER_MODE_HDMI; |
else |
return ATOM_ENCODER_MODE_DVI; |
2150,13 → 2155,10 |
atombios_apply_encoder_quirks(encoder, adjusted_mode); |
|
if (atombios_get_encoder_mode(encoder) == ATOM_ENCODER_MODE_HDMI) { |
r600_hdmi_enable(encoder); |
if (ASIC_IS_DCE6(rdev)) |
; /* TODO (use pointers instead of if-s?) */ |
else if (ASIC_IS_DCE4(rdev)) |
evergreen_hdmi_setmode(encoder, adjusted_mode); |
else |
r600_hdmi_setmode(encoder, adjusted_mode); |
if (rdev->asic->display.hdmi_enable) |
radeon_hdmi_enable(rdev, encoder, true); |
if (rdev->asic->display.hdmi_setmode) |
radeon_hdmi_setmode(rdev, encoder, adjusted_mode); |
} |
} |
|
2413,8 → 2415,10 |
|
disable_done: |
if (radeon_encoder_is_digital(encoder)) { |
if (atombios_get_encoder_mode(encoder) == ATOM_ENCODER_MODE_HDMI) |
r600_hdmi_disable(encoder); |
if (atombios_get_encoder_mode(encoder) == ATOM_ENCODER_MODE_HDMI) { |
if (rdev->asic->display.hdmi_enable) |
radeon_hdmi_enable(rdev, encoder, false); |
} |
dig = radeon_encoder->enc_priv; |
dig->dig_encoder = -1; |
} |