lkml.org 
[lkml]   [2008]   [Mar]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
Subject[PATCH] at73c213: Fix DMA size at the end of DMA buffer
From
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;
}


\
 
 \ /
  Last update: 2008-03-10 15:45    [from the cache]
©2003-2014 Jasper Spaans. Advertise on this site