drm/radeon/kms: track audio engine state, do not use not setup timer

This is needed to enable audio support on devices using polling. In case user
decides to disable audio (module parameter) we still will try to use timer in
r600_audio_enable_polling. This would lead to BUG in kernel/timer.c.

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
Rafał Miłecki 2010-06-19 12:24:56 +02:00 коммит произвёл Dave Airlie
Родитель e7aeeba6a8
Коммит 7eea7e9eea
2 изменённых файлов: 5 добавлений и 2 удалений

Просмотреть файл

@ -160,6 +160,7 @@ static void r600_audio_engine_enable(struct radeon_device *rdev, bool enable)
{
DRM_INFO("%s audio support", enable ? "Enabling" : "Disabling");
WREG32_P(R600_AUDIO_ENABLE, enable ? 0x81000000 : 0x0, ~0x81000000);
rdev->audio_enabled = enable;
}
/*
@ -200,7 +201,8 @@ void r600_audio_enable_polling(struct drm_encoder *encoder)
return;
radeon_encoder->audio_polling_active = 1;
mod_timer(&rdev->audio_timer, jiffies + 1);
if (rdev->audio_enabled)
mod_timer(&rdev->audio_timer, jiffies + 1);
}
/*
@ -266,7 +268,7 @@ void r600_audio_set_clock(struct drm_encoder *encoder, int clock)
*/
void r600_audio_fini(struct radeon_device *rdev)
{
if (!radeon_audio || !r600_audio_chipset_supported(rdev))
if (!rdev->audio_enabled)
return;
del_timer(&rdev->audio_timer);

Просмотреть файл

@ -1084,6 +1084,7 @@ struct radeon_device {
struct mutex vram_mutex;
/* audio stuff */
bool audio_enabled;
struct timer_list audio_timer;
int audio_channels;
int audio_rate;