From: Hari Nagalla hnagalla@ti.com
While using self linking, there is a chance that the DMA has re-enabled the channel just after disabling it.
This patch stops the OMAP4 DMA re-enabling after stoping the DMA channel.
Signed-off-by: Hari Nagalla hnagalla@ti.com Signed-off-by: Margarita Olaya Cabrera magi.olaya@ti.com --- sound/soc/omap/omap-pcm.c | 7 +++++++ 1 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/sound/soc/omap/omap-pcm.c b/sound/soc/omap/omap-pcm.c index 6a21447..afe91ad 100644 --- a/sound/soc/omap/omap-pcm.c +++ b/sound/soc/omap/omap-pcm.c @@ -234,6 +234,13 @@ static int omap_pcm_trigger(struct snd_pcm_substream *substream, int cmd) case SNDRV_PCM_TRIGGER_PAUSE_PUSH: prtd->period_index = -1; omap_stop_dma(prtd->dma_ch); + /* + * Since we are using self linking, there is a + * chance that the DMA as re-enabled the channel + * just after disabling it. + */ + while (omap_get_dma_active_status(prtd->dma_ch)) + omap_stop_dma(prtd->dma_ch); break; default: ret = -EINVAL;