From: Andres Salomon We're never actually setting dma->substream to the current substream; that means the dma->substream checks that we do in the suspend/resume path are never satisfied, and the PRD registers are never correctly managed. This changes it so that we set the substream when constructing the specific bus master DMA, and unsetting it when we tear down the BM's DMA. Signed-off-by: Andres Salomon Acked-by: Jordan Crouse Acked-by: Jaya Kumar Cc: Jaroslav Kysela Cc: Takashi Iwai Signed-off-by: Andrew Morton --- sound/pci/cs5535audio/cs5535audio_pcm.c | 2 ++ 1 files changed, 2 insertions(+) diff -puN sound/pci/cs5535audio/cs5535audio_pcm.c~alsa-cs5535audio-correctly-set-dma-substream sound/pci/cs5535audio/cs5535audio_pcm.c --- a/sound/pci/cs5535audio/cs5535audio_pcm.c~alsa-cs5535audio-correctly-set-dma-substream +++ a/sound/pci/cs5535audio/cs5535audio_pcm.c @@ -161,6 +161,7 @@ static int cs5535audio_build_dma_packets jmpprd_addr = cpu_to_le32(lastdesc->addr + (sizeof(struct cs5535audio_dma_desc)*periods)); + dma->substream = substream; dma->period_bytes = period_bytes; dma->periods = periods; spin_lock_irq(&cs5535au->reg_lock); @@ -238,6 +239,7 @@ static void cs5535audio_clear_dma_packet { snd_dma_free_pages(&dma->desc_buf); dma->desc_buf.area = NULL; + dma->substream = NULL; } static int snd_cs5535audio_hw_params(struct snd_pcm_substream *substream, _