aboutsummaryrefslogtreecommitdiff
path: root/drivers/spi/sh_qspi.c
diff options
context:
space:
mode:
authorMarek Vasut2018-04-10 16:58:46 +0200
committerMarek Vasut2018-04-11 23:19:51 +0200
commit9573db654d1999a1dfde6469782aa8d7cf3d589f (patch)
tree2c219f551d7faf96fe46ce9060853aead8915757 /drivers/spi/sh_qspi.c
parent118226495249268a35e604b2e6309801699f6224 (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.c23
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));