[ALSA] cs5535audio: fix PRD register save/restore power management race
commit222fa0b0d2fdb2373a71d532c2cabd2ec920b3b3
authorAndres Salomon <dilinger@debian.org>
Mon, 3 Sep 2007 13:42:16 +0000 (3 15:42 +0200)
committerJaroslav Kysela <perex@perex.cz>
Tue, 16 Oct 2007 13:59:52 +0000 (16 15:59 +0200)
treefff88e0f8be8540b1fd74cc7f7d7b9fec783a8f4
parent7abcacb09ac0f9c6848f1e7d86b284427fa83cee
[ALSA] cs5535audio: fix PRD register save/restore power management race

In the suspend path, we currently save the PRD registers and then disable DMA.
This is racy; the sound hardware might update the PRD register as it finishes
processing some DMA pages between when we've saved the PRD registers and
when DMA actually gets disabled.  Furthermore, we actively check whether or
not DMA is enabled before saving PRD registers; there's no reason to do that,
as the PRD registers should not update when we twiddle the ACC_BM[x]_CMD
register(s).  Worst case, we save the PRD registers twice; even powering
down the ACC shouldn't mess with the PRD registers (according to the 5536
data sheet, section 5.3.7.4, power-down procedure).  This patch reworks
all that to first disable DMA, and then save PRD registers.

Signed-off-by: Andres Salomon <dilinger@debian.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@suse.cz>
sound/pci/cs5535audio/cs5535audio.h
sound/pci/cs5535audio/cs5535audio_pcm.c
sound/pci/cs5535audio/cs5535audio_pm.c