diff options
author | Jarkko Nikula <jarkko.nikula@linux.intel.com> | 2016-03-03 06:02:14 -0500 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2016-03-03 23:06:00 -0500 |
commit | 590745017ef3658b33a581fe0c6d60b70e92df85 (patch) | |
tree | ff01c62796b397467fca5334b426b78680f66b6a /drivers/spi/spi-pxa2xx-dma.c | |
parent | c1b03f116453cebb9381fa64311ab047ecece485 (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.c | 8 |
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) | |||
331 | void pxa2xx_spi_dma_release(struct driver_data *drv_data) | 331 | void 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; |