aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/spi/spi_bfin5xx.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/spi/spi_bfin5xx.c b/drivers/spi/spi_bfin5xx.c
index a2d4884752ef..48587c27050d 100644
--- a/drivers/spi/spi_bfin5xx.c
+++ b/drivers/spi/spi_bfin5xx.c
@@ -582,14 +582,19 @@ static irqreturn_t dma_irq_handler(int irq, void *dev_id)
582 dev_dbg(&drv_data->pdev->dev, "in dma_irq_handler\n"); 582 dev_dbg(&drv_data->pdev->dev, "in dma_irq_handler\n");
583 clear_dma_irqstat(CH_SPI); 583 clear_dma_irqstat(CH_SPI);
584 584
585 /* Wait for DMA to complete */
586 while (get_dma_curr_irqstat(CH_SPI) & DMA_RUN)
587 continue;
588
585 /* 589 /*
586 * wait for the last transaction shifted out. yes, these two 590 * wait for the last transaction shifted out. HRM states:
587 * while loops are supposed to be the same (see the HRM). 591 * at this point there may still be data in the SPI DMA FIFO waiting
592 * to be transmitted ... software needs to poll TXS in the SPI_STAT
593 * register until it goes low for 2 successive reads
588 */ 594 */
589 if (drv_data->tx != NULL) { 595 if (drv_data->tx != NULL) {
590 while (bfin_read_SPI_STAT() & TXS) 596 while ((bfin_read_SPI_STAT() & TXS) ||
591 continue; 597 (bfin_read_SPI_STAT() & TXS))
592 while (bfin_read_SPI_STAT() & TXS)
593 continue; 598 continue;
594 } 599 }
595 600