Messages in this thread Patch in this message | | | Date | Mon, 10 Mar 2008 23:43:06 +0900 (JST) | Subject | [PATCH] at73c213: Fix DMA size at the end of DMA buffer | From | Atsushi Nemoto <> |
| |
The interrupt handler always provide runtime->period_size data, but it should provide additional residual data when the pointer back to zero.
This patch fixes periodic click noise when runtime->buffer_size was not multiple of runtime->period_size.
Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp> --- This patch depends on a patch titled "at73c213: Monaural support".
diff --git a/sound/spi/at73c213.c b/sound/spi/at73c213.c index 7c077c6..d614a8c 100644 --- a/sound/spi/at73c213.c +++ b/sound/spi/at73c213.c @@ -355,6 +355,7 @@ static irqreturn_t snd_at73c213_interrupt(int irq, void *dev_id) u32 status; int offset; int block_size; + int size; int next_period; int retval = IRQ_NONE; @@ -372,11 +373,14 @@ static irqreturn_t snd_at73c213_interrupt(int irq, void *dev_id) next_period = 0; offset = block_size * next_period; + size = runtime->period_size * runtime->channels; + if (next_period == runtime->periods - 1) + size += (runtime->buffer_size % runtime->period_size) + * runtime->channels; ssc_writel(chip->ssc->regs, PDC_TNPR, (long)runtime->dma_addr + offset); - ssc_writel(chip->ssc->regs, PDC_TNCR, - runtime->period_size * runtime->channels); + ssc_writel(chip->ssc->regs, PDC_TNCR, size); retval = IRQ_HANDLED; }
| |