Lines Matching refs:ctlr
131 struct spi_controller *ctlr; member
391 complete(&bs->ctlr->xfer_completion); in bcm2835_spi_interrupt()
397 static int bcm2835_spi_transfer_one_irq(struct spi_controller *ctlr, in bcm2835_spi_transfer_one_irq() argument
402 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); in bcm2835_spi_transfer_one_irq()
472 static void bcm2835_spi_transfer_prologue(struct spi_controller *ctlr, in bcm2835_spi_transfer_prologue() argument
517 dma_sync_single_for_device(ctlr->dma_rx->device->dev, in bcm2835_spi_transfer_prologue()
596 struct spi_controller *ctlr = data; in bcm2835_spi_dma_rx_done() local
597 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); in bcm2835_spi_dma_rx_done()
604 dmaengine_terminate_async(ctlr->dma_tx); in bcm2835_spi_dma_rx_done()
613 complete(&ctlr->xfer_completion); in bcm2835_spi_dma_rx_done()
624 struct spi_controller *ctlr = data; in bcm2835_spi_dma_tx_done() local
625 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); in bcm2835_spi_dma_tx_done()
641 dmaengine_terminate_async(ctlr->dma_rx); in bcm2835_spi_dma_tx_done()
645 complete(&ctlr->xfer_completion); in bcm2835_spi_dma_tx_done()
659 static int bcm2835_spi_prepare_sg(struct spi_controller *ctlr, in bcm2835_spi_prepare_sg() argument
676 chan = ctlr->dma_tx; in bcm2835_spi_prepare_sg()
682 chan = ctlr->dma_rx; in bcm2835_spi_prepare_sg()
698 desc->callback_param = ctlr; in bcm2835_spi_prepare_sg()
701 desc->callback_param = ctlr; in bcm2835_spi_prepare_sg()
758 static int bcm2835_spi_transfer_one_dma(struct spi_controller *ctlr, in bcm2835_spi_transfer_one_dma() argument
763 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); in bcm2835_spi_transfer_one_dma()
774 bcm2835_spi_transfer_prologue(ctlr, tfr, bs, cs); in bcm2835_spi_transfer_one_dma()
778 ret = bcm2835_spi_prepare_sg(ctlr, spi, tfr, bs, true); in bcm2835_spi_transfer_one_dma()
797 dma_async_issue_pending(ctlr->dma_tx); in bcm2835_spi_transfer_one_dma()
804 ret = bcm2835_spi_prepare_sg(ctlr, spi, tfr, bs, false); in bcm2835_spi_transfer_one_dma()
811 dmaengine_terminate_sync(ctlr->dma_tx); in bcm2835_spi_transfer_one_dma()
817 dma_async_issue_pending(ctlr->dma_rx); in bcm2835_spi_transfer_one_dma()
827 dmaengine_terminate_async(ctlr->dma_rx); in bcm2835_spi_transfer_one_dma()
840 static bool bcm2835_spi_can_dma(struct spi_controller *ctlr, in bcm2835_spi_can_dma() argument
852 static void bcm2835_dma_release(struct spi_controller *ctlr, in bcm2835_dma_release() argument
857 if (ctlr->dma_tx) { in bcm2835_dma_release()
858 dmaengine_terminate_sync(ctlr->dma_tx); in bcm2835_dma_release()
864 dma_unmap_page_attrs(ctlr->dma_tx->device->dev, in bcm2835_dma_release()
869 dma_release_channel(ctlr->dma_tx); in bcm2835_dma_release()
870 ctlr->dma_tx = NULL; in bcm2835_dma_release()
873 if (ctlr->dma_rx) { in bcm2835_dma_release()
874 dmaengine_terminate_sync(ctlr->dma_rx); in bcm2835_dma_release()
881 dma_unmap_single(ctlr->dma_rx->device->dev, in bcm2835_dma_release()
886 dma_release_channel(ctlr->dma_rx); in bcm2835_dma_release()
887 ctlr->dma_rx = NULL; in bcm2835_dma_release()
891 static int bcm2835_dma_init(struct spi_controller *ctlr, struct device *dev, in bcm2835_dma_init() argument
900 addr = of_get_address(ctlr->dev.of_node, 0, NULL, NULL); in bcm2835_dma_init()
909 ctlr->dma_tx = dma_request_chan(dev, "tx"); in bcm2835_dma_init()
910 if (IS_ERR(ctlr->dma_tx)) { in bcm2835_dma_init()
912 ret = PTR_ERR(ctlr->dma_tx); in bcm2835_dma_init()
913 ctlr->dma_tx = NULL; in bcm2835_dma_init()
916 ctlr->dma_rx = dma_request_chan(dev, "rx"); in bcm2835_dma_init()
917 if (IS_ERR(ctlr->dma_rx)) { in bcm2835_dma_init()
919 ret = PTR_ERR(ctlr->dma_rx); in bcm2835_dma_init()
920 ctlr->dma_rx = NULL; in bcm2835_dma_init()
932 ret = dmaengine_slave_config(ctlr->dma_tx, &slave_config); in bcm2835_dma_init()
936 bs->fill_tx_addr = dma_map_page_attrs(ctlr->dma_tx->device->dev, in bcm2835_dma_init()
940 if (dma_mapping_error(ctlr->dma_tx->device->dev, bs->fill_tx_addr)) { in bcm2835_dma_init()
947 bs->fill_tx_desc = dmaengine_prep_dma_cyclic(ctlr->dma_tx, in bcm2835_dma_init()
973 ret = dmaengine_slave_config(ctlr->dma_rx, &slave_config); in bcm2835_dma_init()
977 bs->clear_rx_addr = dma_map_single(ctlr->dma_rx->device->dev, in bcm2835_dma_init()
981 if (dma_mapping_error(ctlr->dma_rx->device->dev, bs->clear_rx_addr)) { in bcm2835_dma_init()
989 bs->clear_rx_desc[i] = dmaengine_prep_dma_cyclic(ctlr->dma_rx, in bcm2835_dma_init()
1007 ctlr->can_dma = bcm2835_spi_can_dma; in bcm2835_dma_init()
1015 bcm2835_dma_release(ctlr, bs); in bcm2835_dma_init()
1027 static int bcm2835_spi_transfer_one_poll(struct spi_controller *ctlr, in bcm2835_spi_transfer_one_poll() argument
1032 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); in bcm2835_spi_transfer_one_poll()
1071 return bcm2835_spi_transfer_one_irq(ctlr, spi, in bcm2835_spi_transfer_one_poll()
1082 static int bcm2835_spi_transfer_one(struct spi_controller *ctlr, in bcm2835_spi_transfer_one() argument
1086 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); in bcm2835_spi_transfer_one()
1130 return bcm2835_spi_transfer_one_poll(ctlr, spi, tfr, cs); in bcm2835_spi_transfer_one()
1136 if (ctlr->can_dma && bcm2835_spi_can_dma(ctlr, spi, tfr)) in bcm2835_spi_transfer_one()
1137 return bcm2835_spi_transfer_one_dma(ctlr, spi, tfr, cs); in bcm2835_spi_transfer_one()
1140 return bcm2835_spi_transfer_one_irq(ctlr, spi, tfr, cs, true); in bcm2835_spi_transfer_one()
1143 static int bcm2835_spi_prepare_message(struct spi_controller *ctlr, in bcm2835_spi_prepare_message() argument
1147 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); in bcm2835_spi_prepare_message()
1150 if (ctlr->can_dma) { in bcm2835_spi_prepare_message()
1156 ret = spi_split_transfers_maxsize(ctlr, msg, 65532, in bcm2835_spi_prepare_message()
1171 static void bcm2835_spi_handle_err(struct spi_controller *ctlr, in bcm2835_spi_handle_err() argument
1174 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); in bcm2835_spi_handle_err()
1177 if (ctlr->dma_tx) { in bcm2835_spi_handle_err()
1178 dmaengine_terminate_sync(ctlr->dma_tx); in bcm2835_spi_handle_err()
1181 if (ctlr->dma_rx) { in bcm2835_spi_handle_err()
1182 dmaengine_terminate_sync(ctlr->dma_rx); in bcm2835_spi_handle_err()
1198 struct spi_controller *ctlr = spi->controller; in bcm2835_spi_setup() local
1199 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); in bcm2835_spi_setup()
1226 if (ctlr->dma_rx) { in bcm2835_spi_setup()
1231 dma_sync_single_for_device(ctlr->dma_rx->device->dev, in bcm2835_spi_setup()
1288 struct spi_controller *ctlr; in bcm2835_spi_probe() local
1292 ctlr = devm_spi_alloc_master(&pdev->dev, ALIGN(sizeof(*bs), in bcm2835_spi_probe()
1294 if (!ctlr) in bcm2835_spi_probe()
1297 platform_set_drvdata(pdev, ctlr); in bcm2835_spi_probe()
1299 ctlr->use_gpio_descriptors = true; in bcm2835_spi_probe()
1300 ctlr->mode_bits = BCM2835_SPI_MODE_BITS; in bcm2835_spi_probe()
1301 ctlr->bits_per_word_mask = SPI_BPW_MASK(8); in bcm2835_spi_probe()
1302 ctlr->num_chipselect = 3; in bcm2835_spi_probe()
1303 ctlr->setup = bcm2835_spi_setup; in bcm2835_spi_probe()
1304 ctlr->transfer_one = bcm2835_spi_transfer_one; in bcm2835_spi_probe()
1305 ctlr->handle_err = bcm2835_spi_handle_err; in bcm2835_spi_probe()
1306 ctlr->prepare_message = bcm2835_spi_prepare_message; in bcm2835_spi_probe()
1307 ctlr->dev.of_node = pdev->dev.of_node; in bcm2835_spi_probe()
1309 bs = spi_controller_get_devdata(ctlr); in bcm2835_spi_probe()
1310 bs->ctlr = ctlr; in bcm2835_spi_probe()
1328 err = bcm2835_dma_init(ctlr, &pdev->dev, bs); in bcm2835_spi_probe()
1343 err = spi_register_controller(ctlr); in bcm2835_spi_probe()
1355 bcm2835_dma_release(ctlr, bs); in bcm2835_spi_probe()
1363 struct spi_controller *ctlr = platform_get_drvdata(pdev); in bcm2835_spi_remove() local
1364 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); in bcm2835_spi_remove()
1368 spi_unregister_controller(ctlr); in bcm2835_spi_remove()
1370 bcm2835_dma_release(ctlr, bs); in bcm2835_spi_remove()