diff options
author | Mark Brown <broonie@kernel.org> | 2015-03-09 18:11:06 +0000 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2015-03-09 18:11:06 +0000 |
commit | 0365fbd4bbc0b8f3fd3c78c16a8020ea83b3afcf (patch) | |
tree | 9263cd059b6aab29541b00ad2eceb4df1abcb486 /drivers/spi/spi-dw-mid.c | |
parent | c22c62db3f7388422257918c9d2582ef20d2e12d (diff) | |
parent | 854d2f241d71f6ca08ccde30e6c7c2e403363e52 (diff) | |
download | linux-0365fbd4bbc0b8f3fd3c78c16a8020ea83b3afcf.tar.bz2 |
Merge branch 'fix/dw' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi into spi-dw
Diffstat (limited to 'drivers/spi/spi-dw-mid.c')
-rw-r--r-- | drivers/spi/spi-dw-mid.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/spi/spi-dw-mid.c b/drivers/spi/spi-dw-mid.c index 8f68e8277a3b..c8416ef01f9a 100644 --- a/drivers/spi/spi-dw-mid.c +++ b/drivers/spi/spi-dw-mid.c @@ -108,7 +108,8 @@ static void dw_spi_dma_tx_done(void *arg) { struct dw_spi *dws = arg; - if (test_and_clear_bit(TX_BUSY, &dws->dma_chan_busy) & BIT(RX_BUSY)) + clear_bit(TX_BUSY, &dws->dma_chan_busy); + if (test_bit(RX_BUSY, &dws->dma_chan_busy)) return; spi_finalize_current_transfer(dws->master); } @@ -139,6 +140,9 @@ static struct dma_async_tx_descriptor *dw_spi_dma_prepare_tx(struct dw_spi *dws) 1, DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT | DMA_CTRL_ACK); + if (!txdesc) + return NULL; + txdesc->callback = dw_spi_dma_tx_done; txdesc->callback_param = dws; @@ -153,7 +157,8 @@ static void dw_spi_dma_rx_done(void *arg) { struct dw_spi *dws = arg; - if (test_and_clear_bit(RX_BUSY, &dws->dma_chan_busy) & BIT(TX_BUSY)) + clear_bit(RX_BUSY, &dws->dma_chan_busy); + if (test_bit(TX_BUSY, &dws->dma_chan_busy)) return; spi_finalize_current_transfer(dws->master); } @@ -184,6 +189,9 @@ static struct dma_async_tx_descriptor *dw_spi_dma_prepare_rx(struct dw_spi *dws) 1, DMA_DEV_TO_MEM, DMA_PREP_INTERRUPT | DMA_CTRL_ACK); + if (!rxdesc) + return NULL; + rxdesc->callback = dw_spi_dma_rx_done; rxdesc->callback_param = dws; |