Hello, I've been working in the ALSA SOC area for the MPC5200. I've noticed that in the routine psc_dma_trigger() in sound/soc/fsl/mpc5200_dma.c there are times when the computed value for s->appl_ptr ends up wrapping negative. This occurs when s->runtime->control->appl_ptr is less than runtime->period_size * runtime->periods It seemed like this would occur at then of the data stream or when the data stream is small (smaller than runtime->period_size * runtime->periods). As far as I can tell, s->appl_ptr is supposed to be the previous value of s->runtime->control->appl_ptr, so the driver can send out the right number of bytes (from previous appl_ptr to current appl_ptr) to avoid pops and clicks at the end of the audio. So it appears the assumption in this code is wrong, that the previous s->runtime->control->appl_ptr is always rumtime->period_size * runtime->periods bytes prior to the current s->runtime->control->appl_ptr. I took out this code and instead added code to intialize s->appl_ptr to 0 in psc_dma_open(). Does this fix seem right? - John The computation for appl_ptr in the trigger() routine made a bad assumption when the stream is at the end of the file and there is not (periods * period_size) bytes remaining in the data. This causes playback issues when the total stream size is less than this amount, as the s->appl_ptr wrapps negative and the data is never played. Signed-off-by: John Bonesio <bones@xxxxxxxxxxxx> --- sound/soc/fsl/mpc5200_dma.c | 3 +-- 1 files changed, 1 insertions(+), 2 deletions(-) diff --git a/sound/soc/fsl/mpc5200_dma.c b/sound/soc/fsl/mpc5200_dma.c index b2eba27..cfe0ea4 100644 --- a/sound/soc/fsl/mpc5200_dma.c +++ b/sound/soc/fsl/mpc5200_dma.c @@ -181,8 +181,6 @@ static int psc_dma_trigger(struct snd_pcm_substream *substream, int cmd) * end of stream and not over running it. */ s->runtime = runtime; - s->appl_ptr = s->runtime->control->appl_ptr - - (runtime->period_size * runtime->periods); /* Fill up the bestcomm bd queue and enable DMA. * This will begin filling the PSC's fifo. @@ -287,6 +285,7 @@ static int psc_dma_open(struct snd_pcm_substream *substream) } s->stream = substream; + s->appl_ptr = 0; return 0; } _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel