Lines Matching full:controller
203 static bool fsl_lpspi_can_dma(struct spi_controller *controller, in fsl_lpspi_can_dma() argument
209 if (!controller->dma_rx) in fsl_lpspi_can_dma()
226 static int lpspi_prepare_xfer_hardware(struct spi_controller *controller) in lpspi_prepare_xfer_hardware() argument
229 spi_controller_get_devdata(controller); in lpspi_prepare_xfer_hardware()
241 static int lpspi_unprepare_xfer_hardware(struct spi_controller *controller) in lpspi_unprepare_xfer_hardware() argument
244 spi_controller_get_devdata(controller); in lpspi_unprepare_xfer_hardware()
371 static int fsl_lpspi_dma_configure(struct spi_controller *controller) in fsl_lpspi_dma_configure() argument
377 spi_controller_get_devdata(controller); in fsl_lpspi_dma_configure()
397 ret = dmaengine_slave_config(controller->dma_tx, &tx); in fsl_lpspi_dma_configure()
408 ret = dmaengine_slave_config(controller->dma_rx, &rx); in fsl_lpspi_dma_configure()
453 static int fsl_lpspi_setup_transfer(struct spi_controller *controller, in fsl_lpspi_setup_transfer() argument
458 spi_controller_get_devdata(spi->controller); in fsl_lpspi_setup_transfer()
493 if (fsl_lpspi_can_dma(controller, spi, t)) in fsl_lpspi_setup_transfer()
501 static int fsl_lpspi_target_abort(struct spi_controller *controller) in fsl_lpspi_target_abort() argument
504 spi_controller_get_devdata(controller); in fsl_lpspi_target_abort()
517 static int fsl_lpspi_wait_for_completion(struct spi_controller *controller) in fsl_lpspi_wait_for_completion() argument
520 spi_controller_get_devdata(controller); in fsl_lpspi_wait_for_completion()
586 static int fsl_lpspi_dma_transfer(struct spi_controller *controller, in fsl_lpspi_dma_transfer() argument
596 ret = fsl_lpspi_dma_configure(controller); in fsl_lpspi_dma_transfer()
600 desc_rx = dmaengine_prep_slave_sg(controller->dma_rx, in fsl_lpspi_dma_transfer()
610 dma_async_issue_pending(controller->dma_rx); in fsl_lpspi_dma_transfer()
612 desc_tx = dmaengine_prep_slave_sg(controller->dma_tx, in fsl_lpspi_dma_transfer()
616 dmaengine_terminate_all(controller->dma_tx); in fsl_lpspi_dma_transfer()
624 dma_async_issue_pending(controller->dma_tx); in fsl_lpspi_dma_transfer()
637 dmaengine_terminate_all(controller->dma_tx); in fsl_lpspi_dma_transfer()
638 dmaengine_terminate_all(controller->dma_rx); in fsl_lpspi_dma_transfer()
647 dmaengine_terminate_all(controller->dma_tx); in fsl_lpspi_dma_transfer()
648 dmaengine_terminate_all(controller->dma_rx); in fsl_lpspi_dma_transfer()
657 dmaengine_terminate_all(controller->dma_tx); in fsl_lpspi_dma_transfer()
658 dmaengine_terminate_all(controller->dma_rx); in fsl_lpspi_dma_transfer()
667 dmaengine_terminate_all(controller->dma_tx); in fsl_lpspi_dma_transfer()
668 dmaengine_terminate_all(controller->dma_rx); in fsl_lpspi_dma_transfer()
679 static void fsl_lpspi_dma_exit(struct spi_controller *controller) in fsl_lpspi_dma_exit() argument
681 if (controller->dma_rx) { in fsl_lpspi_dma_exit()
682 dma_release_channel(controller->dma_rx); in fsl_lpspi_dma_exit()
683 controller->dma_rx = NULL; in fsl_lpspi_dma_exit()
686 if (controller->dma_tx) { in fsl_lpspi_dma_exit()
687 dma_release_channel(controller->dma_tx); in fsl_lpspi_dma_exit()
688 controller->dma_tx = NULL; in fsl_lpspi_dma_exit()
694 struct spi_controller *controller) in fsl_lpspi_dma_init() argument
699 controller->dma_tx = dma_request_chan(dev, "tx"); in fsl_lpspi_dma_init()
700 if (IS_ERR(controller->dma_tx)) { in fsl_lpspi_dma_init()
701 ret = PTR_ERR(controller->dma_tx); in fsl_lpspi_dma_init()
703 controller->dma_tx = NULL; in fsl_lpspi_dma_init()
708 controller->dma_rx = dma_request_chan(dev, "rx"); in fsl_lpspi_dma_init()
709 if (IS_ERR(controller->dma_rx)) { in fsl_lpspi_dma_init()
710 ret = PTR_ERR(controller->dma_rx); in fsl_lpspi_dma_init()
712 controller->dma_rx = NULL; in fsl_lpspi_dma_init()
718 controller->can_dma = fsl_lpspi_can_dma; in fsl_lpspi_dma_init()
719 controller->max_dma_len = FSL_LPSPI_MAX_EDMA_BYTES; in fsl_lpspi_dma_init()
723 fsl_lpspi_dma_exit(controller); in fsl_lpspi_dma_init()
727 static int fsl_lpspi_pio_transfer(struct spi_controller *controller, in fsl_lpspi_pio_transfer() argument
731 spi_controller_get_devdata(controller); in fsl_lpspi_pio_transfer()
743 ret = fsl_lpspi_wait_for_completion(controller); in fsl_lpspi_pio_transfer()
750 static int fsl_lpspi_transfer_one(struct spi_controller *controller, in fsl_lpspi_transfer_one() argument
755 spi_controller_get_devdata(controller); in fsl_lpspi_transfer_one()
759 ret = fsl_lpspi_setup_transfer(controller, spi, t); in fsl_lpspi_transfer_one()
769 ret = fsl_lpspi_dma_transfer(controller, fsl_lpspi, t); in fsl_lpspi_transfer_one()
771 ret = fsl_lpspi_pio_transfer(controller, t); in fsl_lpspi_transfer_one()
813 struct spi_controller *controller = dev_get_drvdata(dev); in fsl_lpspi_runtime_resume() local
817 fsl_lpspi = spi_controller_get_devdata(controller); in fsl_lpspi_runtime_resume()
834 struct spi_controller *controller = dev_get_drvdata(dev); in fsl_lpspi_runtime_suspend() local
837 fsl_lpspi = spi_controller_get_devdata(controller); in fsl_lpspi_runtime_suspend()
861 struct spi_controller *controller; in fsl_lpspi_probe() local
874 controller = devm_spi_alloc_target(&pdev->dev, in fsl_lpspi_probe()
877 controller = devm_spi_alloc_host(&pdev->dev, in fsl_lpspi_probe()
880 if (!controller) in fsl_lpspi_probe()
883 platform_set_drvdata(pdev, controller); in fsl_lpspi_probe()
885 fsl_lpspi = spi_controller_get_devdata(controller); in fsl_lpspi_probe()
948 controller->bits_per_word_mask = SPI_BPW_RANGE_MASK(8, 32); in fsl_lpspi_probe()
949 controller->transfer_one = fsl_lpspi_transfer_one; in fsl_lpspi_probe()
950 controller->prepare_transfer_hardware = lpspi_prepare_xfer_hardware; in fsl_lpspi_probe()
951 controller->unprepare_transfer_hardware = lpspi_unprepare_xfer_hardware; in fsl_lpspi_probe()
952 controller->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH; in fsl_lpspi_probe()
953 controller->flags = SPI_CONTROLLER_MUST_RX | SPI_CONTROLLER_MUST_TX; in fsl_lpspi_probe()
954 controller->dev.of_node = pdev->dev.of_node; in fsl_lpspi_probe()
955 controller->bus_num = pdev->id; in fsl_lpspi_probe()
956 controller->num_chipselect = num_cs; in fsl_lpspi_probe()
957 controller->target_abort = fsl_lpspi_target_abort; in fsl_lpspi_probe()
959 controller->use_gpio_descriptors = true; in fsl_lpspi_probe()
961 ret = fsl_lpspi_dma_init(&pdev->dev, fsl_lpspi, controller); in fsl_lpspi_probe()
969 ret = devm_spi_register_controller(&pdev->dev, controller); in fsl_lpspi_probe()
980 fsl_lpspi_dma_exit(controller); in fsl_lpspi_probe()
991 struct spi_controller *controller = platform_get_drvdata(pdev); in fsl_lpspi_remove() local
993 spi_controller_get_devdata(controller); in fsl_lpspi_remove()
995 fsl_lpspi_dma_exit(controller); in fsl_lpspi_remove()
1039 MODULE_DESCRIPTION("LPSPI Controller driver");