Unverified Commit 25556911 authored by Bence Csókás's avatar Bence Csókás Committed by Mark Brown
Browse files

spi: atmel-quadspi: Use `devm_dma_request_chan()`



Leave releasing of DMA channels up to the devm facilities. This way we can
eliminate the rest of the "goto ladder".

Signed-off-by: default avatarBence Csókás <csokas.bence@prolan.hu>
Link: https://patch.msgid.link/20250610082256.400492-3-csokas.bence@prolan.hu


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 08bf1663
Loading
Loading
Loading
Loading
+13 −35
Original line number Diff line number Diff line
@@ -1285,18 +1285,21 @@ static int atmel_qspi_dma_init(struct spi_controller *ctrl)
	struct atmel_qspi *aq = spi_controller_get_devdata(ctrl);
	int ret;

	aq->rx_chan = dma_request_chan(&aq->pdev->dev, "rx");
	aq->rx_chan = devm_dma_request_chan(&aq->pdev->dev, "rx");
	if (IS_ERR(aq->rx_chan)) {
		ret = dev_err_probe(&aq->pdev->dev, PTR_ERR(aq->rx_chan),
				    "RX DMA channel is not available\n");
		goto null_rx_chan;
		aq->rx_chan = NULL;
		return ret;
	}

	aq->tx_chan = dma_request_chan(&aq->pdev->dev, "tx");
	aq->tx_chan = devm_dma_request_chan(&aq->pdev->dev, "tx");
	if (IS_ERR(aq->tx_chan)) {
		ret = dev_err_probe(&aq->pdev->dev, PTR_ERR(aq->tx_chan),
				    "TX DMA channel is not available\n");
		goto release_rx_chan;
		aq->rx_chan = NULL;
		aq->tx_chan = NULL;
		return ret;
	}

	ctrl->dma_rx = aq->rx_chan;
@@ -1307,21 +1310,6 @@ static int atmel_qspi_dma_init(struct spi_controller *ctrl)
		 dma_chan_name(aq->tx_chan), dma_chan_name(aq->rx_chan));

	return 0;

release_rx_chan:
	dma_release_channel(aq->rx_chan);
	aq->tx_chan = NULL;
null_rx_chan:
	aq->rx_chan = NULL;
	return ret;
}

static void atmel_qspi_dma_release(struct atmel_qspi *aq)
{
	if (aq->rx_chan)
		dma_release_channel(aq->rx_chan);
	if (aq->tx_chan)
		dma_release_channel(aq->tx_chan);
}

static const struct atmel_qspi_ops atmel_qspi_ops = {
@@ -1426,14 +1414,13 @@ static int atmel_qspi_probe(struct platform_device *pdev)

	/* Request the IRQ */
	irq = platform_get_irq(pdev, 0);
	if (irq < 0) {
		err = irq;
		goto dma_release;
	}
	if (irq < 0)
		return irq;

	err = devm_request_irq(&pdev->dev, irq, atmel_qspi_interrupt,
			       0, dev_name(&pdev->dev), aq);
	if (err)
		goto dma_release;
		return err;

	pm_runtime_set_autosuspend_delay(&pdev->dev, 500);
	pm_runtime_use_autosuspend(&pdev->dev);
@@ -1442,22 +1429,16 @@ static int atmel_qspi_probe(struct platform_device *pdev)

	err = atmel_qspi_init(aq);
	if (err)
		goto dma_release;
		return err;

	err = spi_register_controller(ctrl);
	if (err)
		goto dma_release;
		return err;

	pm_runtime_mark_last_busy(&pdev->dev);
	pm_runtime_put_autosuspend(&pdev->dev);

	return 0;

dma_release:
	if (aq->caps->has_dma)
		atmel_qspi_dma_release(aq);

	return err;
}

static int atmel_qspi_sama7g5_suspend(struct atmel_qspi *aq)
@@ -1507,9 +1488,6 @@ static void atmel_qspi_remove(struct platform_device *pdev)

	ret = pm_runtime_get_sync(&pdev->dev);
	if (ret >= 0) {
		if (aq->caps->has_dma)
			atmel_qspi_dma_release(aq);

		if (aq->caps->has_gclk) {
			ret = atmel_qspi_sama7g5_suspend(aq);
			if (ret)