[PATCH 3/3] dmaengine: at_hdmac: add slave config operation

From: Nicolas Ferre
Date: Tue Jun 28 2011 - 06:17:51 EST


Only change source/destination peripheral register access width.

Signed-off-by: Nicolas Ferre <nicolas.ferre@xxxxxxxxx>
Signed-off-by: Uwe Kleine-KÃnig <u.kleine-koenig@xxxxxxxxxxxxxx>
---
drivers/dma/at_hdmac.c | 29 +++++++++++++++++++++++++++++
1 files changed, 29 insertions(+), 0 deletions(-)

diff --git a/drivers/dma/at_hdmac.c b/drivers/dma/at_hdmac.c
index 7096adb..9cb8044 100644
--- a/drivers/dma/at_hdmac.c
+++ b/drivers/dma/at_hdmac.c
@@ -954,6 +954,35 @@ static int atc_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd,
clear_bit(ATC_IS_PAUSED, &atchan->status);

spin_unlock_irqrestore(&atchan->lock, flags);
+ } else if (cmd == DMA_SLAVE_CONFIG) {
+ struct dma_slave_config *dmaengine_cfg = (void *)arg;
+ struct at_dma_slave *atslave = chan->private;
+ enum dma_slave_buswidth sdma_width;
+ enum at_dma_slave_width atdma_width;
+
+ /* only modify transfer size width */
+ if (!atslave)
+ return -ENXIO;
+
+ if (dmaengine_cfg->direction == DMA_FROM_DEVICE)
+ sdma_width = dmaengine_cfg->src_addr_width;
+ else
+ sdma_width = dmaengine_cfg->dst_addr_width;
+
+ switch (sdma_width) {
+ case DMA_SLAVE_BUSWIDTH_1_BYTE:
+ atdma_width = AT_DMA_SLAVE_WIDTH_8BIT;
+ break;
+ case DMA_SLAVE_BUSWIDTH_2_BYTES:
+ atdma_width = AT_DMA_SLAVE_WIDTH_16BIT;
+ break;
+ case DMA_SLAVE_BUSWIDTH_4_BYTES:
+ atdma_width = AT_DMA_SLAVE_WIDTH_32BIT;
+ break;
+ default:
+ return -EINVAL;
+ }
+ atslave->reg_width = atdma_width;
} else if (cmd == DMA_TERMINATE_ALL) {
struct at_desc *desc, *_desc;
/*
--
1.7.3

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/