Lines Matching refs:xspi

126 static void xlp_spi_sysctl_setup(struct xlp_spi_priv *xspi)
131 xlp_spi_sysctl_write(xspi, XLP_SPI_SYSCTRL,
133 xlp_spi_sysctl_write(xspi, XLP_SPI_SYSCTRL, XLP_SPI_SYS_PMEN);
138 struct xlp_spi_priv *xspi;
142 xspi = spi_master_get_devdata(spi->master);
147 fdiv = DIV_ROUND_UP(xspi->spi_clk, spi->max_speed_hz);
153 xlp_spi_reg_write(xspi, cs, XLP_SPI_FDIV, fdiv);
154 xlp_spi_reg_write(xspi, cs, XLP_SPI_FIFO_THRESH, XLP_SPI_TXRXTH);
155 cfg = xlp_spi_reg_read(xspi, cs, XLP_SPI_CONFIG);
176 xlp_spi_reg_write(xspi, cs, XLP_SPI_CONFIG, cfg);
181 static void xlp_spi_read_rxfifo(struct xlp_spi_priv *xspi)
186 rxfifo_cnt = xlp_spi_reg_read(xspi, xspi->cs, XLP_SPI_FIFO_WCNT);
189 rx_data = xlp_spi_reg_read(xspi, xspi->cs, XLP_SPI_RXDATA_FIFO);
191 nbytes = min(xspi->rx_len, 4);
193 xspi->rx_buf[i] = (rx_data >> (j * 8)) & 0xff;
195 xspi->rx_len -= nbytes;
196 xspi->rx_buf += nbytes;
201 static void xlp_spi_fill_txfifo(struct xlp_spi_priv *xspi)
206 txfifo_cnt = xlp_spi_reg_read(xspi, xspi->cs, XLP_SPI_FIFO_WCNT);
209 while (xspi->tx_len && (txfifo_cnt < XLP_SPI_FIFO_SIZE)) {
212 nbytes = min(xspi->tx_len, 4);
214 tx_data |= xspi->tx_buf[i] << (j * 8);
216 xlp_spi_reg_write(xspi, xspi->cs, XLP_SPI_TXDATA_FIFO, tx_data);
217 xspi->tx_len -= nbytes;
218 xspi->tx_buf += nbytes;
225 struct xlp_spi_priv *xspi = dev_id;
228 stat = xlp_spi_reg_read(xspi, xspi->cs, XLP_SPI_STATUS) &
234 if (xspi->tx_len)
235 xlp_spi_fill_txfifo(xspi);
237 xspi->txerrors++;
241 if (xspi->rx_len)
242 xlp_spi_read_rxfifo(xspi);
244 xspi->rxerrors++;
248 xlp_spi_reg_write(xspi, xspi->cs, XLP_SPI_STATUS, stat);
250 complete(&xspi->done);
255 static void xlp_spi_send_cmd(struct xlp_spi_priv *xspi, int xfer_len,
260 if (xspi->tx_buf)
262 if (xspi->rx_buf)
267 xlp_spi_reg_write(xspi, xspi->cs, XLP_SPI_CMD, cmd);
351 struct xlp_spi_priv *xspi = spi_master_get_devdata(master);
354 xspi->cs = spi->chip_select;
355 xspi->dev = spi->dev;
358 xspi->cmd_cont = 0;
360 xspi->cmd_cont = 1;
362 if (xlp_spi_txrx_bufs(xspi, t))
372 struct xlp_spi_priv *xspi;
376 xspi = devm_kzalloc(&pdev->dev, sizeof(*xspi), GFP_KERNEL);
377 if (!xspi)
380 xspi->base = devm_platform_ioremap_resource(pdev, 0);
381 if (IS_ERR(xspi->base))
382 return PTR_ERR(xspi->base);
388 pdev->name, xspi);
400 xspi->spi_clk = clk_get_rate(clk);
415 init_completion(&xspi->done);
416 spi_master_set_devdata(master, xspi);
417 xlp_spi_sysctl_setup(xspi);