Lines Matching +full:spi +full:- +full:slave

2  * SH QSPI (Quad SPI) driver
7 * SPDX-License-Identifier: GPL-2.0
13 #include <spi.h>
71 struct spi_slave slave; member
75 static inline struct sh_qspi_slave *to_sh_qspi(struct spi_slave *slave) in to_sh_qspi() argument
77 return container_of(slave, struct sh_qspi_slave, slave); in to_sh_qspi()
84 writeb(SPCR_MSTR, &ss->regs->spcr); in sh_qspi_init()
87 writeb(0x00, &ss->regs->sslp); in sh_qspi_init()
90 writeb(SPPCR_IO3FV|SPPCR_IO2FV, &ss->regs->sppcr); in sh_qspi_init()
93 writeb(0x01, &ss->regs->spbr); in sh_qspi_init()
96 writeb(0x00, &ss->regs->spdcr); in sh_qspi_init()
99 writeb(0x00, &ss->regs->spckd); in sh_qspi_init()
102 writeb(0x00, &ss->regs->sslnd); in sh_qspi_init()
104 /* Set next-access delay value */ in sh_qspi_init()
105 writeb(0x00, &ss->regs->spnd); in sh_qspi_init()
108 writew(SPCMD_INIT2, &ss->regs->spcmd0); in sh_qspi_init()
111 setbits_8(&ss->regs->spbfcr, SPBFCR_TXRST|SPBFCR_RXRST); in sh_qspi_init()
114 clrbits_8(&ss->regs->spbfcr, SPBFCR_TXRST|SPBFCR_RXRST); in sh_qspi_init()
117 writeb(0x00, &ss->regs->spscr); in sh_qspi_init()
119 /* Enable SPI function */ in sh_qspi_init()
120 setbits_8(&ss->regs->spcr, SPCR_SPE); in sh_qspi_init()
128 void spi_cs_activate(struct spi_slave *slave) in spi_cs_activate() argument
130 struct sh_qspi_slave *ss = to_sh_qspi(slave); in spi_cs_activate()
133 writeb(SPCR_MSTR, &ss->regs->spcr); in spi_cs_activate()
136 writew(SPCMD_INIT1, &ss->regs->spcmd0); in spi_cs_activate()
139 setbits_8(&ss->regs->spbfcr, SPBFCR_TXRST|SPBFCR_RXRST); in spi_cs_activate()
142 clrbits_8(&ss->regs->spbfcr, SPBFCR_TXRST|SPBFCR_RXRST); in spi_cs_activate()
145 writeb(0x00, &ss->regs->spscr); in spi_cs_activate()
147 /* Enable SPI function */ in spi_cs_activate()
148 setbits_8(&ss->regs->spcr, SPCR_SPE); in spi_cs_activate()
151 void spi_cs_deactivate(struct spi_slave *slave) in spi_cs_deactivate() argument
153 struct sh_qspi_slave *ss = to_sh_qspi(slave); in spi_cs_deactivate()
155 /* Disable SPI Function */ in spi_cs_deactivate()
156 clrbits_8(&ss->regs->spcr, SPCR_SPE); in spi_cs_deactivate()
178 ss->regs = (struct sh_qspi_regs *)SH_QSPI_BASE; in spi_setup_slave()
183 return &ss->slave; in spi_setup_slave()
186 void spi_free_slave(struct spi_slave *slave) in spi_free_slave() argument
188 struct sh_qspi_slave *spi = to_sh_qspi(slave); in spi_free_slave() local
190 free(spi); in spi_free_slave()
193 int spi_claim_bus(struct spi_slave *slave) in spi_claim_bus() argument
198 void spi_release_bus(struct spi_slave *slave) in spi_release_bus() argument
202 int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *dout, in spi_xfer() argument
205 struct sh_qspi_slave *ss = to_sh_qspi(slave); in spi_xfer()
210 u32 *spbmul0 = &ss->regs->spbmul0; in spi_xfer()
214 spi_cs_deactivate(slave); in spi_xfer()
226 spi_cs_activate(slave); in spi_xfer()
244 * it in one burst, otherwise transfer on byte-by-byte basis. in spi_xfer()
248 clrsetbits_8(&ss->regs->spbfcr, SPBFCR_TXTRG | SPBFCR_RXTRG, in spi_xfer()
251 ret = wait_for_bit_8(&ss->regs->spsr, SPSR_SPTEF, in spi_xfer()
257 writeb(*tdata, &ss->regs->spdr); in spi_xfer()
262 ret = wait_for_bit_8(&ss->regs->spsr, SPSR_SPRFF, in spi_xfer()
268 *rdata = readb(&ss->regs->spdr); in spi_xfer()
273 nbyte -= chunk; in spi_xfer()
277 spi_cs_deactivate(slave); in spi_xfer()