Lines Matching refs:master
129 static void bcm2835_spi_reset_hw(struct spi_master *master) in bcm2835_spi_reset_hw() argument
131 struct bcm2835_spi *bs = spi_master_get_devdata(master); in bcm2835_spi_reset_hw()
150 struct spi_master *master = dev_id; in bcm2835_spi_interrupt() local
151 struct bcm2835_spi *bs = spi_master_get_devdata(master); in bcm2835_spi_interrupt()
160 bcm2835_spi_reset_hw(master); in bcm2835_spi_interrupt()
162 complete(&master->xfer_completion); in bcm2835_spi_interrupt()
168 static int bcm2835_spi_transfer_one_irq(struct spi_master *master, in bcm2835_spi_transfer_one_irq() argument
173 struct bcm2835_spi *bs = spi_master_get_devdata(master); in bcm2835_spi_transfer_one_irq()
224 struct spi_master *master = data; in bcm2835_spi_dma_done() local
225 struct bcm2835_spi *bs = spi_master_get_devdata(master); in bcm2835_spi_dma_done()
228 bcm2835_spi_reset_hw(master); in bcm2835_spi_dma_done()
236 dmaengine_terminate_all(master->dma_tx); in bcm2835_spi_dma_done()
240 complete(&master->xfer_completion); in bcm2835_spi_dma_done()
243 static int bcm2835_spi_prepare_sg(struct spi_master *master, in bcm2835_spi_prepare_sg() argument
258 chan = master->dma_tx; in bcm2835_spi_prepare_sg()
265 chan = master->dma_rx; in bcm2835_spi_prepare_sg()
278 desc->callback_param = master; in bcm2835_spi_prepare_sg()
301 static int bcm2835_spi_transfer_one_dma(struct spi_master *master, in bcm2835_spi_transfer_one_dma() argument
306 struct bcm2835_spi *bs = spi_master_get_devdata(master); in bcm2835_spi_transfer_one_dma()
314 return bcm2835_spi_transfer_one_irq(master, spi, tfr, cs); in bcm2835_spi_transfer_one_dma()
318 ret = bcm2835_spi_prepare_sg(master, tfr, true); in bcm2835_spi_transfer_one_dma()
323 dma_async_issue_pending(master->dma_tx); in bcm2835_spi_transfer_one_dma()
339 ret = bcm2835_spi_prepare_sg(master, tfr, false); in bcm2835_spi_transfer_one_dma()
342 dmaengine_terminate_all(master->dma_tx); in bcm2835_spi_transfer_one_dma()
344 bcm2835_spi_reset_hw(master); in bcm2835_spi_transfer_one_dma()
349 dma_async_issue_pending(master->dma_rx); in bcm2835_spi_transfer_one_dma()
355 static bool bcm2835_spi_can_dma(struct spi_master *master, in bcm2835_spi_can_dma() argument
403 static void bcm2835_dma_release(struct spi_master *master) in bcm2835_dma_release() argument
405 if (master->dma_tx) { in bcm2835_dma_release()
406 dmaengine_terminate_all(master->dma_tx); in bcm2835_dma_release()
407 dma_release_channel(master->dma_tx); in bcm2835_dma_release()
408 master->dma_tx = NULL; in bcm2835_dma_release()
410 if (master->dma_rx) { in bcm2835_dma_release()
411 dmaengine_terminate_all(master->dma_rx); in bcm2835_dma_release()
412 dma_release_channel(master->dma_rx); in bcm2835_dma_release()
413 master->dma_rx = NULL; in bcm2835_dma_release()
417 static void bcm2835_dma_init(struct spi_master *master, struct device *dev) in bcm2835_dma_init() argument
425 addr = of_get_address(master->dev.of_node, 0, NULL, NULL); in bcm2835_dma_init()
433 master->dma_tx = dma_request_slave_channel(dev, "tx"); in bcm2835_dma_init()
434 if (!master->dma_tx) { in bcm2835_dma_init()
438 master->dma_rx = dma_request_slave_channel(dev, "rx"); in bcm2835_dma_init()
439 if (!master->dma_rx) { in bcm2835_dma_init()
449 ret = dmaengine_slave_config(master->dma_tx, &slave_config); in bcm2835_dma_init()
457 ret = dmaengine_slave_config(master->dma_rx, &slave_config); in bcm2835_dma_init()
462 master->can_dma = bcm2835_spi_can_dma; in bcm2835_dma_init()
463 master->max_dma_len = 65535; /* limitation by BCM2835_SPI_DLEN */ in bcm2835_dma_init()
465 master->flags = SPI_MASTER_MUST_RX | SPI_MASTER_MUST_TX; in bcm2835_dma_init()
473 bcm2835_dma_release(master); in bcm2835_dma_init()
478 static int bcm2835_spi_transfer_one_poll(struct spi_master *master, in bcm2835_spi_transfer_one_poll() argument
484 struct bcm2835_spi *bs = spi_master_get_devdata(master); in bcm2835_spi_transfer_one_poll()
516 return bcm2835_spi_transfer_one_irq(master, spi, in bcm2835_spi_transfer_one_poll()
522 bcm2835_spi_reset_hw(master); in bcm2835_spi_transfer_one_poll()
527 static int bcm2835_spi_transfer_one(struct spi_master *master, in bcm2835_spi_transfer_one() argument
531 struct bcm2835_spi *bs = spi_master_get_devdata(master); in bcm2835_spi_transfer_one()
558 tfr->rx_buf != master->dummy_rx) in bcm2835_spi_transfer_one()
584 return bcm2835_spi_transfer_one_poll(master, spi, tfr, in bcm2835_spi_transfer_one()
588 if (master->can_dma && bcm2835_spi_can_dma(master, spi, tfr)) in bcm2835_spi_transfer_one()
589 return bcm2835_spi_transfer_one_dma(master, spi, tfr, cs); in bcm2835_spi_transfer_one()
592 return bcm2835_spi_transfer_one_irq(master, spi, tfr, cs); in bcm2835_spi_transfer_one()
595 static int bcm2835_spi_prepare_message(struct spi_master *master, in bcm2835_spi_prepare_message() argument
599 struct bcm2835_spi *bs = spi_master_get_devdata(master); in bcm2835_spi_prepare_message()
614 static void bcm2835_spi_handle_err(struct spi_master *master, in bcm2835_spi_handle_err() argument
617 struct bcm2835_spi *bs = spi_master_get_devdata(master); in bcm2835_spi_handle_err()
621 dmaengine_terminate_all(master->dma_tx); in bcm2835_spi_handle_err()
622 dmaengine_terminate_all(master->dma_rx); in bcm2835_spi_handle_err()
625 bcm2835_spi_reset_hw(master); in bcm2835_spi_handle_err()
640 struct spi_master *master = spi->master; in bcm2835_spi_set_cs() local
641 struct bcm2835_spi *bs = spi_master_get_devdata(master); in bcm2835_spi_set_cs()
740 struct spi_master *master; in bcm2835_spi_probe() local
745 master = devm_spi_alloc_master(&pdev->dev, sizeof(*bs)); in bcm2835_spi_probe()
746 if (!master) { in bcm2835_spi_probe()
751 platform_set_drvdata(pdev, master); in bcm2835_spi_probe()
753 master->mode_bits = BCM2835_SPI_MODE_BITS; in bcm2835_spi_probe()
754 master->bits_per_word_mask = SPI_BPW_MASK(8); in bcm2835_spi_probe()
755 master->num_chipselect = 3; in bcm2835_spi_probe()
756 master->setup = bcm2835_spi_setup; in bcm2835_spi_probe()
757 master->set_cs = bcm2835_spi_set_cs; in bcm2835_spi_probe()
758 master->transfer_one = bcm2835_spi_transfer_one; in bcm2835_spi_probe()
759 master->handle_err = bcm2835_spi_handle_err; in bcm2835_spi_probe()
760 master->prepare_message = bcm2835_spi_prepare_message; in bcm2835_spi_probe()
761 master->dev.of_node = pdev->dev.of_node; in bcm2835_spi_probe()
763 bs = spi_master_get_devdata(master); in bcm2835_spi_probe()
785 bcm2835_dma_init(master, &pdev->dev); in bcm2835_spi_probe()
792 dev_name(&pdev->dev), master); in bcm2835_spi_probe()
798 err = spi_register_master(master); in bcm2835_spi_probe()
807 bcm2835_dma_release(master); in bcm2835_spi_probe()
814 struct spi_master *master = platform_get_drvdata(pdev); in bcm2835_spi_remove() local
815 struct bcm2835_spi *bs = spi_master_get_devdata(master); in bcm2835_spi_remove()
817 spi_unregister_master(master); in bcm2835_spi_remove()
825 bcm2835_dma_release(master); in bcm2835_spi_remove()