diff options
author | Slava Grigorev <slava.grigorev@amd.com> | 2016-01-26 16:45:10 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2016-01-27 12:47:28 -0500 |
commit | c9a392eac18409f51a071520cf508c0b4ad990e2 (patch) | |
tree | c0664325a71115eb8513dc70d10fd816deee4fd4 | |
parent | 08b21d30c6f619aa3718620a7de91207d28bdbc5 (diff) |
drm/radeon: cleaned up VCO output settings for DP audio
This is preparation for the fixes in the following patches.
Signed-off-by: Slava Grigorev <slava.grigorev@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
-rw-r--r-- | drivers/gpu/drm/radeon/dce6_afmt.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_atombios.c | 12 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_audio.c | 8 |
4 files changed, 10 insertions, 14 deletions
diff --git a/drivers/gpu/drm/radeon/dce6_afmt.c b/drivers/gpu/drm/radeon/dce6_afmt.c index 6bfc46369db1..ea4e3fc2744f 100644 --- a/drivers/gpu/drm/radeon/dce6_afmt.c +++ b/drivers/gpu/drm/radeon/dce6_afmt.c | |||
@@ -315,7 +315,7 @@ void dce6_dp_audio_set_dto(struct radeon_device *rdev, | |||
315 | div = 0; | 315 | div = 0; |
316 | 316 | ||
317 | if (div) | 317 | if (div) |
318 | clock = rdev->clock.gpupll_outputfreq * 10 / div; | 318 | clock /= div; |
319 | 319 | ||
320 | WREG32(DCE8_DCCG_AUDIO_DTO1_PHASE, 24000); | 320 | WREG32(DCE8_DCCG_AUDIO_DTO1_PHASE, 24000); |
321 | WREG32(DCE8_DCCG_AUDIO_DTO1_MODULE, clock); | 321 | WREG32(DCE8_DCCG_AUDIO_DTO1_MODULE, clock); |
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h index 5ae6db98aa4d..78a51b3eda10 100644 --- a/drivers/gpu/drm/radeon/radeon.h +++ b/drivers/gpu/drm/radeon/radeon.h | |||
@@ -268,7 +268,7 @@ struct radeon_clock { | |||
268 | uint32_t current_dispclk; | 268 | uint32_t current_dispclk; |
269 | uint32_t dp_extclk; | 269 | uint32_t dp_extclk; |
270 | uint32_t max_pixel_clock; | 270 | uint32_t max_pixel_clock; |
271 | uint32_t gpupll_outputfreq; | 271 | uint32_t vco_freq; |
272 | }; | 272 | }; |
273 | 273 | ||
274 | /* | 274 | /* |
diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c index 08fc1b5effa8..9a9363a7e5b9 100644 --- a/drivers/gpu/drm/radeon/radeon_atombios.c +++ b/drivers/gpu/drm/radeon/radeon_atombios.c | |||
@@ -1257,12 +1257,14 @@ bool radeon_atom_get_clock_info(struct drm_device *dev) | |||
1257 | rdev->mode_info.firmware_flags = | 1257 | rdev->mode_info.firmware_flags = |
1258 | le16_to_cpu(firmware_info->info.usFirmwareCapability.susAccess); | 1258 | le16_to_cpu(firmware_info->info.usFirmwareCapability.susAccess); |
1259 | 1259 | ||
1260 | if (ASIC_IS_DCE8(rdev)) { | 1260 | if (ASIC_IS_DCE8(rdev)) |
1261 | rdev->clock.gpupll_outputfreq = | 1261 | rdev->clock.vco_freq = |
1262 | le32_to_cpu(firmware_info->info_22.ulGPUPLL_OutputFreq); | 1262 | le32_to_cpu(firmware_info->info_22.ulGPUPLL_OutputFreq); |
1263 | if (rdev->clock.gpupll_outputfreq == 0) | 1263 | else |
1264 | rdev->clock.gpupll_outputfreq = 360000; /* 3.6 GHz */ | 1264 | rdev->clock.vco_freq = rdev->clock.current_dispclk; |
1265 | } | 1265 | |
1266 | if (rdev->clock.vco_freq == 0) | ||
1267 | rdev->clock.vco_freq = 360000; /* 3.6 GHz */ | ||
1266 | 1268 | ||
1267 | return true; | 1269 | return true; |
1268 | } | 1270 | } |
diff --git a/drivers/gpu/drm/radeon/radeon_audio.c b/drivers/gpu/drm/radeon/radeon_audio.c index 2c02e99b5f95..85e1c234f020 100644 --- a/drivers/gpu/drm/radeon/radeon_audio.c +++ b/drivers/gpu/drm/radeon/radeon_audio.c | |||
@@ -739,9 +739,6 @@ static void radeon_audio_dp_mode_set(struct drm_encoder *encoder, | |||
739 | struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); | 739 | struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); |
740 | struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv; | 740 | struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv; |
741 | struct drm_connector *connector = radeon_get_connector_for_encoder(encoder); | 741 | struct drm_connector *connector = radeon_get_connector_for_encoder(encoder); |
742 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); | ||
743 | struct radeon_connector_atom_dig *dig_connector = | ||
744 | radeon_connector->con_priv; | ||
745 | 742 | ||
746 | if (!dig || !dig->afmt) | 743 | if (!dig || !dig->afmt) |
747 | return; | 744 | return; |
@@ -753,10 +750,7 @@ static void radeon_audio_dp_mode_set(struct drm_encoder *encoder, | |||
753 | radeon_audio_write_speaker_allocation(encoder); | 750 | radeon_audio_write_speaker_allocation(encoder); |
754 | radeon_audio_write_sad_regs(encoder); | 751 | radeon_audio_write_sad_regs(encoder); |
755 | radeon_audio_write_latency_fields(encoder, mode); | 752 | radeon_audio_write_latency_fields(encoder, mode); |
756 | if (rdev->clock.dp_extclk || ASIC_IS_DCE5(rdev)) | 753 | radeon_audio_set_dto(encoder, rdev->clock.vco_freq * 10); |
757 | radeon_audio_set_dto(encoder, rdev->clock.default_dispclk * 10); | ||
758 | else | ||
759 | radeon_audio_set_dto(encoder, dig_connector->dp_clock); | ||
760 | radeon_audio_set_audio_packet(encoder); | 754 | radeon_audio_set_audio_packet(encoder); |
761 | radeon_audio_select_pin(encoder); | 755 | radeon_audio_select_pin(encoder); |
762 | 756 | ||