Lines Matching full:ss
44 static void clear_fifo(struct sh_spi *ss) in clear_fifo() argument
46 sh_spi_set_bit(SH_SPI_RSTF, &ss->regs->cr2); in clear_fifo()
47 sh_spi_clear_bit(SH_SPI_RSTF, &ss->regs->cr2); in clear_fifo()
50 static int recvbuf_wait(struct sh_spi *ss) in recvbuf_wait() argument
52 while (sh_spi_read(&ss->regs->cr1) & SH_SPI_RBE) { in recvbuf_wait()
60 static int write_fifo_empty_wait(struct sh_spi *ss) in write_fifo_empty_wait() argument
62 while (!(sh_spi_read(&ss->regs->cr1) & SH_SPI_TBE)) { in write_fifo_empty_wait()
74 static void sh_spi_set_cs(struct sh_spi *ss, unsigned int cs) in sh_spi_set_cs() argument
83 sh_spi_clear_bit(SH_SPI_SSS0 | SH_SPI_SSS1, &ss->regs->cr4); in sh_spi_set_cs()
84 sh_spi_set_bit(val, &ss->regs->cr4); in sh_spi_set_cs()
90 struct sh_spi *ss; in spi_setup_slave() local
95 ss = spi_alloc_slave(struct sh_spi, bus, cs); in spi_setup_slave()
96 if (!ss) in spi_setup_slave()
99 ss->regs = (struct sh_spi_regs *)CONFIG_SH_SPI_BASE; in spi_setup_slave()
102 sh_spi_write(0xfe, &ss->regs->cr1); in spi_setup_slave()
104 sh_spi_write(0x00, &ss->regs->cr1); in spi_setup_slave()
106 sh_spi_write(0x00, &ss->regs->cr3); in spi_setup_slave()
107 sh_spi_set_cs(ss, cs); in spi_setup_slave()
109 clear_fifo(ss); in spi_setup_slave()
112 sh_spi_write(sh_spi_read(&ss->regs->cr2) | 0x07, &ss->regs->cr2); in spi_setup_slave()
115 return &ss->slave; in spi_setup_slave()
132 struct sh_spi *ss = to_sh_spi(slave); in spi_release_bus() local
134 sh_spi_write(sh_spi_read(&ss->regs->cr1) & in spi_release_bus()
135 ~(SH_SPI_SSA | SH_SPI_SSDB | SH_SPI_SSD), &ss->regs->cr1); in spi_release_bus()
138 static int sh_spi_send(struct sh_spi *ss, const unsigned char *tx_data, in sh_spi_send() argument
145 sh_spi_set_bit(SH_SPI_SSA, &ss->regs->cr1); in sh_spi_send()
151 !(sh_spi_read(&ss->regs->cr4) & SH_SPI_WPABRT) && in sh_spi_send()
152 !(sh_spi_read(&ss->regs->cr1) & SH_SPI_TBF); in sh_spi_send()
154 sh_spi_write(tx_data[i], &ss->regs->tbr_rbr); in sh_spi_send()
158 if (sh_spi_read(&ss->regs->cr4) & SH_SPI_WPABRT) { in sh_spi_send()
161 sh_spi_set_bit(SH_SPI_WPABRT, &ss->regs->cr4); in sh_spi_send()
170 write_fifo_empty_wait(ss); in sh_spi_send()
174 sh_spi_clear_bit(SH_SPI_SSD | SH_SPI_SSDB, &ss->regs->cr1); in sh_spi_send()
175 sh_spi_set_bit(SH_SPI_SSA, &ss->regs->cr1); in sh_spi_send()
177 write_fifo_empty_wait(ss); in sh_spi_send()
183 static int sh_spi_receive(struct sh_spi *ss, unsigned char *rx_data, in sh_spi_receive() argument
189 sh_spi_write(SH_SPI_MAX_BYTE, &ss->regs->cr3); in sh_spi_receive()
191 sh_spi_write(len, &ss->regs->cr3); in sh_spi_receive()
193 sh_spi_clear_bit(SH_SPI_SSD | SH_SPI_SSDB, &ss->regs->cr1); in sh_spi_receive()
194 sh_spi_set_bit(SH_SPI_SSA, &ss->regs->cr1); in sh_spi_receive()
197 if (recvbuf_wait(ss)) in sh_spi_receive()
200 rx_data[i] = (unsigned char)sh_spi_read(&ss->regs->tbr_rbr); in sh_spi_receive()
202 sh_spi_write(0, &ss->regs->cr3); in sh_spi_receive()
210 struct sh_spi *ss = to_sh_spi(slave); in spi_xfer() local
217 sh_spi_write(sh_spi_read(&ss->regs->cr1) & ~SH_SPI_SSA, in spi_xfer()
218 &ss->regs->cr1); in spi_xfer()
221 ret = sh_spi_send(ss, tx_data, len, flags); in spi_xfer()
224 ret = sh_spi_receive(ss, rx_data, len, flags); in spi_xfer()
227 sh_spi_set_bit(SH_SPI_SSD, &ss->regs->cr1); in spi_xfer()
231 &ss->regs->cr1); in spi_xfer()
232 clear_fifo(ss); in spi_xfer()