Unverified Commit d947c9d2 authored by Peter Ujfalusi's avatar Peter Ujfalusi Committed by Mark Brown
Browse files

spi: atmel: Use dma_request_chan() instead dma_request_slave_channel()



dma_request_slave_channel() is a wrapper on top of dma_request_chan()
eating up the error code.

By using dma_request_chan() directly the driver can support deferred
probing against DMA.

Signed-off-by: default avatarPeter Ujfalusi <peter.ujfalusi@ti.com>
Link: https://lore.kernel.org/r/20191212135550.4634-2-peter.ujfalusi@ti.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 851c902f
Loading
Loading
Loading
Loading
+11 −18
Original line number Diff line number Diff line
@@ -514,26 +514,19 @@ static int atmel_spi_configure_dma(struct spi_master *master,
	master->dma_tx = dma_request_chan(dev, "tx");
	if (IS_ERR(master->dma_tx)) {
		err = PTR_ERR(master->dma_tx);
		if (err == -EPROBE_DEFER) {
			dev_warn(dev, "no DMA channel available at the moment\n");
			goto error_clear;
		}
		dev_err(dev,
			"DMA TX channel not available, SPI unable to use DMA\n");
		err = -EBUSY;
		if (err != -EPROBE_DEFER)
			dev_err(dev, "No TX DMA channel, DMA is disabled\n");
		goto error_clear;
	}

	master->dma_rx = dma_request_chan(dev, "rx");
	if (IS_ERR(master->dma_rx)) {
		err = PTR_ERR(master->dma_rx);
		/*
	 * No reason to check EPROBE_DEFER here since we have already requested
	 * tx channel. If it fails here, it's for another reason.
		 * No reason to check EPROBE_DEFER here since we have already
		 * requested tx channel.
		 */
	master->dma_rx = dma_request_slave_channel(dev, "rx");

	if (!master->dma_rx) {
		dev_err(dev,
			"DMA RX channel not available, SPI unable to use DMA\n");
		err = -EBUSY;
		dev_err(dev, "No RX DMA channel, DMA is disabled\n");
		goto error;
	}

@@ -548,7 +541,7 @@ static int atmel_spi_configure_dma(struct spi_master *master,

	return 0;
error:
	if (master->dma_rx)
	if (!IS_ERR(master->dma_rx))
		dma_release_channel(master->dma_rx);
	if (!IS_ERR(master->dma_tx))
		dma_release_channel(master->dma_tx);