aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/spi/spi_bfin5xx.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/spi/spi_bfin5xx.c')
-rw-r--r--drivers/spi/spi_bfin5xx.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/spi/spi_bfin5xx.c b/drivers/spi/spi_bfin5xx.c
index 88dee87fc420..e706de1d10c8 100644
--- a/drivers/spi/spi_bfin5xx.c
+++ b/drivers/spi/spi_bfin5xx.c
@@ -557,6 +557,7 @@ static irqreturn_t dma_irq_handler(int irq, void *dev_id)
557 struct driver_data *drv_data = dev_id; 557 struct driver_data *drv_data = dev_id;
558 struct chip_data *chip = drv_data->cur_chip; 558 struct chip_data *chip = drv_data->cur_chip;
559 struct spi_message *msg = drv_data->cur_msg; 559 struct spi_message *msg = drv_data->cur_msg;
560 unsigned long timeout;
560 unsigned short dmastat = get_dma_curr_irqstat(drv_data->dma_channel); 561 unsigned short dmastat = get_dma_curr_irqstat(drv_data->dma_channel);
561 u16 spistat = read_STAT(drv_data); 562 u16 spistat = read_STAT(drv_data);
562 563
@@ -582,8 +583,17 @@ static irqreturn_t dma_irq_handler(int irq, void *dev_id)
582 cpu_relax(); 583 cpu_relax();
583 } 584 }
584 585
586 dev_dbg(&drv_data->pdev->dev,
587 "in dma_irq_handler dmastat:0x%x spistat:0x%x\n",
588 dmastat, read_STAT(drv_data));
589
590 timeout = jiffies + HZ;
585 while (!(read_STAT(drv_data) & SPIF)) 591 while (!(read_STAT(drv_data) & SPIF))
586 cpu_relax(); 592 if (!time_before(jiffies, timeout)) {
593 dev_warn(&drv_data->pdev->dev, "timeout waiting for SPIF");
594 break;
595 } else
596 cpu_relax();
587 597
588 if ((dmastat & DMA_ERR) && (spistat & RBSY)) { 598 if ((dmastat & DMA_ERR) && (spistat & RBSY)) {
589 msg->state = ERROR_STATE; 599 msg->state = ERROR_STATE;