提交 a841b24e 编写于 作者: V Varadarajan Narayanan 提交者: Mark Brown

spi: qup: refactor spi_qup_prep_sg

Take specific sgl and nent to be prepared.  This is in
preparation for splitting DMA into multiple transacations, this
contains no code changes just refactoring.
Signed-off-by: NMatthew McClintock <mmcclint@codeaurora.org>
Signed-off-by: NVaradarajan Narayanan <varada@codeaurora.org>
Signed-off-by: NMark Brown <broonie@kernel.org>
上级 5dc47fef
...@@ -382,27 +382,20 @@ static void spi_qup_write(struct spi_qup *controller) ...@@ -382,27 +382,20 @@ static void spi_qup_write(struct spi_qup *controller)
} while (remainder); } while (remainder);
} }
static int spi_qup_prep_sg(struct spi_master *master, struct spi_transfer *xfer, static int spi_qup_prep_sg(struct spi_master *master, struct scatterlist *sgl,
enum dma_transfer_direction dir, unsigned int nents, enum dma_transfer_direction dir,
dma_async_tx_callback callback) dma_async_tx_callback callback)
{ {
struct spi_qup *qup = spi_master_get_devdata(master); struct spi_qup *qup = spi_master_get_devdata(master);
unsigned long flags = DMA_PREP_INTERRUPT | DMA_PREP_FENCE; unsigned long flags = DMA_PREP_INTERRUPT | DMA_PREP_FENCE;
struct dma_async_tx_descriptor *desc; struct dma_async_tx_descriptor *desc;
struct scatterlist *sgl;
struct dma_chan *chan; struct dma_chan *chan;
dma_cookie_t cookie; dma_cookie_t cookie;
unsigned int nents;
if (dir == DMA_MEM_TO_DEV) { if (dir == DMA_MEM_TO_DEV)
chan = master->dma_tx; chan = master->dma_tx;
nents = xfer->tx_sg.nents; else
sgl = xfer->tx_sg.sgl;
} else {
chan = master->dma_rx; chan = master->dma_rx;
nents = xfer->rx_sg.nents;
sgl = xfer->rx_sg.sgl;
}
desc = dmaengine_prep_slave_sg(chan, sgl, nents, dir, flags); desc = dmaengine_prep_slave_sg(chan, sgl, nents, dir, flags);
if (IS_ERR_OR_NULL(desc)) if (IS_ERR_OR_NULL(desc))
...@@ -451,7 +444,9 @@ static int spi_qup_do_dma(struct spi_device *spi, struct spi_transfer *xfer, ...@@ -451,7 +444,9 @@ static int spi_qup_do_dma(struct spi_device *spi, struct spi_transfer *xfer,
} }
if (xfer->rx_buf) { if (xfer->rx_buf) {
ret = spi_qup_prep_sg(master, xfer, DMA_DEV_TO_MEM, rx_done); ret = spi_qup_prep_sg(master, xfer->rx_sg.sgl,
xfer->rx_sg.nents, DMA_DEV_TO_MEM,
rx_done);
if (ret) if (ret)
return ret; return ret;
...@@ -459,7 +454,9 @@ static int spi_qup_do_dma(struct spi_device *spi, struct spi_transfer *xfer, ...@@ -459,7 +454,9 @@ static int spi_qup_do_dma(struct spi_device *spi, struct spi_transfer *xfer,
} }
if (xfer->tx_buf) { if (xfer->tx_buf) {
ret = spi_qup_prep_sg(master, xfer, DMA_MEM_TO_DEV, tx_done); ret = spi_qup_prep_sg(master, xfer->tx_sg.sgl,
xfer->tx_sg.nents, DMA_MEM_TO_DEV,
tx_done);
if (ret) if (ret)
return ret; return ret;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册