Pandita, Vikram wrote:
<snip>
> >
> >+ if (!int_hsdma) {
> >+ DBG(2, "spurious DMA irq\n");
> >+
> >+ for (bchannel = 0; bchannel < MUSB_HSDMA_CHANNELS;
> >bchannel++) {
> >+ musb_channel = (struct musb_dma_channel *)
> >+ &(controller->channel[bchannel]);
> >+ channel = &musb_channel->channel;
> >+ if (channel->status == MUSB_DMA_STATUS_BUSY) {
> >+ csr = musb_readw(mbase,
> >+ MUSB_HSDMA_CHANNEL_OFFSET(bchannel,
> >+ MUSB_HSDMA_COUNT));
>
> csr is a misnomer. It should be called count.
> Also I recommend to add a function:
> musb_read_hsdma_count() in "musbhsdma.h" just like the write
> counterpart and use here.
>
Good catch. Yes, will fix. That was copy-pasted from the lines
that follow, and I'll fix that as well.
> >+ if (csr == 0)
> Should this not be if (csr != 0) only then you mark that dma
> channel as generated the interrupt?
>
Nope. DMA_COUNT is a register that is programmed with the number of
bytes to transfer and counts down from there. So when we get a
DMA interrupt but cannot identify from DMA_INTR which channel raised
the interrupt, we rely on the DMA_COUNT being zero for the channels
that raised the interrupt.
> >+ int_hsdma |= (1 << bchannel);
> >+ }
> >+ }
> >+
> >+ DBG(2, "int_hsdma = 0x%x\n", int_hsdma);
> >+
> >+ if (!int_hsdma)
> >+ goto done;
> >+ }
> >+
> > for (bchannel = 0; bchannel < MUSB_HSDMA_CHANNELS; bchannel++) {
> > if (int_hsdma & (1 << bchannel)) {
> > musb_channel = (struct musb_dma_channel *)
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html