Lines Matching defs:xfer
207 struct spi_transfer *xfer; /* Store xfer temporarily */
390 static int rockchip_spi_prepare_irq(struct rockchip_spi *rs, struct spi_controller *ctlr, struct spi_transfer *xfer)
392 rs->tx = xfer->tx_buf;
393 rs->rx = xfer->rx_buf;
394 rs->tx_left = rs->tx ? xfer->len / rs->n_bytes : 0;
395 rs->rx_left = xfer->len / rs->n_bytes;
455 static int rockchip_spi_prepare_dma(struct rockchip_spi *rs, struct spi_controller *ctlr, struct spi_transfer *xfer)
461 rs->tx = xfer->tx_buf;
462 rs->rx = xfer->rx_buf;
465 if (xfer->rx_buf) {
470 .src_maxburst = rockchip_spi_calc_burst_size(xfer->len / rs->n_bytes),
475 rxdesc = dmaengine_prep_slave_sg(ctlr->dma_rx, xfer->rx_sg.sgl, xfer->rx_sg.nents, DMA_DEV_TO_MEM,
486 if (xfer->tx_buf) {
496 txdesc = dmaengine_prep_slave_sg(ctlr->dma_tx, xfer->tx_sg.sgl, xfer->tx_sg.nents, DMA_MEM_TO_DEV,
532 static int rockchip_spi_config(struct rockchip_spi *rs, struct spi_device *spi, struct spi_transfer *xfer, bool use_dma,
554 if (xfer->rx_buf && xfer->tx_buf) {
556 } else if (xfer->rx_buf) {
562 switch (xfer->bits_per_word) {
565 cr1 = xfer->len - 1;
569 cr1 = xfer->len - 1;
573 cr1 = xfer->len / ROCKCHIP_XFER_LEN_DIV - 1;
580 dev_err(rs->dev, "unknown bits per word: %d\n", xfer->bits_per_word);
585 if (xfer->tx_buf) {
588 if (xfer->rx_buf) {
612 if ((xfer->len / rs->n_bytes) < rs->fifo_len) {
613 writel_relaxed(xfer->len / rs->n_bytes - 1, rs->regs + ROCKCHIP_SPI_RXFTLR);
619 writel_relaxed(rockchip_spi_calc_burst_size(xfer->len / rs->n_bytes) - 1, rs->regs + ROCKCHIP_SPI_DMARDLR);
626 writel_relaxed(ROCKCHIP_SPI_BAUDRATE_MUL * DIV_ROUND_UP(rs->freq, ROCKCHIP_SPI_BAUDRATE_MUL * xfer->speed_hz),
656 rs->rx = rs->xfer->rx_buf;
657 rs->xfer->len = 0;
664 rs->rx += rs->xfer->len - rs->n_bytes * state.residue;
668 /* Get the valid data left in rx fifo and set rs->xfer->len real rx size */
682 rs->xfer->len = (unsigned int)(rs->rx - rs->xfer->rx_buf);
694 static int rockchip_spi_transfer_one(struct spi_controller *ctlr, struct spi_device *spi, struct spi_transfer *xfer)
702 if (!xfer->tx_buf && !xfer->rx_buf) {
707 if (xfer->len > ROCKCHIP_SPI_MAX_TRANLEN) {
708 dev_err(rs->dev, "Transfer is too long (%d)\n", xfer->len);
712 rs->n_bytes = xfer->bits_per_word <= 8 ? 1 : 2;
713 rs->xfer = xfer;
714 use_dma = ctlr->can_dma ? ctlr->can_dma(ctlr, spi, xfer) : false;
716 ret = rockchip_spi_config(rs, spi, xfer, use_dma, ctlr->slave);
722 return rockchip_spi_prepare_dma(rs, ctlr, xfer);
725 return rockchip_spi_prepare_irq(rs, ctlr, xfer);
728 static bool rockchip_spi_can_dma(struct spi_controller *ctlr, struct spi_device *spi, struct spi_transfer *xfer)
731 unsigned int bytes_per_word = xfer->bits_per_word <= 8 ? 1 : 2;
737 return xfer->len / bytes_per_word >= rs->fifo_len;