Rev 3192 | Rev 5271 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3192 | Rev 3764 | ||
---|---|---|---|
Line 665... | Line 665... | ||
665 | } |
665 | } |
Line 666... | Line 666... | ||
666 | 666 | ||
667 | int |
667 | int |
668 | atombios_get_encoder_mode(struct drm_encoder *encoder) |
668 | atombios_get_encoder_mode(struct drm_encoder *encoder) |
- | 669 | { |
|
- | 670 | struct drm_device *dev = encoder->dev; |
|
669 | { |
671 | struct radeon_device *rdev = dev->dev_private; |
670 | struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); |
672 | struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); |
671 | struct drm_connector *connector; |
673 | struct drm_connector *connector; |
672 | struct radeon_connector *radeon_connector; |
674 | struct radeon_connector *radeon_connector; |
Line 691... | Line 693... | ||
691 | 693 | ||
692 | switch (connector->connector_type) { |
694 | switch (connector->connector_type) { |
693 | case DRM_MODE_CONNECTOR_DVII: |
695 | case DRM_MODE_CONNECTOR_DVII: |
694 | case DRM_MODE_CONNECTOR_HDMIB: /* HDMI-B is basically DL-DVI; analog works fine */ |
696 | case DRM_MODE_CONNECTOR_HDMIB: /* HDMI-B is basically DL-DVI; analog works fine */ |
695 | if (drm_detect_hdmi_monitor(radeon_connector->edid) && |
697 | if (drm_detect_hdmi_monitor(radeon_connector->edid) && |
- | 698 | radeon_audio && |
|
696 | radeon_audio) |
699 | !ASIC_IS_DCE6(rdev)) /* remove once we support DCE6 */ |
697 | return ATOM_ENCODER_MODE_HDMI; |
700 | return ATOM_ENCODER_MODE_HDMI; |
698 | else if (radeon_connector->use_digital) |
701 | else if (radeon_connector->use_digital) |
699 | return ATOM_ENCODER_MODE_DVI; |
702 | return ATOM_ENCODER_MODE_DVI; |
700 | else |
703 | else |
701 | return ATOM_ENCODER_MODE_CRT; |
704 | return ATOM_ENCODER_MODE_CRT; |
702 | break; |
705 | break; |
703 | case DRM_MODE_CONNECTOR_DVID: |
706 | case DRM_MODE_CONNECTOR_DVID: |
704 | case DRM_MODE_CONNECTOR_HDMIA: |
707 | case DRM_MODE_CONNECTOR_HDMIA: |
705 | default: |
708 | default: |
706 | if (drm_detect_hdmi_monitor(radeon_connector->edid) && |
709 | if (drm_detect_hdmi_monitor(radeon_connector->edid) && |
- | 710 | radeon_audio && |
|
707 | radeon_audio) |
711 | !ASIC_IS_DCE6(rdev)) /* remove once we support DCE6 */ |
708 | return ATOM_ENCODER_MODE_HDMI; |
712 | return ATOM_ENCODER_MODE_HDMI; |
709 | else |
713 | else |
710 | return ATOM_ENCODER_MODE_DVI; |
714 | return ATOM_ENCODER_MODE_DVI; |
711 | break; |
715 | break; |
Line 716... | Line 720... | ||
716 | dig_connector = radeon_connector->con_priv; |
720 | dig_connector = radeon_connector->con_priv; |
717 | if ((dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) || |
721 | if ((dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) || |
718 | (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP)) |
722 | (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP)) |
719 | return ATOM_ENCODER_MODE_DP; |
723 | return ATOM_ENCODER_MODE_DP; |
720 | else if (drm_detect_hdmi_monitor(radeon_connector->edid) && |
724 | else if (drm_detect_hdmi_monitor(radeon_connector->edid) && |
721 | radeon_audio) |
725 | radeon_audio && |
- | 726 | !ASIC_IS_DCE6(rdev)) /* remove once we support DCE6 */ |
|
722 | return ATOM_ENCODER_MODE_HDMI; |
727 | return ATOM_ENCODER_MODE_HDMI; |
723 | else |
728 | else |
724 | return ATOM_ENCODER_MODE_DVI; |
729 | return ATOM_ENCODER_MODE_DVI; |
725 | break; |
730 | break; |
726 | case DRM_MODE_CONNECTOR_eDP: |
731 | case DRM_MODE_CONNECTOR_eDP: |
Line 2148... | Line 2153... | ||
2148 | } |
2153 | } |
Line 2149... | Line 2154... | ||
2149 | 2154 | ||
Line 2150... | Line 2155... | ||
2150 | atombios_apply_encoder_quirks(encoder, adjusted_mode); |
2155 | atombios_apply_encoder_quirks(encoder, adjusted_mode); |
2151 | - | ||
2152 | if (atombios_get_encoder_mode(encoder) == ATOM_ENCODER_MODE_HDMI) { |
2156 | |
2153 | r600_hdmi_enable(encoder); |
2157 | if (atombios_get_encoder_mode(encoder) == ATOM_ENCODER_MODE_HDMI) { |
2154 | if (ASIC_IS_DCE6(rdev)) |
- | |
2155 | ; /* TODO (use pointers instead of if-s?) */ |
2158 | if (rdev->asic->display.hdmi_enable) |
2156 | else if (ASIC_IS_DCE4(rdev)) |
- | |
2157 | evergreen_hdmi_setmode(encoder, adjusted_mode); |
2159 | radeon_hdmi_enable(rdev, encoder, true); |
2158 | else |
2160 | if (rdev->asic->display.hdmi_setmode) |
2159 | r600_hdmi_setmode(encoder, adjusted_mode); |
2161 | radeon_hdmi_setmode(rdev, encoder, adjusted_mode); |
Line 2160... | Line 2162... | ||
2160 | } |
2162 | } |
2161 | } |
2163 | } |
Line 2411... | Line 2413... | ||
2411 | break; |
2413 | break; |
2412 | } |
2414 | } |
Line 2413... | Line 2415... | ||
2413 | 2415 | ||
2414 | disable_done: |
2416 | disable_done: |
2415 | if (radeon_encoder_is_digital(encoder)) { |
2417 | if (radeon_encoder_is_digital(encoder)) { |
- | 2418 | if (atombios_get_encoder_mode(encoder) == ATOM_ENCODER_MODE_HDMI) { |
|
2416 | if (atombios_get_encoder_mode(encoder) == ATOM_ENCODER_MODE_HDMI) |
2419 | if (rdev->asic->display.hdmi_enable) |
- | 2420 | radeon_hdmi_enable(rdev, encoder, false); |
|
2417 | r600_hdmi_disable(encoder); |
2421 | } |
2418 | dig = radeon_encoder->enc_priv; |
2422 | dig = radeon_encoder->enc_priv; |
2419 | dig->dig_encoder = -1; |
2423 | dig->dig_encoder = -1; |
2420 | } |
2424 | } |
2421 | radeon_encoder->active_device = 0; |
2425 | radeon_encoder->active_device = 0; |