spi/omap-mcspi: check condition also after timeout
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Thu, 21 Mar 2013 12:22:48 +0000 (13:22 +0100)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Mon, 1 Apr 2013 13:19:15 +0000 (14:19 +0100)
It is possible that the handler gets interrupted after checking the
status. After it resumes the time out is due but the condition it was
waiting for might be true as well. Therefore it is necessary to check
the condition in case of an time out to be sure that the condition is
not true after the time passed by.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
drivers/spi/spi-omap2-mcspi.c

index 893c3d78e426f98253308c0ff336d62dc6168b24..61eef47ae82109d40f549cb4509e890eeb224e08 100644 (file)
@@ -285,8 +285,12 @@ static int mcspi_wait_for_reg_bit(void __iomem *reg, unsigned long bit)
 
        timeout = jiffies + msecs_to_jiffies(1000);
        while (!(__raw_readl(reg) & bit)) {
-               if (time_after(jiffies, timeout))
-                       return -1;
+               if (time_after(jiffies, timeout)) {
+                       if (!(__raw_readl(reg) & bit))
+                               return -ETIMEDOUT;
+                       else
+                               return 0;
+               }
                cpu_relax();
        }
        return 0;