mxs/spi: Rework the mxs_ssp_timeout to be more readable
authorMarek Vasut <marex@denx.de>
Tue, 4 Sep 2012 02:40:18 +0000 (04:40 +0200)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Wed, 5 Sep 2012 23:42:29 +0000 (07:42 +0800)
Rework the mxs_ssp_timeout() function to make it a bit more readable
and hopefully less error prone. Also, have only one successful exit
from the function and one failing exit instead of two.

Finally, discard the udelay() from this function altogether, as this
tightloop is quick enough it's pointless.

Signed-off-by: Marek Vasut <marex@denx.de>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
drivers/spi/spi-mxs.c

index 21e1dcad3914b3ddb2ad59d5c853f15ce152f24c..556e5ef907fa86959cc67212faec41f46f42f271 100644 (file)
@@ -177,25 +177,23 @@ static inline void mxs_spi_disable(struct mxs_spi *spi)
 
 static int mxs_ssp_wait(struct mxs_spi *spi, int offset, int mask, bool set)
 {
-       unsigned long timeout = jiffies + msecs_to_jiffies(SSP_TIMEOUT);
+       const unsigned long timeout = jiffies + msecs_to_jiffies(SSP_TIMEOUT);
        struct mxs_ssp *ssp = &spi->ssp;
        uint32_t reg;
 
-       while (1) {
+       do {
                reg = readl_relaxed(ssp->base + offset);
 
-               if (set && ((reg & mask) == mask))
-                       break;
+               if (!set)
+                       reg = ~reg;
 
-               if (!set && ((~reg & mask) == mask))
-                       break;
+               reg &= mask;
 
-               udelay(1);
+               if (reg == mask)
+                       return 0;
+       } while (time_before(jiffies, timeout));
 
-               if (time_after(jiffies, timeout))
-                       return -ETIMEDOUT;
-       }
-       return 0;
+       return -ETIMEDOUT;
 }
 
 static void mxs_ssp_dma_irq_callback(void *param)
This page took 0.026365 seconds and 5 git commands to generate.