diff options
author | Sebastian Andrzej Siewior <bigeasy@linutronix.de> | 2013-03-21 12:46:49 +0100 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2013-08-13 16:09:02 -0400 |
commit | 69055b59eda75421d1a8ad5fad3d0c6bf947d16f (patch) | |
tree | 25feb41b47430bd0f16fa8f7c5ef3e0d5822e7c3 | |
parent | c5996c21f12abbd73a3b51dcb9c213ee9fab20cc (diff) |
spi/omap-mcspi: check condition also after timeout
It is possible that the handler gets interrupted after checking the
status. After it resumes it the time out is due but the condition it was
waiting for might be true. Therefore it is necessary to check the
condition in case of an time out to be sure that the condition is not
true _and_ the time passed by.
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-rw-r--r-- | drivers/spi/spi-omap2-mcspi.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/spi/spi-omap2-mcspi.c b/drivers/spi/spi-omap2-mcspi.c index b610f522ca44..56c41667b80e 100644 --- a/drivers/spi/spi-omap2-mcspi.c +++ b/drivers/spi/spi-omap2-mcspi.c @@ -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; |