loongson_spi
loongson_spi->hz = 0;
struct loongson_spi *loongson_spi = spi_controller_get_devdata(spi->controller);
loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_FIFO_REG, *((*tx_buf)++));
loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_FIFO_REG, 0);
ret = readb_poll_timeout(loongson_spi->base + LOONGSON_SPI_SPSR_REG,
loongson_spi->spsr, (loongson_spi->spsr &
*(*rx_buf)++ = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_FIFO_REG);
loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_FIFO_REG);
struct loongson_spi *loongson_spi = spi_controller_get_devdata(ctlr);
loongson_spi->para = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_PARA_REG);
loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_PARA_REG, loongson_spi->para &
struct loongson_spi *loongson_spi = spi_controller_get_devdata(spi->controller);
loongson_spi_update_state(loongson_spi, spi, xfer);
struct loongson_spi *loongson_spi = spi_controller_get_devdata(ctrl);
loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_PARA_REG, loongson_spi->para);
static void loongson_spi_reginit(struct loongson_spi *loongson_spi_dev)
static inline void loongson_spi_write_reg(struct loongson_spi *spi, unsigned char reg,
struct loongson_spi *spi;
controller = devm_spi_alloc_host(dev, sizeof(struct loongson_spi));
struct loongson_spi *loongson_spi;
loongson_spi = spi_controller_get_devdata(controller);
loongson_spi->spcr = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_SPCR_REG);
loongson_spi->sper = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_SPER_REG);
loongson_spi->spsr = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_SPSR_REG);
loongson_spi->para = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_PARA_REG);
loongson_spi->sfcs = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_SFCS_REG);
loongson_spi->timi = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_TIMI_REG);
static inline char loongson_spi_read_reg(struct loongson_spi *spi, unsigned char reg)
struct loongson_spi *loongson_spi;
loongson_spi = spi_controller_get_devdata(controller);
loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_SPCR_REG, loongson_spi->spcr);
loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_SPER_REG, loongson_spi->sper);
loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_SPSR_REG, loongson_spi->spsr);
loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_PARA_REG, loongson_spi->para);
loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_SFCS_REG, loongson_spi->sfcs);
loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_TIMI_REG, loongson_spi->timi);
struct loongson_spi *loongson_spi = spi_controller_get_devdata(spi->controller);
cs = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_SFCS_REG) & ~mask;
loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_SFCS_REG, val | cs);
static void loongson_spi_set_clk(struct loongson_spi *loongson_spi, unsigned int hz)
div = clamp_val(DIV_ROUND_UP_ULL(loongson_spi->clk_rate, hz), 2, 4096);
loongson_spi->spcr = (div_tmp & GENMASK(1, 0)) >> 0;
loongson_spi->sper = (div_tmp & GENMASK(3, 2)) >> 2;
val = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_SPCR_REG);
loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_SPCR_REG, val |
loongson_spi->spcr);
val = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_SPER_REG);
loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_SPER_REG, val |
loongson_spi->sper);
loongson_spi->hz = hz;
static void loongson_spi_set_mode(struct loongson_spi *loongson_spi,
val = loongson_spi_read_reg(loongson_spi, LOONGSON_SPI_SPCR_REG);
loongson_spi_write_reg(loongson_spi, LOONGSON_SPI_SPCR_REG, val);
loongson_spi->mode |= spi->mode;
static int loongson_spi_update_state(struct loongson_spi *loongson_spi,
if (t && loongson_spi->hz != t->speed_hz)
loongson_spi_set_clk(loongson_spi, t->speed_hz);
if ((spi->mode ^ loongson_spi->mode) & SPI_MODE_X_MASK)
loongson_spi_set_mode(loongson_spi, spi);
struct loongson_spi *loongson_spi;
loongson_spi = spi_controller_get_devdata(spi->controller);