dma: Adjust prepare_channel() to use a channel pointer

Rather than a channel number, use a pointer. Also we don't need a
return value, since this function cannot fail.

BUG=chrome-os-partner:10533
TEST=build and boot on snow

Change-Id: I9d7e567a9f3d496184fd28f0820ad798b1c43a28
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/26165
Reviewed-by: David Hendricks <dhendrix@chromium.org>
This commit is contained in:
Simon Glass
2012-06-26 16:06:52 -07:00
committed by Gerrit
parent a366d64981
commit 3db49e8acf

View File

@@ -44,23 +44,20 @@ void dma_disable(unsigned channel)
/**
* Prepare a channel for use and start it
*
* @param channel Channel number to read (DMAC_...)
* @param chan Channel number to read (DMAC_...)
* @param count Number of bytes to transfer
* @param periph Pointer to peripheral data register
* @param memory Pointer to memory address
* @param flags DMA flags for the control register, normally:
* DMA_DIR_FROM_MEM_MASK for tx
* 0 for rx
* @return 0 if ok, -1 on error
DMA_MINC_MASK |
* (DMA_DIR_FROM_MEM_MASK for tx
* 0 for rx)
*/
static int prepare_channel(unsigned channel, unsigned count, void *periph,
const void *memory, unsigned flags)
static void prepare_channel(struct dma_channel *chan, unsigned count,
void *periph, const void *memory, unsigned flags)
{
struct dma_channel *chan;
uint32_t ctrl;
chan = dma_get_channel(channel);
if (REG32(&chan->ccr) & DMA_EN)
REG32(&chan->ccr) &= ~DMA_EN;
@@ -71,7 +68,7 @@ static int prepare_channel(unsigned channel, unsigned count, void *periph,
ctrl = DMA_PL_VERY_HIGH << DMA_PL_SHIFT;
REG32(&chan->ccr) = ctrl;
ctrl |= DMA_MINC_MASK | flags;
ctrl |= flags;
ctrl |= 0 << 10; /* MSIZE (memory size in bytes) */
ctrl |= 1 << 8; /* PSIZE (16-bits for now) */
REG32(&chan->ccr) = ctrl;
@@ -79,21 +76,25 @@ static int prepare_channel(unsigned channel, unsigned count, void *periph,
/* Fire it up */
ctrl |= DMA_EN;
REG32(&chan->ccr) = ctrl;
return 0;
}
int dma_start_tx(unsigned channel, unsigned count, void *periph,
const void *memory)
{
return prepare_channel(channel, count, periph, memory,
DMA_DIR_FROM_MEM_MASK);
struct dma_channel *chan = dma_get_channel(channel);
prepare_channel(chan, count, periph, memory,
DMA_MINC_MASK | DMA_DIR_FROM_MEM_MASK);
return 0;
}
int dma_start_rx(unsigned channel, unsigned count, void *periph,
const void *memory)
{
return prepare_channel(channel, count, periph, memory, 0);
struct dma_channel *chan = dma_get_channel(channel);
prepare_channel(chan, count, periph, memory, DMA_MINC_MASK);
return 0;
}
/* Hide this code behind an undefined CONFIG for now */