[ALSA] cs5535audio: correctly set dma->substream
authorAndres Salomon <dilinger@debian.org>
Mon, 3 Sep 2007 13:41:47 +0000 (15:41 +0200)
committerJaroslav Kysela <perex@perex.cz>
Tue, 16 Oct 2007 13:59:51 +0000 (15:59 +0200)
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 <dilinger@debian.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@suse.cz>
sound/pci/cs5535audio/cs5535audio_pcm.c

index ec920cbb2a7196c9cf1ee778e56ee763b1cc35c8..9a1e87fd481577d7d8d2ce97748354358cbbef5c 100644 (file)
@@ -161,6 +161,7 @@ static int cs5535audio_build_dma_packets(struct cs5535audio *cs5535au,
        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_packets(struct cs5535audio *cs5535au,
 {
        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,