[alsa-devel] [PATCH 2/2] ASoC: omap: Stop DMA re enabling in self linkage mode

Peter Ujfalusi peter.ujfalusi at nokia.com
Tue Dec 7 10:17:26 CET 2010


On Tuesday 07 December 2010 00:34:47 ext Olaya, Margarita wrote:
> From: Hari Nagalla <hnagalla at 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.

I have not seen this happening on OMAP2/3, or at least I'm not aware of it.
Is this problem OMAP4 only?
Do you know if this happens on playback, capture or in both direction?
Is it worth to do this workaround only on OMAP4?

> 
> Signed-off-by: Hari Nagalla <hnagalla at ti.com>
> Signed-off-by: Margarita Olaya Cabrera <magi.olaya at 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;

-- 
Péter


More information about the Alsa-devel mailing list