Lines Matching refs:xfer
226 struct spi_transfer *xfer; /* Store xfer temporarily */ member
420 struct spi_transfer *xfer) in rockchip_spi_prepare_irq() argument
422 rs->tx_left = rs->tx ? xfer->len / rs->n_bytes : 0; in rockchip_spi_prepare_irq()
423 rs->rx_left = xfer->len / rs->n_bytes; in rockchip_spi_prepare_irq()
491 struct spi_controller *ctlr, struct spi_transfer *xfer) in rockchip_spi_prepare_dma() argument
498 if (xfer->rx_buf) { in rockchip_spi_prepare_dma()
503 .src_maxburst = rockchip_spi_calc_burst_size(xfer->len / rs->n_bytes), in rockchip_spi_prepare_dma()
510 xfer->rx_sg.sgl, xfer->rx_sg.nents, in rockchip_spi_prepare_dma()
520 if (xfer->tx_buf) { in rockchip_spi_prepare_dma()
532 xfer->tx_sg.sgl, xfer->tx_sg.nents, in rockchip_spi_prepare_dma()
567 struct spi_controller *ctlr, struct spi_transfer *xfer) in rockchip_spi_pio_transfer() argument
570 u32 speed_hz = xfer->speed_hz; in rockchip_spi_pio_transfer()
577 ms = 8LL * 1000LL * xfer->len; in rockchip_spi_pio_transfer()
586 rs->tx_left = rs->tx ? xfer->len / rs->n_bytes : 0; in rockchip_spi_pio_transfer()
587 rs->rx_left = rs->rx ? xfer->len / rs->n_bytes : 0; in rockchip_spi_pio_transfer()
617 struct spi_device *spi, struct spi_transfer *xfer, in rockchip_spi_config() argument
639 if (xfer->rx_buf && xfer->tx_buf) { in rockchip_spi_config()
641 } else if (xfer->rx_buf) { in rockchip_spi_config()
643 } else if (xfer->tx_buf) { in rockchip_spi_config()
657 switch (xfer->bits_per_word) { in rockchip_spi_config()
660 cr1 = xfer->len - 1; in rockchip_spi_config()
664 cr1 = xfer->len - 1; in rockchip_spi_config()
668 cr1 = xfer->len / 2 - 1; in rockchip_spi_config()
676 xfer->bits_per_word); in rockchip_spi_config()
681 if (xfer->tx_buf) in rockchip_spi_config()
683 if (xfer->rx_buf) in rockchip_spi_config()
707 if ((xfer->len / rs->n_bytes) < rs->fifo_len) in rockchip_spi_config()
708 writel_relaxed(xfer->len / rs->n_bytes - 1, rs->regs + ROCKCHIP_SPI_RXFTLR); in rockchip_spi_config()
713 writel_relaxed(rockchip_spi_calc_burst_size(xfer->len / rs->n_bytes) - 1, in rockchip_spi_config()
717 if (rs->max_baud_div_in_cpha && xfer->speed_hz != rs->speed_hz) { in rockchip_spi_config()
719 if (rs->freq < 2 * xfer->speed_hz) { in rockchip_spi_config()
720 clk_set_rate(rs->spiclk, 2 * xfer->speed_hz); in rockchip_spi_config()
724 …if ((spi->mode & SPI_CPHA) && (DIV_ROUND_UP(rs->freq, xfer->speed_hz) > rs->max_baud_div_in_cpha))… in rockchip_spi_config()
725 clk_set_rate(rs->spiclk, rs->max_baud_div_in_cpha * xfer->speed_hz); in rockchip_spi_config()
734 writel_relaxed(2 * DIV_ROUND_UP(rs->freq, 2 * xfer->speed_hz), in rockchip_spi_config()
736 rs->speed_hz = xfer->speed_hz; in rockchip_spi_config()
763 struct spi_transfer *xfer) in rockchip_spi_transfer_wait() argument
766 u32 speed_hz = xfer->speed_hz; in rockchip_spi_transfer_wait()
783 ms = 8LL * 1000LL * xfer->len; in rockchip_spi_transfer_wait()
805 struct spi_transfer *xfer) in rockchip_spi_transfer_one() argument
813 if (!xfer->len) { in rockchip_spi_transfer_one()
821 if (!xfer->tx_buf && !xfer->rx_buf) { in rockchip_spi_transfer_one()
826 if (xfer->len > ROCKCHIP_SPI_MAX_TRANLEN) { in rockchip_spi_transfer_one()
827 dev_err(rs->dev, "Transfer is too long (%d)\n", xfer->len); in rockchip_spi_transfer_one()
831 rs->n_bytes = xfer->bits_per_word <= 8 ? 1 : 2; in rockchip_spi_transfer_one()
832 rs->xfer = xfer; in rockchip_spi_transfer_one()
836 use_dma = ctlr->can_dma ? ctlr->can_dma(ctlr, spi, xfer) : false; in rockchip_spi_transfer_one()
843 ret = rockchip_spi_config(rs, spi, xfer, xfer_mode, ctlr->slave); in rockchip_spi_transfer_one()
847 rs->tx = xfer->tx_buf; in rockchip_spi_transfer_one()
848 rs->rx = xfer->rx_buf; in rockchip_spi_transfer_one()
854 ret = rockchip_spi_pio_transfer(rs, ctlr, xfer); in rockchip_spi_transfer_one()
857 ret = rockchip_spi_prepare_dma(rs, ctlr, xfer); in rockchip_spi_transfer_one()
860 ret = rockchip_spi_prepare_irq(rs, ctlr, xfer); in rockchip_spi_transfer_one()
870 ret = rockchip_spi_transfer_wait(ctlr, xfer); in rockchip_spi_transfer_one()
880 struct spi_transfer *xfer) in rockchip_spi_can_dma() argument
883 unsigned int bytes_per_word = xfer->bits_per_word <= 8 ? 1 : 2; in rockchip_spi_can_dma()
889 return xfer->len / bytes_per_word >= rs->fifo_len; in rockchip_spi_can_dma()