diff options
author | Marek Vasut | 2018-04-10 16:58:46 +0200 |
---|---|---|
committer | Marek Vasut | 2018-04-11 23:19:51 +0200 |
commit | 9573db654d1999a1dfde6469782aa8d7cf3d589f (patch) | |
tree | 2c219f551d7faf96fe46ce9060853aead8915757 /drivers/spi/sh_qspi.c | |
parent | 118226495249268a35e604b2e6309801699f6224 (diff) |
spi: sh_qspi: Replace ad hoc waiting with wait_for_bit
Replace the ad-hoc endless loops with wait_for_bit() with
reasonable timeout. Note that the loops had internal 10uS
delays, although there is no reason for those on this HW,
so they are dropped.
Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
Cc: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
Diffstat (limited to 'drivers/spi/sh_qspi.c')
-rw-r--r-- | drivers/spi/sh_qspi.c | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/drivers/spi/sh_qspi.c b/drivers/spi/sh_qspi.c index 8eaa6744ccf..d7f558a5412 100644 --- a/drivers/spi/sh_qspi.c +++ b/drivers/spi/sh_qspi.c @@ -11,6 +11,7 @@ #include <console.h> #include <malloc.h> #include <spi.h> +#include <wait_bit.h> #include <asm/arch/rmobile.h> #include <asm/io.h> @@ -236,23 +237,17 @@ int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *dout, rdata = din; while (nbyte > 0) { - while (!(readb(&ss->regs->spsr) & SPSR_SPTEF)) { - if (ctrlc()) { - puts("abort\n"); - return 1; - } - udelay(10); - } + ret = wait_for_bit_8(&ss->regs->spsr, SPSR_SPTEF, + true, 1000, true); + if (ret) + return ret; writeb(*tdata, (u8 *)(&ss->regs->spdr)); - while (!(readb(&ss->regs->spsr) & SPSR_SPRFF)) { - if (ctrlc()) { - puts("abort\n"); - return 1; - } - udelay(10); - } + ret = wait_for_bit_8(&ss->regs->spsr, SPSR_SPRFF, + true, 1000, true); + if (ret) + return ret; *rdata = readb((u8 *)(&ss->regs->spdr)); |