forked from Minki/linux
drm/radeon: Add a common function for DFS handling
Move encoding of DFS (digital frequency synthesizer) divider into a separate function and improve calculation precision. 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
This commit is contained in:
parent
c9a392eac1
commit
a64c9dab1c
@ -304,18 +304,10 @@ void dce6_dp_audio_set_dto(struct radeon_device *rdev,
|
||||
unsigned int div = (RREG32(DENTIST_DISPCLK_CNTL) &
|
||||
DENTIST_DPREFCLK_WDIVIDER_MASK) >>
|
||||
DENTIST_DPREFCLK_WDIVIDER_SHIFT;
|
||||
|
||||
if (div < 128 && div >= 96)
|
||||
div -= 64;
|
||||
else if (div >= 64)
|
||||
div = div / 2 - 16;
|
||||
else if (div >= 8)
|
||||
div /= 4;
|
||||
else
|
||||
div = 0;
|
||||
div = radeon_audio_decode_dfs_div(div);
|
||||
|
||||
if (div)
|
||||
clock /= div;
|
||||
clock = clock * 100 / div;
|
||||
|
||||
WREG32(DCE8_DCCG_AUDIO_DTO1_PHASE, 24000);
|
||||
WREG32(DCE8_DCCG_AUDIO_DTO1_MODULE, clock);
|
||||
|
@ -775,3 +775,15 @@ void radeon_audio_dpms(struct drm_encoder *encoder, int mode)
|
||||
if (radeon_encoder->audio && radeon_encoder->audio->dpms)
|
||||
radeon_encoder->audio->dpms(encoder, mode == DRM_MODE_DPMS_ON);
|
||||
}
|
||||
|
||||
unsigned int radeon_audio_decode_dfs_div(unsigned int div)
|
||||
{
|
||||
if (div >= 8 && div < 64)
|
||||
return (div - 8) * 25 + 200;
|
||||
else if (div >= 64 && div < 96)
|
||||
return (div - 64) * 50 + 1600;
|
||||
else if (div >= 96 && div < 128)
|
||||
return (div - 96) * 100 + 3200;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
@ -79,5 +79,6 @@ void radeon_audio_fini(struct radeon_device *rdev);
|
||||
void radeon_audio_mode_set(struct drm_encoder *encoder,
|
||||
struct drm_display_mode *mode);
|
||||
void radeon_audio_dpms(struct drm_encoder *encoder, int mode);
|
||||
unsigned int radeon_audio_decode_dfs_div(unsigned int div);
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user