@@ -321,7 +321,7 @@ static int wait_for_xfer(struct s3c64xx_spi_driver_data *sdd,
{
struct s3c64xx_spi_info *sci = sdd->cntrlr_info;
void __iomem *regs = sdd->regs;
- unsigned long val;
+ unsigned long val, reg;
int ms;
/* millisecs to xfer 'len' bytes @ 'cur_speed' */
@@ -333,13 +333,16 @@ static int wait_for_xfer(struct s3c64xx_spi_driver_data *sdd,
val = wait_for_completion_timeout(&sdd->xfer_completion, val);
} else {
val = msecs_to_loops(ms);
+
do {
- val = readl(regs + S3C64XX_SPI_STATUS);
- } while (RX_FIFO_LVL(val, sci) < xfer->len && --val);
+ reg = readl(regs + S3C64XX_SPI_STATUS);
+ } while (RX_FIFO_LVL(reg, sci) < xfer->len && --val);
}
- if (!val)
+ if (!val) {
+ dev_warn(&sdd->pdev->dev, "Transfer timeout\n");
return -EIO;
+ }
if (dma_mode) {
u32 status;