]> git.sur5r.net Git - u-boot/blobdiff - drivers/spi/sh_qspi.c
spi: sh_qspi: Drop SPBDCR wait
[u-boot] / drivers / spi / sh_qspi.c
index 7209e1d319e3a527251b65fa7aa143bb9820abd4..8eaa6744ccf3cb9be57370a49c372ace57520f32 100644 (file)
@@ -8,6 +8,7 @@
  */
 
 #include <common.h>
+#include <console.h>
 #include <malloc.h>
 #include <spi.h>
 #include <asm/arch/rmobile.h>
 
 /* SH QSPI register set */
 struct sh_qspi_regs {
-       unsigned char spcr;
-       unsigned char sslp;
-       unsigned char sppcr;
-       unsigned char spsr;
-       unsigned long spdr;
-       unsigned char spscr;
-       unsigned char spssr;
-       unsigned char spbr;
-       unsigned char spdcr;
-       unsigned char spckd;
-       unsigned char sslnd;
-       unsigned char spnd;
-       unsigned char dummy0;
-       unsigned short spcmd0;
-       unsigned short spcmd1;
-       unsigned short spcmd2;
-       unsigned short spcmd3;
-       unsigned char spbfcr;
-       unsigned char dummy1;
-       unsigned short spbdcr;
-       unsigned long spbmul0;
-       unsigned long spbmul1;
-       unsigned long spbmul2;
-       unsigned long spbmul3;
+       u8      spcr;
+       u8      sslp;
+       u8      sppcr;
+       u8      spsr;
+       u32     spdr;
+       u8      spscr;
+       u8      spssr;
+       u8      spbr;
+       u8      spdcr;
+       u8      spckd;
+       u8      sslnd;
+       u8      spnd;
+       u8      dummy0;
+       u16     spcmd0;
+       u16     spcmd1;
+       u16     spcmd2;
+       u16     spcmd3;
+       u8      spbfcr;
+       u8      dummy1;
+       u16     spbdcr;
+       u32     spbmul0;
+       u32     spbmul1;
+       u32     spbmul2;
+       u32     spbmul3;
 };
 
 struct sh_qspi_slave {
@@ -199,11 +200,11 @@ int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *dout,
             void *din, unsigned long flags)
 {
        struct sh_qspi_slave *ss = to_sh_qspi(slave);
-       unsigned long nbyte;
+       u32 nbyte;
        int ret = 0;
-       unsigned char dtdata = 0, drdata;
-       unsigned char *tdata = &dtdata, *rdata = &drdata;
-       unsigned long *spbmul0 = &ss->regs->spbmul0;
+       u8 dtdata = 0, drdata;
+       u8 *tdata = &dtdata, *rdata = &drdata;
+       u32 *spbmul0 = &ss->regs->spbmul0;
 
        if (dout == NULL && din == NULL) {
                if (flags & SPI_XFER_END)
@@ -229,7 +230,7 @@ int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *dout,
                writel(nbyte, spbmul0);
 
        if (dout != NULL)
-               tdata = (unsigned char *)dout;
+               tdata = (u8 *)dout;
 
        if (din != NULL)
                rdata = din;
@@ -243,15 +244,7 @@ int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *dout,
                        udelay(10);
                }
 
-               writeb(*tdata, (unsigned char *)(&ss->regs->spdr));
-
-               while ((readw(&ss->regs->spbdcr) != SPBDCR_RXBC0)) {
-                       if (ctrlc()) {
-                               puts("abort\n");
-                               return 1;
-                       }
-                       udelay(1);
-               }
+               writeb(*tdata, (u8 *)(&ss->regs->spdr));
 
                while (!(readb(&ss->regs->spsr) & SPSR_SPRFF)) {
                        if (ctrlc()) {
@@ -261,7 +254,7 @@ int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *dout,
                        udelay(10);
                }
 
-               *rdata = readb((unsigned char *)(&ss->regs->spdr));
+               *rdata = readb((u8 *)(&ss->regs->spdr));
 
                if (dout != NULL)
                        tdata++;