From 899d95f31b3a405b2e4d126ec5d5be11c9110fb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= Date: Thu, 8 Mar 2012 22:22:10 +0100 Subject: [PATCH] drm/radeon/kms/audio: read correct regs on Evergreen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Rafał Miłecki --- drivers/gpu/drm/radeon/evergreen_reg.h | 3 +++ drivers/gpu/drm/radeon/r600_audio.c | 18 +++++++++++++----- drivers/gpu/drm/radeon/radeon.h | 2 ++ 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/radeon/evergreen_reg.h b/drivers/gpu/drm/radeon/evergreen_reg.h index 4215de9..9856291 100644 --- a/drivers/gpu/drm/radeon/evergreen_reg.h +++ b/drivers/gpu/drm/radeon/evergreen_reg.h @@ -43,6 +43,9 @@ #define EVERGREEN_AUDIO_ENABLE 0x5e78 #define EVERGREEN_AUDIO_VENDOR_ID 0x5ec0 +#define EVERGREEN_AUDIO_RATE_BPS_CHANNEL 0x5f00 +#define EVERGREEN_AUDIO_CAT_STATUS 0x5f18 + /* GRPH blocks at 0x6800, 0x7400, 0x10000, 0x10c00, 0x11800, 0x12400 */ #define EVERGREEN_GRPH_ENABLE 0x6800 #define EVERGREEN_GRPH_CONTROL 0x6804 diff --git a/drivers/gpu/drm/radeon/r600_audio.c b/drivers/gpu/drm/radeon/r600_audio.c index ba66f30..ecf2292 100644 --- a/drivers/gpu/drm/radeon/r600_audio.c +++ b/drivers/gpu/drm/radeon/r600_audio.c @@ -47,7 +47,7 @@ static int r600_audio_chipset_supported(struct radeon_device *rdev) */ int r600_audio_channels(struct radeon_device *rdev) { - return (RREG32(R600_AUDIO_RATE_BPS_CHANNEL) & 0x7) + 1; + return (RREG32(rdev->audio_reg_rate_bps_ch) & 0x7) + 1; } /* @@ -55,7 +55,7 @@ int r600_audio_channels(struct radeon_device *rdev) */ int r600_audio_bits_per_sample(struct radeon_device *rdev) { - uint32_t value = (RREG32(R600_AUDIO_RATE_BPS_CHANNEL) & 0xF0) >> 4; + uint32_t value = (RREG32(rdev->audio_reg_rate_bps_ch) & 0xF0) >> 4; switch (value) { case 0x0: return 8; case 0x1: return 16; @@ -75,7 +75,7 @@ int r600_audio_bits_per_sample(struct radeon_device *rdev) */ int r600_audio_rate(struct radeon_device *rdev) { - uint32_t value = RREG32(R600_AUDIO_RATE_BPS_CHANNEL); + uint32_t value = RREG32(rdev->audio_reg_rate_bps_ch); uint32_t result; if (value & 0x4000) @@ -94,7 +94,7 @@ int r600_audio_rate(struct radeon_device *rdev) */ uint8_t r600_audio_status_bits(struct radeon_device *rdev) { - return RREG32(R600_AUDIO_STATUS_BITS) & 0xff; + return RREG32(rdev->audio_reg_cat_status) & 0xff; } /* @@ -102,7 +102,7 @@ uint8_t r600_audio_status_bits(struct radeon_device *rdev) */ uint8_t r600_audio_category_code(struct radeon_device *rdev) { - return (RREG32(R600_AUDIO_STATUS_BITS) >> 8) & 0xff; + return (RREG32(rdev->audio_reg_cat_status) >> 8) & 0xff; } /* @@ -184,6 +184,14 @@ int r600_audio_init(struct radeon_device *rdev) if (!radeon_audio || !r600_audio_chipset_supported(rdev)) return 0; + if (ASIC_IS_DCE4(rdev)) { + rdev->audio_reg_rate_bps_ch = EVERGREEN_AUDIO_RATE_BPS_CHANNEL; + rdev->audio_reg_cat_status = EVERGREEN_AUDIO_CAT_STATUS; + } else { + rdev->audio_reg_rate_bps_ch = R600_AUDIO_RATE_BPS_CHANNEL; + rdev->audio_reg_cat_status = R600_AUDIO_STATUS_BITS; + } + r600_audio_engine_enable(rdev, true); rdev->audio_channels = -1; diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h index 1668ec1..d98c55f 100644 --- a/drivers/gpu/drm/radeon/radeon.h +++ b/drivers/gpu/drm/radeon/radeon.h @@ -1474,6 +1474,8 @@ struct radeon_device { /* audio stuff */ bool audio_enabled; struct timer_list audio_timer; + uint32_t audio_reg_rate_bps_ch; + uint32_t audio_reg_cat_status; int audio_channels; int audio_rate; int audio_bits_per_sample; -- 1.7.7