Lines Matching refs:controller
180 static bool fsl_lpspi_can_dma(struct spi_controller *controller, in fsl_lpspi_can_dma() argument
186 if (!controller->dma_rx) in fsl_lpspi_can_dma()
204 static int lpspi_prepare_xfer_hardware(struct spi_controller *controller) in lpspi_prepare_xfer_hardware() argument
207 spi_controller_get_devdata(controller); in lpspi_prepare_xfer_hardware()
219 static int lpspi_unprepare_xfer_hardware(struct spi_controller *controller) in lpspi_unprepare_xfer_hardware() argument
222 spi_controller_get_devdata(controller); in lpspi_unprepare_xfer_hardware()
230 static int fsl_lpspi_prepare_message(struct spi_controller *controller, in fsl_lpspi_prepare_message() argument
234 spi_controller_get_devdata(controller); in fsl_lpspi_prepare_message()
354 static int fsl_lpspi_dma_configure(struct spi_controller *controller) in fsl_lpspi_dma_configure() argument
360 spi_controller_get_devdata(controller); in fsl_lpspi_dma_configure()
380 ret = dmaengine_slave_config(controller->dma_tx, &tx); in fsl_lpspi_dma_configure()
391 ret = dmaengine_slave_config(controller->dma_rx, &rx); in fsl_lpspi_dma_configure()
434 static int fsl_lpspi_setup_transfer(struct spi_controller *controller, in fsl_lpspi_setup_transfer() argument
439 spi_controller_get_devdata(spi->controller); in fsl_lpspi_setup_transfer()
471 if (fsl_lpspi_can_dma(controller, spi, t)) in fsl_lpspi_setup_transfer()
479 static int fsl_lpspi_slave_abort(struct spi_controller *controller) in fsl_lpspi_slave_abort() argument
482 spi_controller_get_devdata(controller); in fsl_lpspi_slave_abort()
495 static int fsl_lpspi_wait_for_completion(struct spi_controller *controller) in fsl_lpspi_wait_for_completion() argument
498 spi_controller_get_devdata(controller); in fsl_lpspi_wait_for_completion()
565 static int fsl_lpspi_dma_transfer(struct spi_controller *controller, in fsl_lpspi_dma_transfer() argument
575 ret = fsl_lpspi_dma_configure(controller); in fsl_lpspi_dma_transfer()
579 desc_rx = dmaengine_prep_slave_sg(controller->dma_rx, in fsl_lpspi_dma_transfer()
589 dma_async_issue_pending(controller->dma_rx); in fsl_lpspi_dma_transfer()
591 desc_tx = dmaengine_prep_slave_sg(controller->dma_tx, in fsl_lpspi_dma_transfer()
595 dmaengine_terminate_all(controller->dma_tx); in fsl_lpspi_dma_transfer()
603 dma_async_issue_pending(controller->dma_tx); in fsl_lpspi_dma_transfer()
616 dmaengine_terminate_all(controller->dma_tx); in fsl_lpspi_dma_transfer()
617 dmaengine_terminate_all(controller->dma_rx); in fsl_lpspi_dma_transfer()
626 dmaengine_terminate_all(controller->dma_tx); in fsl_lpspi_dma_transfer()
627 dmaengine_terminate_all(controller->dma_rx); in fsl_lpspi_dma_transfer()
636 dmaengine_terminate_all(controller->dma_tx); in fsl_lpspi_dma_transfer()
637 dmaengine_terminate_all(controller->dma_rx); in fsl_lpspi_dma_transfer()
646 dmaengine_terminate_all(controller->dma_tx); in fsl_lpspi_dma_transfer()
647 dmaengine_terminate_all(controller->dma_rx); in fsl_lpspi_dma_transfer()
658 static void fsl_lpspi_dma_exit(struct spi_controller *controller) in fsl_lpspi_dma_exit() argument
660 if (controller->dma_rx) { in fsl_lpspi_dma_exit()
661 dma_release_channel(controller->dma_rx); in fsl_lpspi_dma_exit()
662 controller->dma_rx = NULL; in fsl_lpspi_dma_exit()
665 if (controller->dma_tx) { in fsl_lpspi_dma_exit()
666 dma_release_channel(controller->dma_tx); in fsl_lpspi_dma_exit()
667 controller->dma_tx = NULL; in fsl_lpspi_dma_exit()
673 struct spi_controller *controller) in fsl_lpspi_dma_init() argument
678 controller->dma_tx = dma_request_slave_channel_reason(dev, "tx"); in fsl_lpspi_dma_init()
679 if (IS_ERR(controller->dma_tx)) { in fsl_lpspi_dma_init()
680 ret = PTR_ERR(controller->dma_tx); in fsl_lpspi_dma_init()
682 controller->dma_tx = NULL; in fsl_lpspi_dma_init()
687 controller->dma_rx = dma_request_slave_channel_reason(dev, "rx"); in fsl_lpspi_dma_init()
688 if (IS_ERR(controller->dma_rx)) { in fsl_lpspi_dma_init()
689 ret = PTR_ERR(controller->dma_rx); in fsl_lpspi_dma_init()
691 controller->dma_rx = NULL; in fsl_lpspi_dma_init()
697 controller->can_dma = fsl_lpspi_can_dma; in fsl_lpspi_dma_init()
698 controller->max_dma_len = FSL_LPSPI_MAX_EDMA_BYTES; in fsl_lpspi_dma_init()
702 fsl_lpspi_dma_exit(controller); in fsl_lpspi_dma_init()
706 static int fsl_lpspi_pio_transfer(struct spi_controller *controller, in fsl_lpspi_pio_transfer() argument
710 spi_controller_get_devdata(controller); in fsl_lpspi_pio_transfer()
722 ret = fsl_lpspi_wait_for_completion(controller); in fsl_lpspi_pio_transfer()
731 static int fsl_lpspi_transfer_one(struct spi_controller *controller, in fsl_lpspi_transfer_one() argument
736 spi_controller_get_devdata(controller); in fsl_lpspi_transfer_one()
740 ret = fsl_lpspi_setup_transfer(controller, spi, t); in fsl_lpspi_transfer_one()
748 ret = fsl_lpspi_dma_transfer(controller, fsl_lpspi, t); in fsl_lpspi_transfer_one()
750 ret = fsl_lpspi_pio_transfer(controller, t); in fsl_lpspi_transfer_one()
792 struct spi_controller *controller = dev_get_drvdata(dev); in fsl_lpspi_runtime_resume() local
796 fsl_lpspi = spi_controller_get_devdata(controller); in fsl_lpspi_runtime_resume()
813 struct spi_controller *controller = dev_get_drvdata(dev); in fsl_lpspi_runtime_suspend() local
816 fsl_lpspi = spi_controller_get_devdata(controller); in fsl_lpspi_runtime_suspend()
840 struct spi_controller *controller; in fsl_lpspi_probe() local
850 controller = spi_alloc_slave(&pdev->dev, in fsl_lpspi_probe()
853 controller = spi_alloc_master(&pdev->dev, in fsl_lpspi_probe()
856 if (!controller) in fsl_lpspi_probe()
859 platform_set_drvdata(pdev, controller); in fsl_lpspi_probe()
861 fsl_lpspi = spi_controller_get_devdata(controller); in fsl_lpspi_probe()
866 for (i = 0; i < controller->num_chipselect; i++) { in fsl_lpspi_probe()
884 controller->cs_gpios = fsl_lpspi->chipselect; in fsl_lpspi_probe()
885 controller->prepare_message = fsl_lpspi_prepare_message; in fsl_lpspi_probe()
888 controller->bits_per_word_mask = SPI_BPW_RANGE_MASK(8, 32); in fsl_lpspi_probe()
889 controller->transfer_one = fsl_lpspi_transfer_one; in fsl_lpspi_probe()
890 controller->prepare_transfer_hardware = lpspi_prepare_xfer_hardware; in fsl_lpspi_probe()
891 controller->unprepare_transfer_hardware = lpspi_unprepare_xfer_hardware; in fsl_lpspi_probe()
892 controller->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH; in fsl_lpspi_probe()
893 controller->flags = SPI_MASTER_MUST_RX | SPI_MASTER_MUST_TX; in fsl_lpspi_probe()
894 controller->dev.of_node = pdev->dev.of_node; in fsl_lpspi_probe()
895 controller->bus_num = pdev->id; in fsl_lpspi_probe()
896 controller->slave_abort = fsl_lpspi_slave_abort; in fsl_lpspi_probe()
948 ret = fsl_lpspi_dma_init(&pdev->dev, fsl_lpspi, controller); in fsl_lpspi_probe()
955 ret = devm_spi_register_controller(&pdev->dev, controller); in fsl_lpspi_probe()
964 spi_controller_put(controller); in fsl_lpspi_probe()
971 struct spi_controller *controller = platform_get_drvdata(pdev); in fsl_lpspi_remove() local
973 spi_controller_get_devdata(controller); in fsl_lpspi_remove()
977 spi_master_put(controller); in fsl_lpspi_remove()