Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

radeon/audio: applied audio_dpms() and audio_mode_set() calls

Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Slava Grigorev <slava.grigorev@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Slava Grigorev and committed by
Alex Deucher
6f945693 6e72376d

+27 -26
+11 -10
drivers/gpu/drm/radeon/atombios_encoders.c
··· 1616 1616 struct radeon_connector *radeon_connector = NULL; 1617 1617 struct radeon_connector_atom_dig *radeon_dig_connector = NULL; 1618 1618 bool travis_quirk = false; 1619 + int encoder_mode; 1619 1620 1620 1621 if (connector) { 1621 1622 radeon_connector = to_radeon_connector(connector); ··· 1712 1711 } 1713 1712 break; 1714 1713 } 1714 + 1715 + encoder_mode = atombios_get_encoder_mode(encoder); 1716 + if (radeon_audio != 0 && 1717 + (encoder_mode == ATOM_ENCODER_MODE_HDMI || ENCODER_MODE_IS_DP(encoder_mode))) 1718 + radeon_audio_dpms(encoder, mode); 1715 1719 } 1716 1720 1717 1721 static void ··· 2130 2124 struct drm_device *dev = encoder->dev; 2131 2125 struct radeon_device *rdev = dev->dev_private; 2132 2126 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); 2127 + int encoder_mode; 2133 2128 2134 2129 radeon_encoder->pixel_clock = adjusted_mode->clock; 2135 2130 ··· 2157 2150 case ENCODER_OBJECT_ID_INTERNAL_UNIPHY3: 2158 2151 case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA: 2159 2152 /* handled in dpms */ 2153 + encoder_mode = atombios_get_encoder_mode(encoder); 2154 + if (radeon_audio != 0 && 2155 + (encoder_mode == ATOM_ENCODER_MODE_HDMI || ENCODER_MODE_IS_DP(encoder_mode))) 2156 + radeon_audio_mode_set(encoder, adjusted_mode); 2160 2157 break; 2161 2158 case ENCODER_OBJECT_ID_INTERNAL_DDI: 2162 2159 case ENCODER_OBJECT_ID_INTERNAL_DVO1: ··· 2182 2171 } 2183 2172 2184 2173 atombios_apply_encoder_quirks(encoder, adjusted_mode); 2185 - 2186 - if (atombios_get_encoder_mode(encoder) == ATOM_ENCODER_MODE_HDMI) { 2187 - if (rdev->asic->display.hdmi_enable) 2188 - radeon_hdmi_enable(rdev, encoder, true); 2189 - radeon_audio_mode_set(encoder, adjusted_mode); 2190 - } 2191 2174 } 2192 2175 2193 2176 static bool ··· 2447 2442 2448 2443 disable_done: 2449 2444 if (radeon_encoder_is_digital(encoder)) { 2450 - if (atombios_get_encoder_mode(encoder) == ATOM_ENCODER_MODE_HDMI) { 2451 - if (rdev->asic->display.hdmi_enable) 2452 - radeon_hdmi_enable(rdev, encoder, false); 2453 - } 2454 2445 dig = radeon_encoder->enc_priv; 2455 2446 dig->dig_encoder = -1; 2456 2447 }
-14
drivers/gpu/drm/radeon/radeon_asic.c
··· 638 638 .wait_for_vblank = &avivo_wait_for_vblank, 639 639 .set_backlight_level = &atombios_set_backlight_level, 640 640 .get_backlight_level = &atombios_get_backlight_level, 641 - .hdmi_enable = &r600_hdmi_enable, 642 641 }, 643 642 .copy = { 644 643 .blit = &r100_copy_blit, ··· 704 705 .wait_for_vblank = &avivo_wait_for_vblank, 705 706 .set_backlight_level = &atombios_set_backlight_level, 706 707 .get_backlight_level = &atombios_get_backlight_level, 707 - .hdmi_enable = &r600_hdmi_enable, 708 708 }, 709 709 .copy = { 710 710 .blit = &r100_copy_blit, ··· 931 933 .wait_for_vblank = &avivo_wait_for_vblank, 932 934 .set_backlight_level = &atombios_set_backlight_level, 933 935 .get_backlight_level = &atombios_get_backlight_level, 934 - .hdmi_enable = &r600_hdmi_enable, 935 936 }, 936 937 .copy = { 937 938 .blit = &r600_copy_cpdma, ··· 1015 1018 .wait_for_vblank = &avivo_wait_for_vblank, 1016 1019 .set_backlight_level = &atombios_set_backlight_level, 1017 1020 .get_backlight_level = &atombios_get_backlight_level, 1018 - .hdmi_enable = &r600_hdmi_enable, 1019 1021 }, 1020 1022 .copy = { 1021 1023 .blit = &r600_copy_cpdma, ··· 1104 1108 .wait_for_vblank = &avivo_wait_for_vblank, 1105 1109 .set_backlight_level = &atombios_set_backlight_level, 1106 1110 .get_backlight_level = &atombios_get_backlight_level, 1107 - .hdmi_enable = &r600_hdmi_enable, 1108 1111 }, 1109 1112 .copy = { 1110 1113 .blit = &r600_copy_cpdma, ··· 1206 1211 .wait_for_vblank = &avivo_wait_for_vblank, 1207 1212 .set_backlight_level = &atombios_set_backlight_level, 1208 1213 .get_backlight_level = &atombios_get_backlight_level, 1209 - .hdmi_enable = &r600_hdmi_enable, 1210 1214 }, 1211 1215 .copy = { 1212 1216 .blit = &r600_copy_cpdma, ··· 1322 1328 .wait_for_vblank = &dce4_wait_for_vblank, 1323 1329 .set_backlight_level = &atombios_set_backlight_level, 1324 1330 .get_backlight_level = &atombios_get_backlight_level, 1325 - .hdmi_enable = &evergreen_hdmi_enable, 1326 1331 }, 1327 1332 .copy = { 1328 1333 .blit = &r600_copy_cpdma, ··· 1412 1419 .wait_for_vblank = &dce4_wait_for_vblank, 1413 1420 .set_backlight_level = &atombios_set_backlight_level, 1414 1421 .get_backlight_level = &atombios_get_backlight_level, 1415 - .hdmi_enable = &evergreen_hdmi_enable, 1416 1422 }, 1417 1423 .copy = { 1418 1424 .blit = &r600_copy_cpdma, ··· 1501 1509 .wait_for_vblank = &dce4_wait_for_vblank, 1502 1510 .set_backlight_level = &atombios_set_backlight_level, 1503 1511 .get_backlight_level = &atombios_get_backlight_level, 1504 - .hdmi_enable = &evergreen_hdmi_enable, 1505 1512 }, 1506 1513 .copy = { 1507 1514 .blit = &r600_copy_cpdma, ··· 1645 1654 .wait_for_vblank = &dce4_wait_for_vblank, 1646 1655 .set_backlight_level = &atombios_set_backlight_level, 1647 1656 .get_backlight_level = &atombios_get_backlight_level, 1648 - .hdmi_enable = &evergreen_hdmi_enable, 1649 1657 }, 1650 1658 .copy = { 1651 1659 .blit = &r600_copy_cpdma, ··· 1746 1756 .wait_for_vblank = &dce4_wait_for_vblank, 1747 1757 .set_backlight_level = &atombios_set_backlight_level, 1748 1758 .get_backlight_level = &atombios_get_backlight_level, 1749 - .hdmi_enable = &evergreen_hdmi_enable, 1750 1759 }, 1751 1760 .copy = { 1752 1761 .blit = &r600_copy_cpdma, ··· 1877 1888 .wait_for_vblank = &dce4_wait_for_vblank, 1878 1889 .set_backlight_level = &atombios_set_backlight_level, 1879 1890 .get_backlight_level = &atombios_get_backlight_level, 1880 - .hdmi_enable = &evergreen_hdmi_enable, 1881 1891 }, 1882 1892 .copy = { 1883 1893 .blit = &r600_copy_cpdma, ··· 2042 2054 .wait_for_vblank = &dce4_wait_for_vblank, 2043 2055 .set_backlight_level = &atombios_set_backlight_level, 2044 2056 .get_backlight_level = &atombios_get_backlight_level, 2045 - .hdmi_enable = &evergreen_hdmi_enable, 2046 2057 }, 2047 2058 .copy = { 2048 2059 .blit = &cik_copy_cpdma, ··· 2151 2164 .wait_for_vblank = &dce4_wait_for_vblank, 2152 2165 .set_backlight_level = &atombios_set_backlight_level, 2153 2166 .get_backlight_level = &atombios_get_backlight_level, 2154 - .hdmi_enable = &evergreen_hdmi_enable, 2155 2167 }, 2156 2168 .copy = { 2157 2169 .blit = &cik_copy_cpdma,
-2
drivers/gpu/drm/radeon/radeon_asic.h
··· 398 398 void r600_hdmi_audio_workaround(struct drm_encoder *encoder); 399 399 int r600_hdmi_buffer_status_changed(struct drm_encoder *encoder); 400 400 void r600_hdmi_update_audio_settings(struct drm_encoder *encoder); 401 - void r600_hdmi_enable(struct drm_encoder *encoder, bool enable); 402 401 int r600_mc_wait_for_idle(struct radeon_device *rdev); 403 402 u32 r600_get_xclk(struct radeon_device *rdev); 404 403 uint64_t r600_get_gpu_clock_counter(struct radeon_device *rdev); ··· 535 536 uint64_t src_offset, uint64_t dst_offset, 536 537 unsigned num_gpu_pages, 537 538 struct reservation_object *resv); 538 - void evergreen_hdmi_enable(struct drm_encoder *encoder, bool enable); 539 539 int evergreen_get_temp(struct radeon_device *rdev); 540 540 int sumo_get_temp(struct radeon_device *rdev); 541 541 int tn_get_temp(struct radeon_device *rdev);
+14
drivers/gpu/drm/radeon/radeon_audio.c
··· 97 97 void dce4_set_mute(struct drm_encoder *encoder, u32 offset, bool mute); 98 98 static void radeon_audio_hdmi_mode_set(struct drm_encoder *encoder, 99 99 struct drm_display_mode *mode); 100 + void r600_hdmi_enable(struct drm_encoder *encoder, bool enable); 101 + void evergreen_hdmi_enable(struct drm_encoder *encoder, bool enable); 100 102 101 103 static const u32 pin_offsets[7] = 102 104 { ··· 155 153 .set_audio_packet = r600_set_audio_packet, 156 154 .set_mute = r600_set_mute, 157 155 .mode_set = radeon_audio_hdmi_mode_set, 156 + .dpms = r600_hdmi_enable, 158 157 }; 159 158 160 159 static struct radeon_audio_funcs dce32_hdmi_funcs = { ··· 169 166 .set_audio_packet = dce3_2_set_audio_packet, 170 167 .set_mute = dce3_2_set_mute, 171 168 .mode_set = radeon_audio_hdmi_mode_set, 169 + .dpms = r600_hdmi_enable, 172 170 }; 173 171 174 172 static struct radeon_audio_funcs dce32_dp_funcs = { ··· 193 189 .set_audio_packet = dce4_set_audio_packet, 194 190 .set_mute = dce4_set_mute, 195 191 .mode_set = radeon_audio_hdmi_mode_set, 192 + .dpms = evergreen_hdmi_enable, 196 193 }; 197 194 198 195 static struct radeon_audio_funcs dce4_dp_funcs = { ··· 219 214 .set_audio_packet = dce4_set_audio_packet, 220 215 .set_mute = dce4_set_mute, 221 216 .mode_set = radeon_audio_hdmi_mode_set, 217 + .dpms = evergreen_hdmi_enable, 222 218 }; 223 219 224 220 static struct radeon_audio_funcs dce6_dp_funcs = { ··· 710 704 711 705 if (radeon_encoder->audio && radeon_encoder->audio->mode_set) 712 706 radeon_encoder->audio->mode_set(encoder, mode); 707 + } 708 + 709 + void radeon_audio_dpms(struct drm_encoder *encoder, int mode) 710 + { 711 + struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); 712 + 713 + if (radeon_encoder->audio && radeon_encoder->audio->dpms) 714 + radeon_encoder->audio->dpms(encoder, mode == DRM_MODE_DPMS_ON); 713 715 }
+2
drivers/gpu/drm/radeon/radeon_audio.h
··· 63 63 void (*set_mute)(struct drm_encoder *encoder, u32 offset, bool mute); 64 64 void (*mode_set)(struct drm_encoder *encoder, 65 65 struct drm_display_mode *mode); 66 + void (*dpms)(struct drm_encoder *encoder, bool mode); 66 67 }; 67 68 68 69 int radeon_audio_init(struct radeon_device *rdev); ··· 79 78 void radeon_audio_fini(struct radeon_device *rdev); 80 79 void radeon_audio_mode_set(struct drm_encoder *encoder, 81 80 struct drm_display_mode *mode); 81 + void radeon_audio_dpms(struct drm_encoder *encoder, int mode); 82 82 83 83 #endif