Lines Matching refs:xspi

133 static void xlp_spi_sysctl_setup(struct xlp_spi_priv *xspi)  in xlp_spi_sysctl_setup()  argument
138 xlp_spi_sysctl_write(xspi, XLP_SPI_SYSCTRL, in xlp_spi_sysctl_setup()
140 xlp_spi_sysctl_write(xspi, XLP_SPI_SYSCTRL, XLP_SPI_SYS_PMEN); in xlp_spi_sysctl_setup()
145 struct xlp_spi_priv *xspi; in xlp_spi_setup() local
149 xspi = spi_master_get_devdata(spi->master); in xlp_spi_setup()
154 fdiv = DIV_ROUND_UP(xspi->spi_clk, spi->max_speed_hz); in xlp_spi_setup()
160 xlp_spi_reg_write(xspi, cs, XLP_SPI_FDIV, fdiv); in xlp_spi_setup()
161 xlp_spi_reg_write(xspi, cs, XLP_SPI_FIFO_THRESH, XLP_SPI_TXRXTH); in xlp_spi_setup()
162 cfg = xlp_spi_reg_read(xspi, cs, XLP_SPI_CONFIG); in xlp_spi_setup()
183 xlp_spi_reg_write(xspi, cs, XLP_SPI_CONFIG, cfg); in xlp_spi_setup()
188 static void xlp_spi_read_rxfifo(struct xlp_spi_priv *xspi) in xlp_spi_read_rxfifo() argument
193 rxfifo_cnt = xlp_spi_reg_read(xspi, xspi->cs, XLP_SPI_FIFO_WCNT); in xlp_spi_read_rxfifo()
196 rx_data = xlp_spi_reg_read(xspi, xspi->cs, XLP_SPI_RXDATA_FIFO); in xlp_spi_read_rxfifo()
198 nbytes = min(xspi->rx_len, 4); in xlp_spi_read_rxfifo()
200 xspi->rx_buf[i] = (rx_data >> (j * 8)) & 0xff; in xlp_spi_read_rxfifo()
202 xspi->rx_len -= nbytes; in xlp_spi_read_rxfifo()
203 xspi->rx_buf += nbytes; in xlp_spi_read_rxfifo()
208 static void xlp_spi_fill_txfifo(struct xlp_spi_priv *xspi) in xlp_spi_fill_txfifo() argument
213 txfifo_cnt = xlp_spi_reg_read(xspi, xspi->cs, XLP_SPI_FIFO_WCNT); in xlp_spi_fill_txfifo()
216 while (xspi->tx_len && (txfifo_cnt < XLP_SPI_FIFO_SIZE)) { in xlp_spi_fill_txfifo()
219 nbytes = min(xspi->tx_len, 4); in xlp_spi_fill_txfifo()
221 tx_data |= xspi->tx_buf[i] << (j * 8); in xlp_spi_fill_txfifo()
223 xlp_spi_reg_write(xspi, xspi->cs, XLP_SPI_TXDATA_FIFO, tx_data); in xlp_spi_fill_txfifo()
224 xspi->tx_len -= nbytes; in xlp_spi_fill_txfifo()
225 xspi->tx_buf += nbytes; in xlp_spi_fill_txfifo()
232 struct xlp_spi_priv *xspi = dev_id; in xlp_spi_interrupt() local
235 stat = xlp_spi_reg_read(xspi, xspi->cs, XLP_SPI_STATUS) & in xlp_spi_interrupt()
241 if (xspi->tx_len) in xlp_spi_interrupt()
242 xlp_spi_fill_txfifo(xspi); in xlp_spi_interrupt()
244 xspi->txerrors++; in xlp_spi_interrupt()
248 if (xspi->rx_len) in xlp_spi_interrupt()
249 xlp_spi_read_rxfifo(xspi); in xlp_spi_interrupt()
251 xspi->rxerrors++; in xlp_spi_interrupt()
255 xlp_spi_reg_write(xspi, xspi->cs, XLP_SPI_STATUS, stat); in xlp_spi_interrupt()
257 complete(&xspi->done); in xlp_spi_interrupt()
262 static void xlp_spi_send_cmd(struct xlp_spi_priv *xspi, int xfer_len, in xlp_spi_send_cmd() argument
267 if (xspi->tx_buf) in xlp_spi_send_cmd()
269 if (xspi->rx_buf) in xlp_spi_send_cmd()
274 xlp_spi_reg_write(xspi, xspi->cs, XLP_SPI_CMD, cmd); in xlp_spi_send_cmd()
358 struct xlp_spi_priv *xspi = spi_master_get_devdata(master); in xlp_spi_transfer_one() local
361 xspi->cs = spi->chip_select; in xlp_spi_transfer_one()
362 xspi->dev = spi->dev; in xlp_spi_transfer_one()
365 xspi->cmd_cont = 0; in xlp_spi_transfer_one()
367 xspi->cmd_cont = 1; in xlp_spi_transfer_one()
369 if (xlp_spi_txrx_bufs(xspi, t)) in xlp_spi_transfer_one()
379 struct xlp_spi_priv *xspi; in xlp_spi_probe() local
384 xspi = devm_kzalloc(&pdev->dev, sizeof(*xspi), GFP_KERNEL); in xlp_spi_probe()
385 if (!xspi) in xlp_spi_probe()
389 xspi->base = devm_ioremap_resource(&pdev->dev, res); in xlp_spi_probe()
390 if (IS_ERR(xspi->base)) in xlp_spi_probe()
391 return PTR_ERR(xspi->base); in xlp_spi_probe()
399 pdev->name, xspi); in xlp_spi_probe()
410 xspi->spi_clk = clk_get_rate(clk); in xlp_spi_probe()
425 init_completion(&xspi->done); in xlp_spi_probe()
426 spi_master_set_devdata(master, xspi); in xlp_spi_probe()
427 xlp_spi_sysctl_setup(xspi); in xlp_spi_probe()