diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/atombios_encoders.c')
| -rw-r--r-- | drivers/gpu/drm/radeon/atombios_encoders.c | 54 |
1 files changed, 36 insertions, 18 deletions
diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c index 32923d2f6002..5e891b226acf 100644 --- a/drivers/gpu/drm/radeon/atombios_encoders.c +++ b/drivers/gpu/drm/radeon/atombios_encoders.c | |||
| @@ -707,24 +707,37 @@ atombios_get_encoder_mode(struct drm_encoder *encoder) | |||
| 707 | switch (connector->connector_type) { | 707 | switch (connector->connector_type) { |
| 708 | case DRM_MODE_CONNECTOR_DVII: | 708 | case DRM_MODE_CONNECTOR_DVII: |
| 709 | case DRM_MODE_CONNECTOR_HDMIB: /* HDMI-B is basically DL-DVI; analog works fine */ | 709 | case DRM_MODE_CONNECTOR_HDMIB: /* HDMI-B is basically DL-DVI; analog works fine */ |
| 710 | if ((radeon_connector->audio == RADEON_AUDIO_ENABLE) || | 710 | if (radeon_audio != 0) { |
| 711 | (drm_detect_hdmi_monitor(radeon_connector->edid) && | 711 | if (radeon_connector->use_digital && |
| 712 | (radeon_connector->audio == RADEON_AUDIO_AUTO))) | 712 | (radeon_connector->audio == RADEON_AUDIO_ENABLE)) |
| 713 | return ATOM_ENCODER_MODE_HDMI; | 713 | return ATOM_ENCODER_MODE_HDMI; |
| 714 | else if (radeon_connector->use_digital) | 714 | else if (drm_detect_hdmi_monitor(radeon_connector->edid) && |
| 715 | (radeon_connector->audio == RADEON_AUDIO_AUTO)) | ||
| 716 | return ATOM_ENCODER_MODE_HDMI; | ||
| 717 | else if (radeon_connector->use_digital) | ||
| 718 | return ATOM_ENCODER_MODE_DVI; | ||
| 719 | else | ||
| 720 | return ATOM_ENCODER_MODE_CRT; | ||
| 721 | } else if (radeon_connector->use_digital) { | ||
| 715 | return ATOM_ENCODER_MODE_DVI; | 722 | return ATOM_ENCODER_MODE_DVI; |
| 716 | else | 723 | } else { |
| 717 | return ATOM_ENCODER_MODE_CRT; | 724 | return ATOM_ENCODER_MODE_CRT; |
| 725 | } | ||
| 718 | break; | 726 | break; |
| 719 | case DRM_MODE_CONNECTOR_DVID: | 727 | case DRM_MODE_CONNECTOR_DVID: |
| 720 | case DRM_MODE_CONNECTOR_HDMIA: | 728 | case DRM_MODE_CONNECTOR_HDMIA: |
| 721 | default: | 729 | default: |
| 722 | if ((radeon_connector->audio == RADEON_AUDIO_ENABLE) || | 730 | if (radeon_audio != 0) { |
| 723 | (drm_detect_hdmi_monitor(radeon_connector->edid) && | 731 | if (radeon_connector->audio == RADEON_AUDIO_ENABLE) |
| 724 | (radeon_connector->audio == RADEON_AUDIO_AUTO))) | 732 | return ATOM_ENCODER_MODE_HDMI; |
| 725 | return ATOM_ENCODER_MODE_HDMI; | 733 | else if (drm_detect_hdmi_monitor(radeon_connector->edid) && |
| 726 | else | 734 | (radeon_connector->audio == RADEON_AUDIO_AUTO)) |
| 735 | return ATOM_ENCODER_MODE_HDMI; | ||
| 736 | else | ||
| 737 | return ATOM_ENCODER_MODE_DVI; | ||
| 738 | } else { | ||
| 727 | return ATOM_ENCODER_MODE_DVI; | 739 | return ATOM_ENCODER_MODE_DVI; |
| 740 | } | ||
| 728 | break; | 741 | break; |
| 729 | case DRM_MODE_CONNECTOR_LVDS: | 742 | case DRM_MODE_CONNECTOR_LVDS: |
| 730 | return ATOM_ENCODER_MODE_LVDS; | 743 | return ATOM_ENCODER_MODE_LVDS; |
| @@ -732,14 +745,19 @@ atombios_get_encoder_mode(struct drm_encoder *encoder) | |||
| 732 | case DRM_MODE_CONNECTOR_DisplayPort: | 745 | case DRM_MODE_CONNECTOR_DisplayPort: |
| 733 | dig_connector = radeon_connector->con_priv; | 746 | dig_connector = radeon_connector->con_priv; |
| 734 | if ((dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) || | 747 | if ((dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) || |
| 735 | (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP)) | 748 | (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP)) { |
| 736 | return ATOM_ENCODER_MODE_DP; | 749 | return ATOM_ENCODER_MODE_DP; |
| 737 | else if ((radeon_connector->audio == RADEON_AUDIO_ENABLE) || | 750 | } else if (radeon_audio != 0) { |
| 738 | (drm_detect_hdmi_monitor(radeon_connector->edid) && | 751 | if (radeon_connector->audio == RADEON_AUDIO_ENABLE) |
| 739 | (radeon_connector->audio == RADEON_AUDIO_AUTO))) | 752 | return ATOM_ENCODER_MODE_HDMI; |
| 740 | return ATOM_ENCODER_MODE_HDMI; | 753 | else if (drm_detect_hdmi_monitor(radeon_connector->edid) && |
| 741 | else | 754 | (radeon_connector->audio == RADEON_AUDIO_AUTO)) |
| 755 | return ATOM_ENCODER_MODE_HDMI; | ||
| 756 | else | ||
| 757 | return ATOM_ENCODER_MODE_DVI; | ||
| 758 | } else { | ||
| 742 | return ATOM_ENCODER_MODE_DVI; | 759 | return ATOM_ENCODER_MODE_DVI; |
| 760 | } | ||
| 743 | break; | 761 | break; |
| 744 | case DRM_MODE_CONNECTOR_eDP: | 762 | case DRM_MODE_CONNECTOR_eDP: |
| 745 | return ATOM_ENCODER_MODE_DP; | 763 | return ATOM_ENCODER_MODE_DP; |
| @@ -1655,7 +1673,7 @@ radeon_atom_encoder_dpms_dig(struct drm_encoder *encoder, int mode) | |||
| 1655 | * does the same thing and more. | 1673 | * does the same thing and more. |
| 1656 | */ | 1674 | */ |
| 1657 | if ((rdev->family != CHIP_RV710) && (rdev->family != CHIP_RV730) && | 1675 | if ((rdev->family != CHIP_RV710) && (rdev->family != CHIP_RV730) && |
| 1658 | (rdev->family != CHIP_RS880)) | 1676 | (rdev->family != CHIP_RS780) && (rdev->family != CHIP_RS880)) |
| 1659 | atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT, 0, 0); | 1677 | atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT, 0, 0); |
| 1660 | } | 1678 | } |
| 1661 | if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) && connector) { | 1679 | if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) && connector) { |
