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 at gmail.com>
---
Dave: I think we should not hit this without enabled hdmi support on RS6x0, so
I can wait for next merge window (2.6.36).
---
 drivers/gpu/drm/radeon/r600_audio.c |    6 ++++--
 drivers/gpu/drm/radeon/radeon.h     |    1 +
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/radeon/r600_audio.c 
b/drivers/gpu/drm/radeon/r600_audio.c
index 2b26553..631e1ed 100644
--- a/drivers/gpu/drm/radeon/r600_audio.c
+++ b/drivers/gpu/drm/radeon/r600_audio.c
@@ -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);
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index 084221d..2013dd7 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -1065,6 +1065,7 @@ struct radeon_device {
        struct mutex vram_mutex;

        /* audio stuff */
+       bool                    audio_enabled;
        struct timer_list       audio_timer;
        int                     audio_channels;
        int                     audio_rate;
-- 
1.6.4.2

Reply via email to