spi: sh-msiof: Use readl_poll_timeout_atomic() instead of open-coding
authorGeert Uytterhoeven <geert+renesas@glider.be>
Tue, 2 Apr 2019 14:40:22 +0000 (16:40 +0200)
committerMark Brown <broonie@kernel.org>
Wed, 3 Apr 2019 04:32:26 +0000 (11:32 +0700)
Replace the open-coded loop in sh_msiof_modify_ctr_wait() by a call to
the readl_poll_timeout_atomic() helper macro.

Suggested-by: Wolfram Sang <wsa@the-dreams.de>
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-sh-msiof.c

index 6edc76636e81a80115ac44da40e1dec999233ba4..3243ff258896595b66581cd4cfdbfbdf27a78bdd 100644 (file)
@@ -18,6 +18,7 @@
 #include <linux/gpio/consumer.h>
 #include <linux/interrupt.h>
 #include <linux/io.h>
+#include <linux/iopoll.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/of.h>
@@ -219,21 +220,14 @@ static int sh_msiof_modify_ctr_wait(struct sh_msiof_spi_priv *p,
 {
        u32 mask = clr | set;
        u32 data;
-       int k;
 
        data = sh_msiof_read(p, CTR);
        data &= ~clr;
        data |= set;
        sh_msiof_write(p, CTR, data);
 
-       for (k = 100; k > 0; k--) {
-               if ((sh_msiof_read(p, CTR) & mask) == set)
-                       break;
-
-               udelay(10);
-       }
-
-       return k > 0 ? 0 : -ETIMEDOUT;
+       return readl_poll_timeout_atomic(p->mapbase + CTR, data,
+                                        (data & mask) == set, 10, 1000);
 }
 
 static irqreturn_t sh_msiof_spi_irq(int irq, void *data)