aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/spi/spi-pxa2xx-dma.c
diff options
context:
space:
mode:
authorJarkko Nikula <jarkko.nikula@linux.intel.com>2016-03-03 06:02:14 -0500
committerMark Brown <broonie@kernel.org>2016-03-03 23:06:00 -0500
commit590745017ef3658b33a581fe0c6d60b70e92df85 (patch)
treeff01c62796b397467fca5334b426b78680f66b6a /drivers/spi/spi-pxa2xx-dma.c
parentc1b03f116453cebb9381fa64311ab047ecece485 (diff)
spi: pxa2xx: Use newer more explicit DMAengine terminate API
Commit b36f09c3c441 ("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>
Diffstat (limited to 'drivers/spi/spi-pxa2xx-dma.c')
-rw-r--r--drivers/spi/spi-pxa2xx-dma.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/spi/spi-pxa2xx-dma.c b/drivers/spi/spi-pxa2xx-dma.c
index bd8b369a343c..365fc22c3572 100644
--- a/drivers/spi/spi-pxa2xx-dma.c
+++ b/drivers/spi/spi-pxa2xx-dma.c
@@ -254,8 +254,8 @@ irqreturn_t pxa2xx_spi_dma_transfer(struct driver_data *drv_data)
254 if (status & SSSR_ROR) { 254 if (status & SSSR_ROR) {
255 dev_err(&drv_data->pdev->dev, "FIFO overrun\n"); 255 dev_err(&drv_data->pdev->dev, "FIFO overrun\n");
256 256
257 dmaengine_terminate_all(drv_data->rx_chan); 257 dmaengine_terminate_async(drv_data->rx_chan);
258 dmaengine_terminate_all(drv_data->tx_chan); 258 dmaengine_terminate_async(drv_data->tx_chan);
259 259
260 pxa2xx_spi_dma_transfer_complete(drv_data, true); 260 pxa2xx_spi_dma_transfer_complete(drv_data, true);
261 return IRQ_HANDLED; 261 return IRQ_HANDLED;
@@ -331,13 +331,13 @@ int pxa2xx_spi_dma_setup(struct driver_data *drv_data)
331void pxa2xx_spi_dma_release(struct driver_data *drv_data) 331void pxa2xx_spi_dma_release(struct driver_data *drv_data)
332{ 332{
333 if (drv_data->rx_chan) { 333 if (drv_data->rx_chan) {
334 dmaengine_terminate_all(drv_data->rx_chan); 334 dmaengine_terminate_sync(drv_data->rx_chan);
335 dma_release_channel(drv_data->rx_chan); 335 dma_release_channel(drv_data->rx_chan);
336 sg_free_table(&drv_data->rx_sgt); 336 sg_free_table(&drv_data->rx_sgt);
337 drv_data->rx_chan = NULL; 337 drv_data->rx_chan = NULL;
338 } 338 }
339 if (drv_data->tx_chan) { 339 if (drv_data->tx_chan) {
340 dmaengine_terminate_all(drv_data->tx_chan); 340 dmaengine_terminate_sync(drv_data->tx_chan);
341 dma_release_channel(drv_data->tx_chan); 341 dma_release_channel(drv_data->tx_chan);
342 sg_free_table(&drv_data->tx_sgt); 342 sg_free_table(&drv_data->tx_sgt);
343 drv_data->tx_chan = NULL; 343 drv_data->tx_chan = NULL;