Lines Matching refs:xspi

129 static inline u32 cdns_spi_read(struct cdns_spi *xspi, u32 offset)  in cdns_spi_read()  argument
131 return readl_relaxed(xspi->regs + offset); in cdns_spi_read()
134 static inline void cdns_spi_write(struct cdns_spi *xspi, u32 offset, u32 val) in cdns_spi_write() argument
136 writel_relaxed(val, xspi->regs + offset); in cdns_spi_write()
150 static void cdns_spi_init_hw(struct cdns_spi *xspi) in cdns_spi_init_hw() argument
154 if (xspi->is_decoded_cs) in cdns_spi_init_hw()
157 cdns_spi_write(xspi, CDNS_SPI_ER_OFFSET, in cdns_spi_init_hw()
159 cdns_spi_write(xspi, CDNS_SPI_IDR_OFFSET, in cdns_spi_init_hw()
163 while (cdns_spi_read(xspi, CDNS_SPI_ISR_OFFSET) & in cdns_spi_init_hw()
165 cdns_spi_read(xspi, CDNS_SPI_RXD_OFFSET); in cdns_spi_init_hw()
167 cdns_spi_write(xspi, CDNS_SPI_ISR_OFFSET, in cdns_spi_init_hw()
169 cdns_spi_write(xspi, CDNS_SPI_CR_OFFSET, ctrl_reg); in cdns_spi_init_hw()
170 cdns_spi_write(xspi, CDNS_SPI_ER_OFFSET, in cdns_spi_init_hw()
181 struct cdns_spi *xspi = spi_master_get_devdata(spi->master); in cdns_spi_chipselect() local
184 ctrl_reg = cdns_spi_read(xspi, CDNS_SPI_CR_OFFSET); in cdns_spi_chipselect()
192 if (!(xspi->is_decoded_cs)) in cdns_spi_chipselect()
201 cdns_spi_write(xspi, CDNS_SPI_CR_OFFSET, ctrl_reg); in cdns_spi_chipselect()
212 struct cdns_spi *xspi = spi_master_get_devdata(spi->master); in cdns_spi_config_clock_mode() local
215 new_ctrl_reg = ctrl_reg = cdns_spi_read(xspi, CDNS_SPI_CR_OFFSET); in cdns_spi_config_clock_mode()
231 cdns_spi_write(xspi, CDNS_SPI_ER_OFFSET, in cdns_spi_config_clock_mode()
233 cdns_spi_write(xspi, CDNS_SPI_CR_OFFSET, new_ctrl_reg); in cdns_spi_config_clock_mode()
234 cdns_spi_write(xspi, CDNS_SPI_ER_OFFSET, in cdns_spi_config_clock_mode()
256 struct cdns_spi *xspi = spi_master_get_devdata(spi->master); in cdns_spi_config_clock_freq() local
260 frequency = clk_get_rate(xspi->ref_clk); in cdns_spi_config_clock_freq()
262 ctrl_reg = cdns_spi_read(xspi, CDNS_SPI_CR_OFFSET); in cdns_spi_config_clock_freq()
265 if (xspi->speed_hz != transfer->speed_hz) { in cdns_spi_config_clock_freq()
275 xspi->speed_hz = frequency / (2 << baud_rate_val); in cdns_spi_config_clock_freq()
277 cdns_spi_write(xspi, CDNS_SPI_CR_OFFSET, ctrl_reg); in cdns_spi_config_clock_freq()
294 struct cdns_spi *xspi = spi_master_get_devdata(spi->master); in cdns_spi_setup_transfer() local
300 xspi->speed_hz); in cdns_spi_setup_transfer()
309 static void cdns_spi_fill_tx_fifo(struct cdns_spi *xspi) in cdns_spi_fill_tx_fifo() argument
314 (xspi->tx_bytes > 0)) { in cdns_spi_fill_tx_fifo()
315 if (xspi->txbuf) in cdns_spi_fill_tx_fifo()
316 cdns_spi_write(xspi, CDNS_SPI_TXD_OFFSET, in cdns_spi_fill_tx_fifo()
317 *xspi->txbuf++); in cdns_spi_fill_tx_fifo()
319 cdns_spi_write(xspi, CDNS_SPI_TXD_OFFSET, 0); in cdns_spi_fill_tx_fifo()
321 xspi->tx_bytes--; in cdns_spi_fill_tx_fifo()
343 struct cdns_spi *xspi = spi_master_get_devdata(master); in cdns_spi_irq() local
347 intr_status = cdns_spi_read(xspi, CDNS_SPI_ISR_OFFSET); in cdns_spi_irq()
348 cdns_spi_write(xspi, CDNS_SPI_ISR_OFFSET, intr_status); in cdns_spi_irq()
355 cdns_spi_write(xspi, CDNS_SPI_IDR_OFFSET, in cdns_spi_irq()
362 trans_cnt = xspi->rx_bytes - xspi->tx_bytes; in cdns_spi_irq()
368 data = cdns_spi_read(xspi, CDNS_SPI_RXD_OFFSET); in cdns_spi_irq()
369 if (xspi->rxbuf) in cdns_spi_irq()
370 *xspi->rxbuf++ = data; in cdns_spi_irq()
372 xspi->rx_bytes--; in cdns_spi_irq()
376 if (xspi->tx_bytes) { in cdns_spi_irq()
378 cdns_spi_fill_tx_fifo(xspi); in cdns_spi_irq()
381 cdns_spi_write(xspi, CDNS_SPI_IDR_OFFSET, in cdns_spi_irq()
413 struct cdns_spi *xspi = spi_master_get_devdata(master); in cdns_transfer_one() local
415 xspi->txbuf = transfer->tx_buf; in cdns_transfer_one()
416 xspi->rxbuf = transfer->rx_buf; in cdns_transfer_one()
417 xspi->tx_bytes = transfer->len; in cdns_transfer_one()
418 xspi->rx_bytes = transfer->len; in cdns_transfer_one()
422 cdns_spi_fill_tx_fifo(xspi); in cdns_transfer_one()
424 cdns_spi_write(xspi, CDNS_SPI_IER_OFFSET, in cdns_transfer_one()
440 struct cdns_spi *xspi = spi_master_get_devdata(master); in cdns_prepare_transfer_hardware() local
442 cdns_spi_write(xspi, CDNS_SPI_ER_OFFSET, in cdns_prepare_transfer_hardware()
459 struct cdns_spi *xspi = spi_master_get_devdata(master); in cdns_unprepare_transfer_hardware() local
461 cdns_spi_write(xspi, CDNS_SPI_ER_OFFSET, in cdns_unprepare_transfer_hardware()
479 struct cdns_spi *xspi; in cdns_spi_probe() local
483 master = spi_alloc_master(&pdev->dev, sizeof(*xspi)); in cdns_spi_probe()
487 xspi = spi_master_get_devdata(master); in cdns_spi_probe()
492 xspi->regs = devm_ioremap_resource(&pdev->dev, res); in cdns_spi_probe()
493 if (IS_ERR(xspi->regs)) { in cdns_spi_probe()
494 ret = PTR_ERR(xspi->regs); in cdns_spi_probe()
498 xspi->pclk = devm_clk_get(&pdev->dev, "pclk"); in cdns_spi_probe()
499 if (IS_ERR(xspi->pclk)) { in cdns_spi_probe()
501 ret = PTR_ERR(xspi->pclk); in cdns_spi_probe()
505 xspi->ref_clk = devm_clk_get(&pdev->dev, "ref_clk"); in cdns_spi_probe()
506 if (IS_ERR(xspi->ref_clk)) { in cdns_spi_probe()
508 ret = PTR_ERR(xspi->ref_clk); in cdns_spi_probe()
512 ret = clk_prepare_enable(xspi->pclk); in cdns_spi_probe()
518 ret = clk_prepare_enable(xspi->ref_clk); in cdns_spi_probe()
531 &xspi->is_decoded_cs); in cdns_spi_probe()
533 xspi->is_decoded_cs = 0; in cdns_spi_probe()
536 cdns_spi_init_hw(xspi); in cdns_spi_probe()
561 master->max_speed_hz = clk_get_rate(xspi->ref_clk) / 4; in cdns_spi_probe()
562 xspi->speed_hz = master->max_speed_hz; in cdns_spi_probe()
575 clk_disable_unprepare(xspi->ref_clk); in cdns_spi_probe()
577 clk_disable_unprepare(xspi->pclk); in cdns_spi_probe()
596 struct cdns_spi *xspi = spi_master_get_devdata(master); in cdns_spi_remove() local
598 cdns_spi_write(xspi, CDNS_SPI_ER_OFFSET, in cdns_spi_remove()
601 clk_disable_unprepare(xspi->ref_clk); in cdns_spi_remove()
602 clk_disable_unprepare(xspi->pclk); in cdns_spi_remove()
623 struct cdns_spi *xspi = spi_master_get_devdata(master); in cdns_spi_suspend() local
627 clk_disable_unprepare(xspi->ref_clk); in cdns_spi_suspend()
629 clk_disable_unprepare(xspi->pclk); in cdns_spi_suspend()
647 struct cdns_spi *xspi = spi_master_get_devdata(master); in cdns_spi_resume() local
650 ret = clk_prepare_enable(xspi->pclk); in cdns_spi_resume()
656 ret = clk_prepare_enable(xspi->ref_clk); in cdns_spi_resume()
659 clk_disable(xspi->pclk); in cdns_spi_resume()