| From e1accbf0543eecfdb161131208c3dfefee22d61f Mon Sep 17 00:00:00 2001 |
| From: Alex Deucher <alexander.deucher@amd.com> |
| Date: Mon, 29 Jul 2013 18:56:13 -0400 |
| Subject: drm/radeon: select audio dto based on encoder id for DCE3 |
| |
| From: Alex Deucher <alexander.deucher@amd.com> |
| |
| commit e1accbf0543eecfdb161131208c3dfefee22d61f upstream. |
| |
| There are two audio dtos on radeon asics that you can |
| select between. Normally, dto0 is used for hdmi and |
| dto1 for DP, but it seems that the dto is somehow |
| tied to the encoders on DCE3 asics. |
| |
| fixes: |
| https://bugs.freedesktop.org/show_bug.cgi?id=67435 |
| |
| Signed-off-by: Alex Deucher <alexander.deucher@amd.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/gpu/drm/radeon/r600_hdmi.c | 12 +++++++++--- |
| 1 file changed, 9 insertions(+), 3 deletions(-) |
| |
| --- a/drivers/gpu/drm/radeon/r600_hdmi.c |
| +++ b/drivers/gpu/drm/radeon/r600_hdmi.c |
| @@ -242,9 +242,15 @@ void r600_audio_set_dto(struct drm_encod |
| /* according to the reg specs, this should DCE3.2 only, but in |
| * practice it seems to cover DCE3.0 as well. |
| */ |
| - WREG32(DCCG_AUDIO_DTO0_PHASE, base_rate * 100); |
| - WREG32(DCCG_AUDIO_DTO0_MODULE, clock * 100); |
| - WREG32(DCCG_AUDIO_DTO_SELECT, 0); /* select DTO0 */ |
| + if (dig->dig_encoder == 0) { |
| + WREG32(DCCG_AUDIO_DTO0_PHASE, base_rate * 100); |
| + WREG32(DCCG_AUDIO_DTO0_MODULE, clock * 100); |
| + WREG32(DCCG_AUDIO_DTO_SELECT, 0); /* select DTO0 */ |
| + } else { |
| + WREG32(DCCG_AUDIO_DTO1_PHASE, base_rate * 100); |
| + WREG32(DCCG_AUDIO_DTO1_MODULE, clock * 100); |
| + WREG32(DCCG_AUDIO_DTO_SELECT, 1); /* select DTO1 */ |
| + } |
| } else { |
| /* according to the reg specs, this should be DCE2.0 and DCE3.0 */ |
| WREG32(AUDIO_DTO, AUDIO_DTO_PHASE(base_rate / 10) | |