diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2013-10-14 13:17:50 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2013-10-18 16:16:19 -0400 |
commit | 108dc8e8b44a4c64ac53676cc05f6234340ccd4a (patch) | |
tree | de4c6ff5a55ec7878a79b78511af25bdf4623848 | |
parent | 4b7495770cc4a4e7973ea8079dd15d2618f3636a (diff) |
drm/radeon: rework audio option
In 3.12 I changed audio to be enabled by default,
but you still had to turn it on via xrandr. This
was confusing to users so change it to minic the
previous behavior:
- audio option is set to -1 (auto) by default which is
the current 3.12 behavior (audio is enabled but requires
xrandr to turn it on).
- if audio = 1, the audio is enabled without needing
to mess with xrandr (previous behavior)
- audio = 0 disables audio
It retains the new feature of allowing the user to enable
audio on the fly with xrandr, but turns audio on
automatically if radeon.audio=1 is set which is what
most users expect.
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
-rw-r--r-- | drivers/gpu/drm/radeon/atombios_encoders.c | 52 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_connectors.c | 33 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_drv.c | 4 |
3 files changed, 58 insertions, 31 deletions
diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c index 2a761f29133c..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; |
diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c index 79159b5da05b..64565732cb98 100644 --- a/drivers/gpu/drm/radeon/radeon_connectors.c +++ b/drivers/gpu/drm/radeon/radeon_connectors.c | |||
@@ -1658,9 +1658,12 @@ radeon_add_atom_connector(struct drm_device *dev, | |||
1658 | drm_object_attach_property(&radeon_connector->base.base, | 1658 | drm_object_attach_property(&radeon_connector->base.base, |
1659 | rdev->mode_info.underscan_vborder_property, | 1659 | rdev->mode_info.underscan_vborder_property, |
1660 | 0); | 1660 | 0); |
1661 | drm_object_attach_property(&radeon_connector->base.base, | 1661 | if (radeon_audio != 0) |
1662 | rdev->mode_info.audio_property, | 1662 | drm_object_attach_property(&radeon_connector->base.base, |
1663 | RADEON_AUDIO_DISABLE); | 1663 | rdev->mode_info.audio_property, |
1664 | (radeon_audio == 1) ? | ||
1665 | RADEON_AUDIO_AUTO : | ||
1666 | RADEON_AUDIO_DISABLE); | ||
1664 | subpixel_order = SubPixelHorizontalRGB; | 1667 | subpixel_order = SubPixelHorizontalRGB; |
1665 | connector->interlace_allowed = true; | 1668 | connector->interlace_allowed = true; |
1666 | if (connector_type == DRM_MODE_CONNECTOR_HDMIB) | 1669 | if (connector_type == DRM_MODE_CONNECTOR_HDMIB) |
@@ -1754,10 +1757,12 @@ radeon_add_atom_connector(struct drm_device *dev, | |||
1754 | rdev->mode_info.underscan_vborder_property, | 1757 | rdev->mode_info.underscan_vborder_property, |
1755 | 0); | 1758 | 0); |
1756 | } | 1759 | } |
1757 | if (ASIC_IS_DCE2(rdev)) { | 1760 | if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) { |
1758 | drm_object_attach_property(&radeon_connector->base.base, | 1761 | drm_object_attach_property(&radeon_connector->base.base, |
1759 | rdev->mode_info.audio_property, | 1762 | rdev->mode_info.audio_property, |
1760 | RADEON_AUDIO_DISABLE); | 1763 | (radeon_audio == 1) ? |
1764 | RADEON_AUDIO_AUTO : | ||
1765 | RADEON_AUDIO_DISABLE); | ||
1761 | } | 1766 | } |
1762 | if (connector_type == DRM_MODE_CONNECTOR_DVII) { | 1767 | if (connector_type == DRM_MODE_CONNECTOR_DVII) { |
1763 | radeon_connector->dac_load_detect = true; | 1768 | radeon_connector->dac_load_detect = true; |
@@ -1799,10 +1804,12 @@ radeon_add_atom_connector(struct drm_device *dev, | |||
1799 | rdev->mode_info.underscan_vborder_property, | 1804 | rdev->mode_info.underscan_vborder_property, |
1800 | 0); | 1805 | 0); |
1801 | } | 1806 | } |
1802 | if (ASIC_IS_DCE2(rdev)) { | 1807 | if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) { |
1803 | drm_object_attach_property(&radeon_connector->base.base, | 1808 | drm_object_attach_property(&radeon_connector->base.base, |
1804 | rdev->mode_info.audio_property, | 1809 | rdev->mode_info.audio_property, |
1805 | RADEON_AUDIO_DISABLE); | 1810 | (radeon_audio == 1) ? |
1811 | RADEON_AUDIO_AUTO : | ||
1812 | RADEON_AUDIO_DISABLE); | ||
1806 | } | 1813 | } |
1807 | subpixel_order = SubPixelHorizontalRGB; | 1814 | subpixel_order = SubPixelHorizontalRGB; |
1808 | connector->interlace_allowed = true; | 1815 | connector->interlace_allowed = true; |
@@ -1843,10 +1850,12 @@ radeon_add_atom_connector(struct drm_device *dev, | |||
1843 | rdev->mode_info.underscan_vborder_property, | 1850 | rdev->mode_info.underscan_vborder_property, |
1844 | 0); | 1851 | 0); |
1845 | } | 1852 | } |
1846 | if (ASIC_IS_DCE2(rdev)) { | 1853 | if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) { |
1847 | drm_object_attach_property(&radeon_connector->base.base, | 1854 | drm_object_attach_property(&radeon_connector->base.base, |
1848 | rdev->mode_info.audio_property, | 1855 | rdev->mode_info.audio_property, |
1849 | RADEON_AUDIO_DISABLE); | 1856 | (radeon_audio == 1) ? |
1857 | RADEON_AUDIO_AUTO : | ||
1858 | RADEON_AUDIO_DISABLE); | ||
1850 | } | 1859 | } |
1851 | connector->interlace_allowed = true; | 1860 | connector->interlace_allowed = true; |
1852 | /* in theory with a DP to VGA converter... */ | 1861 | /* in theory with a DP to VGA converter... */ |
diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c index cdd12dcd988b..9c14a1ba1de4 100644 --- a/drivers/gpu/drm/radeon/radeon_drv.c +++ b/drivers/gpu/drm/radeon/radeon_drv.c | |||
@@ -153,7 +153,7 @@ int radeon_benchmarking = 0; | |||
153 | int radeon_testing = 0; | 153 | int radeon_testing = 0; |
154 | int radeon_connector_table = 0; | 154 | int radeon_connector_table = 0; |
155 | int radeon_tv = 1; | 155 | int radeon_tv = 1; |
156 | int radeon_audio = 1; | 156 | int radeon_audio = -1; |
157 | int radeon_disp_priority = 0; | 157 | int radeon_disp_priority = 0; |
158 | int radeon_hw_i2c = 0; | 158 | int radeon_hw_i2c = 0; |
159 | int radeon_pcie_gen2 = -1; | 159 | int radeon_pcie_gen2 = -1; |
@@ -196,7 +196,7 @@ module_param_named(connector_table, radeon_connector_table, int, 0444); | |||
196 | MODULE_PARM_DESC(tv, "TV enable (0 = disable)"); | 196 | MODULE_PARM_DESC(tv, "TV enable (0 = disable)"); |
197 | module_param_named(tv, radeon_tv, int, 0444); | 197 | module_param_named(tv, radeon_tv, int, 0444); |
198 | 198 | ||
199 | MODULE_PARM_DESC(audio, "Audio enable (1 = enable)"); | 199 | MODULE_PARM_DESC(audio, "Audio enable (-1 = auto, 0 = disable, 1 = enable)"); |
200 | module_param_named(audio, radeon_audio, int, 0444); | 200 | module_param_named(audio, radeon_audio, int, 0444); |
201 | 201 | ||
202 | MODULE_PARM_DESC(disp_priority, "Display Priority (0 = auto, 1 = normal, 2 = high)"); | 202 | MODULE_PARM_DESC(disp_priority, "Display Priority (0 = auto, 1 = normal, 2 = high)"); |