Skip to content

Commit 5907450

Browse files
jhnikulabroonie
authored andcommitted
spi: pxa2xx: Use newer more explicit DMAengine terminate API
Commit b36f09c ("dmaengine: Add transfer termination synchronization support") marked dmaengine_terminate_all() as deprecated and is being replaced by explicit synchronous and asynchronous terminate functions. Here DMA termination are done in two cases: FIFO overrun and module removal. FIFO overrun is handled in interrupt context and converting dmaengine_terminate_all() to dmaengine_terminate_async() does the same than before. Using synchronous termination in module removal however adds a bit more robustness as it waits all completion callbacks have finished. Although it looks all known DMA engines used with spi-pxa2xx don't implement device_synchronize() callback so this too appears to be a no-op in practice. Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com> Acked-by: Robert Jarzmik <robert.jarzmik@free.fr> Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent c1b03f1 commit 5907450

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

drivers/spi/spi-pxa2xx-dma.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -254,8 +254,8 @@ irqreturn_t pxa2xx_spi_dma_transfer(struct driver_data *drv_data)
254254
if (status & SSSR_ROR) {
255255
dev_err(&drv_data->pdev->dev, "FIFO overrun\n");
256256

257-
dmaengine_terminate_all(drv_data->rx_chan);
258-
dmaengine_terminate_all(drv_data->tx_chan);
257+
dmaengine_terminate_async(drv_data->rx_chan);
258+
dmaengine_terminate_async(drv_data->tx_chan);
259259

260260
pxa2xx_spi_dma_transfer_complete(drv_data, true);
261261
return IRQ_HANDLED;
@@ -331,13 +331,13 @@ int pxa2xx_spi_dma_setup(struct driver_data *drv_data)
331331
void pxa2xx_spi_dma_release(struct driver_data *drv_data)
332332
{
333333
if (drv_data->rx_chan) {
334-
dmaengine_terminate_all(drv_data->rx_chan);
334+
dmaengine_terminate_sync(drv_data->rx_chan);
335335
dma_release_channel(drv_data->rx_chan);
336336
sg_free_table(&drv_data->rx_sgt);
337337
drv_data->rx_chan = NULL;
338338
}
339339
if (drv_data->tx_chan) {
340-
dmaengine_terminate_all(drv_data->tx_chan);
340+
dmaengine_terminate_sync(drv_data->tx_chan);
341341
dma_release_channel(drv_data->tx_chan);
342342
sg_free_table(&drv_data->tx_sgt);
343343
drv_data->tx_chan = NULL;

0 commit comments

Comments
 (0)