Lines Matching refs:loongson_spi

18 static inline void loongson_spi_write_reg(struct loongson_spi *spi, unsigned char reg,  in loongson_spi_write_reg()
24 static inline char loongson_spi_read_reg(struct loongson_spi *spi, unsigned char reg) in loongson_spi_read_reg()
34 struct loongson_spi *loongson_spi = spi_controller_get_devdata(spi->controller); in loongson_spi_set_cs() local
36 cs = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_SFCS_REG) & ~mask; in loongson_spi_set_cs()
37 loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_SFCS_REG, val | cs); in loongson_spi_set_cs()
40 static void loongson_spi_set_clk(struct loongson_spi *loongson_spi, unsigned int hz) in loongson_spi_set_clk() argument
46 div = clamp_val(DIV_ROUND_UP_ULL(loongson_spi->clk_rate, hz), 2, 4096); in loongson_spi_set_clk()
48 loongson_spi->spcr = (div_tmp & GENMASK(1, 0)) >> 0; in loongson_spi_set_clk()
49 loongson_spi->sper = (div_tmp & GENMASK(3, 2)) >> 2; in loongson_spi_set_clk()
50 val = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_SPCR_REG); in loongson_spi_set_clk()
52 loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_SPCR_REG, val | in loongson_spi_set_clk()
53 loongson_spi->spcr); in loongson_spi_set_clk()
54 val = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_SPER_REG); in loongson_spi_set_clk()
56 loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_SPER_REG, val | in loongson_spi_set_clk()
57 loongson_spi->sper); in loongson_spi_set_clk()
58 loongson_spi->hz = hz; in loongson_spi_set_clk()
61 static void loongson_spi_set_mode(struct loongson_spi *loongson_spi, in loongson_spi_set_mode() argument
66 val = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_SPCR_REG); in loongson_spi_set_mode()
73 loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_SPCR_REG, val); in loongson_spi_set_mode()
74 loongson_spi->mode |= spi->mode; in loongson_spi_set_mode()
77 static int loongson_spi_update_state(struct loongson_spi *loongson_spi, in loongson_spi_update_state() argument
80 if (t && loongson_spi->hz != t->speed_hz) in loongson_spi_update_state()
81 loongson_spi_set_clk(loongson_spi, t->speed_hz); in loongson_spi_update_state()
83 if ((spi->mode ^ loongson_spi->mode) & SPI_MODE_X_MASK) in loongson_spi_update_state()
84 loongson_spi_set_mode(loongson_spi, spi); in loongson_spi_update_state()
91 struct loongson_spi *loongson_spi; in loongson_spi_setup() local
93 loongson_spi = spi_controller_get_devdata(spi->controller); in loongson_spi_setup()
100 loongson_spi->hz = 0; in loongson_spi_setup()
110 struct loongson_spi *loongson_spi = spi_controller_get_devdata(spi->controller); in loongson_spi_write_read_8bit() local
113 loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_FIFO_REG, *((*tx_buf)++)); in loongson_spi_write_read_8bit()
115 loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_FIFO_REG, 0); in loongson_spi_write_read_8bit()
117 ret = readb_poll_timeout(loongson_spi->base + LOONGSON_SPI_SPSR_REG, in loongson_spi_write_read_8bit()
118 loongson_spi->spsr, (loongson_spi->spsr & in loongson_spi_write_read_8bit()
123 *(*rx_buf)++ = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_FIFO_REG); in loongson_spi_write_read_8bit()
125 loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_FIFO_REG); in loongson_spi_write_read_8bit()
149 struct loongson_spi *loongson_spi = spi_controller_get_devdata(ctlr); in loongson_spi_prepare_message() local
151 loongson_spi->para = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_PARA_REG); in loongson_spi_prepare_message()
152 loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_PARA_REG, loongson_spi->para & in loongson_spi_prepare_message()
161 struct loongson_spi *loongson_spi = spi_controller_get_devdata(spi->controller); in loongson_spi_transfer_one() local
163 loongson_spi_update_state(loongson_spi, spi, xfer); in loongson_spi_transfer_one()
172 struct loongson_spi *loongson_spi = spi_controller_get_devdata(ctrl); in loongson_spi_unprepare_message() local
174 loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_PARA_REG, loongson_spi->para); in loongson_spi_unprepare_message()
179 static void loongson_spi_reginit(struct loongson_spi *loongson_spi_dev) in loongson_spi_reginit()
198 struct loongson_spi *spi; in loongson_spi_init_controller()
201 controller = devm_spi_alloc_host(dev, sizeof(struct loongson_spi)); in loongson_spi_init_controller()
234 struct loongson_spi *loongson_spi; in loongson_spi_suspend() local
240 loongson_spi = spi_controller_get_devdata(controller); in loongson_spi_suspend()
242 loongson_spi->spcr = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_SPCR_REG); in loongson_spi_suspend()
243 loongson_spi->sper = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_SPER_REG); in loongson_spi_suspend()
244 loongson_spi->spsr = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_SPSR_REG); in loongson_spi_suspend()
245 loongson_spi->para = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_PARA_REG); in loongson_spi_suspend()
246 loongson_spi->sfcs = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_SFCS_REG); in loongson_spi_suspend()
247 loongson_spi->timi = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_TIMI_REG); in loongson_spi_suspend()
254 struct loongson_spi *loongson_spi; in loongson_spi_resume() local
258 loongson_spi = spi_controller_get_devdata(controller); in loongson_spi_resume()
260 loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_SPCR_REG, loongson_spi->spcr); in loongson_spi_resume()
261 loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_SPER_REG, loongson_spi->sper); in loongson_spi_resume()
262 loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_SPSR_REG, loongson_spi->spsr); in loongson_spi_resume()
263 loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_PARA_REG, loongson_spi->para); in loongson_spi_resume()
264 loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_SFCS_REG, loongson_spi->sfcs); in loongson_spi_resume()
265 loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_TIMI_REG, loongson_spi->timi); in loongson_spi_resume()