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()
161 bcm2835_spi_reset_hw(master); in bcm2835_spi_interrupt()
163 complete(&master->xfer_completion); in bcm2835_spi_interrupt()
169 static int bcm2835_spi_transfer_one_irq(struct spi_master *master, in bcm2835_spi_transfer_one_irq() argument
174 struct bcm2835_spi *bs = spi_master_get_devdata(master); in bcm2835_spi_transfer_one_irq()
225 struct spi_master *master = data; in bcm2835_spi_dma_done() local
226 struct bcm2835_spi *bs = spi_master_get_devdata(master); in bcm2835_spi_dma_done()
229 bcm2835_spi_reset_hw(master); in bcm2835_spi_dma_done()
236 dmaengine_terminate_all(master->dma_tx); in bcm2835_spi_dma_done()
242 complete(&master->xfer_completion); in bcm2835_spi_dma_done()
245 static int bcm2835_spi_prepare_sg(struct spi_master *master, in bcm2835_spi_prepare_sg() argument
260 chan = master->dma_tx; in bcm2835_spi_prepare_sg()
267 chan = master->dma_rx; in bcm2835_spi_prepare_sg()
280 desc->callback_param = master; in bcm2835_spi_prepare_sg()
303 static int bcm2835_spi_transfer_one_dma(struct spi_master *master, in bcm2835_spi_transfer_one_dma() argument
308 struct bcm2835_spi *bs = spi_master_get_devdata(master); in bcm2835_spi_transfer_one_dma()
316 return bcm2835_spi_transfer_one_irq(master, spi, tfr, cs); in bcm2835_spi_transfer_one_dma()
320 ret = bcm2835_spi_prepare_sg(master, tfr, true); in bcm2835_spi_transfer_one_dma()
325 dma_async_issue_pending(master->dma_tx); in bcm2835_spi_transfer_one_dma()
341 ret = bcm2835_spi_prepare_sg(master, tfr, false); in bcm2835_spi_transfer_one_dma()
344 dmaengine_terminate_all(master->dma_tx); in bcm2835_spi_transfer_one_dma()
345 bcm2835_spi_reset_hw(master); in bcm2835_spi_transfer_one_dma()
350 dma_async_issue_pending(master->dma_rx); in bcm2835_spi_transfer_one_dma()
356 static bool bcm2835_spi_can_dma(struct spi_master *master, in bcm2835_spi_can_dma() argument
404 static void bcm2835_dma_release(struct spi_master *master) in bcm2835_dma_release() argument
406 if (master->dma_tx) { in bcm2835_dma_release()
407 dmaengine_terminate_all(master->dma_tx); in bcm2835_dma_release()
408 dma_release_channel(master->dma_tx); in bcm2835_dma_release()
409 master->dma_tx = NULL; in bcm2835_dma_release()
411 if (master->dma_rx) { in bcm2835_dma_release()
412 dmaengine_terminate_all(master->dma_rx); in bcm2835_dma_release()
413 dma_release_channel(master->dma_rx); in bcm2835_dma_release()
414 master->dma_rx = NULL; in bcm2835_dma_release()
418 static void bcm2835_dma_init(struct spi_master *master, struct device *dev) in bcm2835_dma_init() argument
426 addr = of_get_address(master->dev.of_node, 0, NULL, NULL); in bcm2835_dma_init()
434 master->dma_tx = dma_request_slave_channel(dev, "tx"); in bcm2835_dma_init()
435 if (!master->dma_tx) { in bcm2835_dma_init()
439 master->dma_rx = dma_request_slave_channel(dev, "rx"); in bcm2835_dma_init()
440 if (!master->dma_rx) { in bcm2835_dma_init()
450 ret = dmaengine_slave_config(master->dma_tx, &slave_config); in bcm2835_dma_init()
458 ret = dmaengine_slave_config(master->dma_rx, &slave_config); in bcm2835_dma_init()
463 master->can_dma = bcm2835_spi_can_dma; in bcm2835_dma_init()
464 master->max_dma_len = 65535; /* limitation by BCM2835_SPI_DLEN */ in bcm2835_dma_init()
466 master->flags = SPI_MASTER_MUST_RX | SPI_MASTER_MUST_TX; in bcm2835_dma_init()
474 bcm2835_dma_release(master); in bcm2835_dma_init()
479 static int bcm2835_spi_transfer_one_poll(struct spi_master *master, in bcm2835_spi_transfer_one_poll() argument
485 struct bcm2835_spi *bs = spi_master_get_devdata(master); in bcm2835_spi_transfer_one_poll()
517 return bcm2835_spi_transfer_one_irq(master, spi, in bcm2835_spi_transfer_one_poll()
523 bcm2835_spi_reset_hw(master); in bcm2835_spi_transfer_one_poll()
528 static int bcm2835_spi_transfer_one(struct spi_master *master, in bcm2835_spi_transfer_one() argument
532 struct bcm2835_spi *bs = spi_master_get_devdata(master); 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()
626 bcm2835_spi_reset_hw(master); in bcm2835_spi_handle_err()
641 struct spi_master *master = spi->master; in bcm2835_spi_set_cs() local
642 struct bcm2835_spi *bs = spi_master_get_devdata(master); in bcm2835_spi_set_cs()
741 struct spi_master *master; in bcm2835_spi_probe() local
746 master = spi_alloc_master(&pdev->dev, sizeof(*bs)); in bcm2835_spi_probe()
747 if (!master) { in bcm2835_spi_probe()
752 platform_set_drvdata(pdev, master); in bcm2835_spi_probe()
754 master->mode_bits = BCM2835_SPI_MODE_BITS; in bcm2835_spi_probe()
755 master->bits_per_word_mask = SPI_BPW_MASK(8); in bcm2835_spi_probe()
756 master->num_chipselect = 3; in bcm2835_spi_probe()
757 master->setup = bcm2835_spi_setup; in bcm2835_spi_probe()
758 master->set_cs = bcm2835_spi_set_cs; in bcm2835_spi_probe()
759 master->transfer_one = bcm2835_spi_transfer_one; in bcm2835_spi_probe()
760 master->handle_err = bcm2835_spi_handle_err; in bcm2835_spi_probe()
761 master->prepare_message = bcm2835_spi_prepare_message; in bcm2835_spi_probe()
762 master->dev.of_node = pdev->dev.of_node; in bcm2835_spi_probe()
764 bs = spi_master_get_devdata(master); in bcm2835_spi_probe()
789 bcm2835_dma_init(master, &pdev->dev); in bcm2835_spi_probe()
796 dev_name(&pdev->dev), master); in bcm2835_spi_probe()
802 err = devm_spi_register_master(&pdev->dev, master); in bcm2835_spi_probe()
813 spi_master_put(master); in bcm2835_spi_probe()
819 struct spi_master *master = platform_get_drvdata(pdev); in bcm2835_spi_remove() local
820 struct bcm2835_spi *bs = spi_master_get_devdata(master); in bcm2835_spi_remove()
828 bcm2835_dma_release(master); in bcm2835_spi_remove()