Lines Matching refs:xspi
125 static void xlp_spi_sysctl_setup(struct xlp_spi_priv *xspi)
130 xlp_spi_sysctl_write(xspi, XLP_SPI_SYSCTRL,
132 xlp_spi_sysctl_write(xspi, XLP_SPI_SYSCTRL, XLP_SPI_SYS_PMEN);
137 struct xlp_spi_priv *xspi;
141 xspi = spi_master_get_devdata(spi->master);
146 fdiv = DIV_ROUND_UP(xspi->spi_clk, spi->max_speed_hz);
152 xlp_spi_reg_write(xspi, cs, XLP_SPI_FDIV, fdiv);
153 xlp_spi_reg_write(xspi, cs, XLP_SPI_FIFO_THRESH, XLP_SPI_TXRXTH);
154 cfg = xlp_spi_reg_read(xspi, cs, XLP_SPI_CONFIG);
175 xlp_spi_reg_write(xspi, cs, XLP_SPI_CONFIG, cfg);
180 static void xlp_spi_read_rxfifo(struct xlp_spi_priv *xspi)
185 rxfifo_cnt = xlp_spi_reg_read(xspi, xspi->cs, XLP_SPI_FIFO_WCNT);
188 rx_data = xlp_spi_reg_read(xspi, xspi->cs, XLP_SPI_RXDATA_FIFO);
190 nbytes = min(xspi->rx_len, 4);
192 xspi->rx_buf[i] = (rx_data >> (j * 8)) & 0xff;
194 xspi->rx_len -= nbytes;
195 xspi->rx_buf += nbytes;
200 static void xlp_spi_fill_txfifo(struct xlp_spi_priv *xspi)
205 txfifo_cnt = xlp_spi_reg_read(xspi, xspi->cs, XLP_SPI_FIFO_WCNT);
208 while (xspi->tx_len && (txfifo_cnt < XLP_SPI_FIFO_SIZE)) {
211 nbytes = min(xspi->tx_len, 4);
213 tx_data |= xspi->tx_buf[i] << (j * 8);
215 xlp_spi_reg_write(xspi, xspi->cs, XLP_SPI_TXDATA_FIFO, tx_data);
216 xspi->tx_len -= nbytes;
217 xspi->tx_buf += nbytes;
224 struct xlp_spi_priv *xspi = dev_id;
227 stat = xlp_spi_reg_read(xspi, xspi->cs, XLP_SPI_STATUS) &
233 if (xspi->tx_len)
234 xlp_spi_fill_txfifo(xspi);
236 xspi->txerrors++;
240 if (xspi->rx_len)
241 xlp_spi_read_rxfifo(xspi);
243 xspi->rxerrors++;
247 xlp_spi_reg_write(xspi, xspi->cs, XLP_SPI_STATUS, stat);
249 complete(&xspi->done);
254 static void xlp_spi_send_cmd(struct xlp_spi_priv *xspi, int xfer_len,
259 if (xspi->tx_buf)
261 if (xspi->rx_buf)
266 xlp_spi_reg_write(xspi, xspi->cs, XLP_SPI_CMD, cmd);
350 struct xlp_spi_priv *xspi = spi_master_get_devdata(master);
353 xspi->cs = spi_get_chipselect(spi, 0);
354 xspi->dev = spi->dev;
357 xspi->cmd_cont = 0;
359 xspi->cmd_cont = 1;
361 if (xlp_spi_txrx_bufs(xspi, t))
371 struct xlp_spi_priv *xspi;
375 xspi = devm_kzalloc(&pdev->dev, sizeof(*xspi), GFP_KERNEL);
376 if (!xspi)
379 xspi->base = devm_platform_ioremap_resource(pdev, 0);
380 if (IS_ERR(xspi->base))
381 return PTR_ERR(xspi->base);
387 pdev->name, xspi);
399 xspi->spi_clk = clk_get_rate(clk);
414 init_completion(&xspi->done);
415 spi_master_set_devdata(master, xspi);
416 xlp_spi_sysctl_setup(xspi);