Lines Matching full:ss
43 static void clear_fifo(struct sh_spi *ss) in clear_fifo() argument
45 sh_spi_set_bit(SH_SPI_RSTF, &ss->regs->cr2); in clear_fifo()
46 sh_spi_clear_bit(SH_SPI_RSTF, &ss->regs->cr2); in clear_fifo()
49 static int recvbuf_wait(struct sh_spi *ss) in recvbuf_wait() argument
51 while (sh_spi_read(&ss->regs->cr1) & SH_SPI_RBE) { in recvbuf_wait()
59 static int write_fifo_empty_wait(struct sh_spi *ss) in write_fifo_empty_wait() argument
61 while (!(sh_spi_read(&ss->regs->cr1) & SH_SPI_TBE)) { in write_fifo_empty_wait()
69 static void sh_spi_set_cs(struct sh_spi *ss, unsigned int cs) in sh_spi_set_cs() argument
78 sh_spi_clear_bit(SH_SPI_SSS0 | SH_SPI_SSS1, &ss->regs->cr4); in sh_spi_set_cs()
79 sh_spi_set_bit(val, &ss->regs->cr4); in sh_spi_set_cs()
85 struct sh_spi *ss; in spi_setup_slave() local
90 ss = spi_alloc_slave(struct sh_spi, bus, cs); in spi_setup_slave()
91 if (!ss) in spi_setup_slave()
94 ss->regs = (struct sh_spi_regs *)CONFIG_SH_SPI_BASE; in spi_setup_slave()
97 sh_spi_write(0xfe, &ss->regs->cr1); in spi_setup_slave()
99 sh_spi_write(0x00, &ss->regs->cr1); in spi_setup_slave()
101 sh_spi_write(0x00, &ss->regs->cr3); in spi_setup_slave()
102 sh_spi_set_cs(ss, cs); in spi_setup_slave()
104 clear_fifo(ss); in spi_setup_slave()
107 sh_spi_write(sh_spi_read(&ss->regs->cr2) | 0x07, &ss->regs->cr2); in spi_setup_slave()
110 return &ss->slave; in spi_setup_slave()
127 struct sh_spi *ss = to_sh_spi(slave); in spi_release_bus() local
129 sh_spi_write(sh_spi_read(&ss->regs->cr1) & in spi_release_bus()
130 ~(SH_SPI_SSA | SH_SPI_SSDB | SH_SPI_SSD), &ss->regs->cr1); in spi_release_bus()
133 static int sh_spi_send(struct sh_spi *ss, const unsigned char *tx_data, in sh_spi_send() argument
140 sh_spi_set_bit(SH_SPI_SSA, &ss->regs->cr1); in sh_spi_send()
146 !(sh_spi_read(&ss->regs->cr4) & SH_SPI_WPABRT) && in sh_spi_send()
147 !(sh_spi_read(&ss->regs->cr1) & SH_SPI_TBF); in sh_spi_send()
149 sh_spi_write(tx_data[i], &ss->regs->tbr_rbr); in sh_spi_send()
153 if (sh_spi_read(&ss->regs->cr4) & SH_SPI_WPABRT) { in sh_spi_send()
156 sh_spi_set_bit(SH_SPI_WPABRT, &ss->regs->cr4); in sh_spi_send()
165 write_fifo_empty_wait(ss); in sh_spi_send()
169 sh_spi_clear_bit(SH_SPI_SSD | SH_SPI_SSDB, &ss->regs->cr1); in sh_spi_send()
170 sh_spi_set_bit(SH_SPI_SSA, &ss->regs->cr1); in sh_spi_send()
172 write_fifo_empty_wait(ss); in sh_spi_send()
178 static int sh_spi_receive(struct sh_spi *ss, unsigned char *rx_data, in sh_spi_receive() argument
184 sh_spi_write(SH_SPI_MAX_BYTE, &ss->regs->cr3); in sh_spi_receive()
186 sh_spi_write(len, &ss->regs->cr3); in sh_spi_receive()
188 sh_spi_clear_bit(SH_SPI_SSD | SH_SPI_SSDB, &ss->regs->cr1); in sh_spi_receive()
189 sh_spi_set_bit(SH_SPI_SSA, &ss->regs->cr1); in sh_spi_receive()
192 if (recvbuf_wait(ss)) in sh_spi_receive()
195 rx_data[i] = (unsigned char)sh_spi_read(&ss->regs->tbr_rbr); in sh_spi_receive()
197 sh_spi_write(0, &ss->regs->cr3); in sh_spi_receive()
205 struct sh_spi *ss = to_sh_spi(slave); in spi_xfer() local
212 sh_spi_write(sh_spi_read(&ss->regs->cr1) & ~SH_SPI_SSA, in spi_xfer()
213 &ss->regs->cr1); in spi_xfer()
216 ret = sh_spi_send(ss, tx_data, len, flags); in spi_xfer()
219 ret = sh_spi_receive(ss, rx_data, len, flags); in spi_xfer()
222 sh_spi_set_bit(SH_SPI_SSD, &ss->regs->cr1); in spi_xfer()
226 &ss->regs->cr1); in spi_xfer()
227 clear_fifo(ss); in spi_xfer()