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    [W:0.026 / U:0.592 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site