Lines Matching refs:xfer
143 struct spi_transfer *xfer; member
211 struct spi_transfer *xfer) in spi_qup_fifo_read() argument
213 u8 *rx_buf = xfer->rx_buf; in spi_qup_fifo_read()
219 while (controller->rx_bytes < xfer->len) { in spi_qup_fifo_read()
247 struct spi_transfer *xfer) in spi_qup_fifo_write() argument
249 const u8 *tx_buf = xfer->tx_buf; in spi_qup_fifo_write()
255 while (controller->tx_bytes < xfer->len) { in spi_qup_fifo_write()
284 static int spi_qup_prep_sg(struct spi_master *master, struct spi_transfer *xfer, in spi_qup_prep_sg() argument
298 nents = xfer->tx_sg.nents; in spi_qup_prep_sg()
299 sgl = xfer->tx_sg.sgl; in spi_qup_prep_sg()
302 nents = xfer->rx_sg.nents; in spi_qup_prep_sg()
303 sgl = xfer->rx_sg.sgl; in spi_qup_prep_sg()
319 struct spi_transfer *xfer) in spi_qup_dma_terminate() argument
321 if (xfer->tx_buf) in spi_qup_dma_terminate()
323 if (xfer->rx_buf) in spi_qup_dma_terminate()
327 static int spi_qup_do_dma(struct spi_master *master, struct spi_transfer *xfer) in spi_qup_do_dma() argument
332 if (xfer->rx_buf) in spi_qup_do_dma()
334 else if (xfer->tx_buf) in spi_qup_do_dma()
337 if (xfer->rx_buf) { in spi_qup_do_dma()
338 ret = spi_qup_prep_sg(master, xfer, DMA_DEV_TO_MEM, rx_done); in spi_qup_do_dma()
345 if (xfer->tx_buf) { in spi_qup_do_dma()
346 ret = spi_qup_prep_sg(master, xfer, DMA_MEM_TO_DEV, tx_done); in spi_qup_do_dma()
356 static int spi_qup_do_pio(struct spi_master *master, struct spi_transfer *xfer) in spi_qup_do_pio() argument
373 spi_qup_fifo_write(qup, xfer); in spi_qup_do_pio()
381 struct spi_transfer *xfer; in spi_qup_qup_irq() local
387 xfer = controller->xfer; in spi_qup_qup_irq()
388 controller->xfer = NULL; in spi_qup_qup_irq()
399 if (!xfer) { in spi_qup_qup_irq()
429 spi_qup_fifo_read(controller, xfer); in spi_qup_qup_irq()
432 spi_qup_fifo_write(controller, xfer); in spi_qup_qup_irq()
437 controller->xfer = xfer; in spi_qup_qup_irq()
440 if (controller->rx_bytes == xfer->len || error) in spi_qup_qup_irq()
447 spi_qup_get_mode(struct spi_master *master, struct spi_transfer *xfer) in spi_qup_get_mode() argument
454 if (xfer->bits_per_word <= 8) in spi_qup_get_mode()
456 else if (xfer->bits_per_word <= 16) in spi_qup_get_mode()
459 qup->n_words = xfer->len / qup->w_size; in spi_qup_get_mode()
470 static int spi_qup_io_config(struct spi_device *spi, struct spi_transfer *xfer) in spi_qup_io_config() argument
476 if (spi->mode & SPI_LOOP && xfer->len > controller->in_fifo_sz) { in spi_qup_io_config()
478 xfer->len, controller->in_fifo_sz); in spi_qup_io_config()
482 ret = clk_set_rate(controller->cclk, xfer->speed_hz); in spi_qup_io_config()
485 xfer->speed_hz); in spi_qup_io_config()
494 mode = spi_qup_get_mode(spi->master, xfer); in spi_qup_io_config()
524 if (xfer->tx_buf) in spi_qup_io_config()
572 if ((xfer->speed_hz >= SPI_HS_MIN_RATE) && !(spi->mode & SPI_LOOP)) in spi_qup_io_config()
581 config |= xfer->bits_per_word - 1; in spi_qup_io_config()
585 if (!xfer->tx_buf) in spi_qup_io_config()
587 if (!xfer->rx_buf) in spi_qup_io_config()
613 struct spi_transfer *xfer) in spi_qup_transfer_one() argument
619 ret = spi_qup_io_config(spi, xfer); in spi_qup_transfer_one()
623 timeout = DIV_ROUND_UP(xfer->speed_hz, MSEC_PER_SEC); in spi_qup_transfer_one()
624 timeout = DIV_ROUND_UP(xfer->len * 8, timeout); in spi_qup_transfer_one()
630 controller->xfer = xfer; in spi_qup_transfer_one()
637 ret = spi_qup_do_dma(master, xfer); in spi_qup_transfer_one()
639 ret = spi_qup_do_pio(master, xfer); in spi_qup_transfer_one()
655 controller->xfer = NULL; in spi_qup_transfer_one()
661 spi_qup_dma_terminate(master, xfer); in spi_qup_transfer_one()
667 struct spi_transfer *xfer) in spi_qup_can_dma() argument
675 if (xfer->rx_buf && (xfer->len % qup->in_blk_sz || in spi_qup_can_dma()
677 !IS_ALIGNED((size_t)xfer->rx_buf, dma_align))) in spi_qup_can_dma()
680 if (xfer->tx_buf && (xfer->len % qup->out_blk_sz || in spi_qup_can_dma()
682 !IS_ALIGNED((size_t)xfer->tx_buf, dma_align))) in spi_qup_can_dma()
685 mode = spi_qup_get_mode(master, xfer); in spi_qup_can_dma()