mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH 1/1] spi: use dmaengine_desc_set_callback()
@ 2026-11-02 17:39 Frank.Li
  2026-11-03  9:04 ` Linus Walleij
  2026-11-03 11:53 ` Mukesh Savaliya
  0 siblings, 2 replies; 3+ messages in thread
From: Frank.Li @ 2026-11-02 17:39 UTC (permalink / raw)
  To: Mark Brown, Nicolas Ferre, Alexandre Belloni, Claudiu Beznea,
	Radu Pirea, CL Wang, Ryan Wanner, Florian Fainelli, Ray Jui,
	Scott Branden, Broadcom internal kernel review list,
	Vladimir Oltean, Frank Li, Sascha Hauer, Pengutronix Kernel Team,
	Fabio Estevam, Han Xu, Haibo Chen, Linus Walleij,
	Andy Shevchenko, Daniel Mack, Haojian Zhuang, Robert Jarzmik,
	Heiko Stuebner, Fabrizio Castro, Andi Shyti, Tudor Ambarus,
	Krzysztof Kozlowski, Peter Griffin, Alim Akhtar, Yixun Lan,
	Troy Mitchell, Maxime Coquelin, Alexandre Torgue, Alain Volmat,
	Chen-Yu Tsai, Jernej Skrabec, Samuel Holland, Laxman Dewangan,
	Thierry Reding, Jonathan Hunter, Sowjanya Komatineni,
	Kunihiko Hayashi, Masami Hiramatsu, open list:SPI SUBSYSTEM,
	moderated list:ARM/Microchip (AT91) SoC support, open list,
	moderated list:BROADCOM BCM2711/BCM2835 ARM ARCHITECTURE,
	open list:FREESCALE DSPI DRIVER,
	open list:ARM/QUALCOMM MAILING LIST,
	open list:ARM/Rockchip SoC support,
	open list:RENESAS RZ/V2H(P) RSPI DRIVER,
	open list:SAMSUNG SPI DRIVERS,
	open list:RISC-V SPACEMIT SoC Support,
	open list:RISC-V SPACEMIT SoC Support,
	moderated list:ARM/STM32 ARCHITECTURE,
	open list:ARM/Allwinner sunXi SoC support,
	open list:TEGRA ARCHITECTURE SUPPORT
  Cc: imx, vkoul

From: Frank Li <Frank.Li@nxp.com>

Replace open-coded assignments to callback and callback_param fields
of struct dma_async_tx_descriptor with calls to the
dmaengine_desc_set_callback() helper across SPI bus drivers.

No functional change intended. Prepare make to struct
dma_async_tx_descriptor private to the DMA engine.

Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
 drivers/spi/atmel-quadspi.c       | 3 +--
 drivers/spi/spi-at91-usart.c      | 3 +--
 drivers/spi/spi-atcspi200.c       | 3 +--
 drivers/spi/spi-atmel.c           | 3 +--
 drivers/spi/spi-bcm2835.c         | 6 ++----
 drivers/spi/spi-cadence-quadspi.c | 3 +--
 drivers/spi/spi-davinci.c         | 6 ++----
 drivers/spi/spi-dw-dma.c          | 6 ++----
 drivers/spi/spi-ep93xx.c          | 3 +--
 drivers/spi/spi-fsl-dspi.c        | 6 ++----
 drivers/spi/spi-fsl-lpspi.c       | 6 ++----
 drivers/spi/spi-geni-qcom.c       | 3 +--
 drivers/spi/spi-img-spfi.c        | 6 ++----
 drivers/spi/spi-imx.c             | 6 ++----
 drivers/spi/spi-ingenic.c         | 3 +--
 drivers/spi/spi-mxs.c             | 3 +--
 drivers/spi/spi-nxp-xspi.c        | 3 +--
 drivers/spi/spi-omap2-mcspi.c     | 6 ++----
 drivers/spi/spi-pic32.c           | 3 +--
 drivers/spi/spi-pl022.c           | 3 +--
 drivers/spi/spi-pxa2xx-dma.c      | 3 +--
 drivers/spi/spi-qup.c             | 3 +--
 drivers/spi/spi-rockchip.c        | 6 ++----
 drivers/spi/spi-rspi.c            | 6 ++----
 drivers/spi/spi-rzv2h-rspi.c      | 3 +--
 drivers/spi/spi-s3c64xx.c         | 3 +--
 drivers/spi/spi-sh-msiof.c        | 6 ++----
 drivers/spi/spi-spacemit-k1.c     | 3 +--
 drivers/spi/spi-stm32-ospi.c      | 3 +--
 drivers/spi/spi-stm32-qspi.c      | 3 +--
 drivers/spi/spi-stm32.c           | 9 +++------
 drivers/spi/spi-sun6i.c           | 3 +--
 drivers/spi/spi-tegra114.c        | 6 ++----
 drivers/spi/spi-tegra20-slink.c   | 6 ++----
 drivers/spi/spi-tegra210-quad.c   | 6 ++----
 drivers/spi/spi-ti-qspi.c         | 3 +--
 drivers/spi/spi-topcliff-pch.c    | 6 ++----
 drivers/spi/spi-uniphier.c        | 6 ++----
 38 files changed, 56 insertions(+), 112 deletions(-)

diff --git a/drivers/spi/atmel-quadspi.c b/drivers/spi/atmel-quadspi.c
index 762a3fb0fca81..de205e04a8600 100644
--- a/drivers/spi/atmel-quadspi.c
+++ b/drivers/spi/atmel-quadspi.c
@@ -790,8 +790,7 @@ static int atmel_qspi_dma_xfer(struct atmel_qspi *aq, struct dma_chan *chan,
 	}
 
 	reinit_completion(&aq->dma_completion);
-	tx->callback = atmel_qspi_dma_callback;
-	tx->callback_param = aq;
+	dmaengine_desc_set_callback(tx, atmel_qspi_dma_callback, NULL, aq);
 	cookie = dmaengine_submit(tx);
 	ret = dma_submit_error(cookie);
 	if (ret) {
diff --git a/drivers/spi/spi-at91-usart.c b/drivers/spi/spi-at91-usart.c
index aadcdf734fb03..8b56ac1dcad8e 100644
--- a/drivers/spi/spi-at91-usart.c
+++ b/drivers/spi/spi-at91-usart.c
@@ -228,8 +228,7 @@ static int at91_usart_spi_dma_transfer(struct spi_controller *ctlr,
 	if (!txdesc)
 		goto at91_usart_spi_err_dma;
 
-	rxdesc->callback = dma_callback;
-	rxdesc->callback_param = ctlr;
+	dmaengine_desc_set_callback(rxdesc, dma_callback, NULL, ctlr);
 
 	cookie = dmaengine_submit(rxdesc);
 	if (dma_submit_error(cookie))
diff --git a/drivers/spi/spi-atcspi200.c b/drivers/spi/spi-atcspi200.c
index b532c58c0ab91..c807e730ca94c 100644
--- a/drivers/spi/spi-atcspi200.c
+++ b/drivers/spi/spi-atcspi200.c
@@ -340,8 +340,7 @@ static int atcspi_dma_trans(struct atcspi_dev *spi,
 	}
 
 	reinit_completion(&spi->dma_completion);
-	desc->callback = atcspi_dma_callback;
-	desc->callback_param = &spi->dma_completion;
+	dmaengine_desc_set_callback(desc, atcspi_dma_callback, NULL, &spi->dma_completion);
 	cookie = dmaengine_submit(desc);
 	ret = dma_submit_error(cookie);
 	if (ret)
diff --git a/drivers/spi/spi-atmel.c b/drivers/spi/spi-atmel.c
index ffc896e4621ac..ffc1292b08c10 100644
--- a/drivers/spi/spi-atmel.c
+++ b/drivers/spi/spi-atmel.c
@@ -867,8 +867,7 @@ static int atmel_spi_next_xfer_dma_submit(struct spi_controller *host,
 	spi_writel(as, IER, SPI_BIT(OVRES));
 
 	/* Put the callback on the RX transfer only, that should finish last */
-	rxdesc->callback = dma_callback;
-	rxdesc->callback_param = host;
+	dmaengine_desc_set_callback(rxdesc, dma_callback, NULL, host);
 
 	/* Submit and fire RX and TX with TX last so we're ready to read! */
 	cookie = dmaengine_submit(rxdesc);
diff --git a/drivers/spi/spi-bcm2835.c b/drivers/spi/spi-bcm2835.c
index cc57489732816..a71048a88c58a 100644
--- a/drivers/spi/spi-bcm2835.c
+++ b/drivers/spi/spi-bcm2835.c
@@ -706,11 +706,9 @@ static int bcm2835_spi_prepare_sg(struct spi_controller *ctlr,
 	 * RX-only transfers; else by the TX channel for TX-only transfers.
 	 */
 	if (!is_tx) {
-		desc->callback = bcm2835_spi_dma_rx_done;
-		desc->callback_param = ctlr;
+		dmaengine_desc_set_callback(desc, bcm2835_spi_dma_rx_done, NULL, ctlr);
 	} else if (!tfr->rx_buf) {
-		desc->callback = bcm2835_spi_dma_tx_done;
-		desc->callback_param = ctlr;
+		dmaengine_desc_set_callback(desc, bcm2835_spi_dma_tx_done, NULL, ctlr);
 		bs->target = target;
 	}
 
diff --git a/drivers/spi/spi-cadence-quadspi.c b/drivers/spi/spi-cadence-quadspi.c
index 73ea51c41f955..6e7c8b54e0377 100644
--- a/drivers/spi/spi-cadence-quadspi.c
+++ b/drivers/spi/spi-cadence-quadspi.c
@@ -1395,8 +1395,7 @@ static int cqspi_direct_read_execute(struct cqspi_flash_pdata *f_pdata,
 		goto err_unmap;
 	}
 
-	tx->callback = cqspi_rx_dma_callback;
-	tx->callback_param = cqspi;
+	dmaengine_desc_set_callback(tx, cqspi_rx_dma_callback, NULL, cqspi);
 	cookie = dmaengine_submit(tx);
 	reinit_completion(&cqspi->rx_dma_complete);
 
diff --git a/drivers/spi/spi-davinci.c b/drivers/spi/spi-davinci.c
index 087735ed9c80c..b115daf2c76f3 100644
--- a/drivers/spi/spi-davinci.c
+++ b/drivers/spi/spi-davinci.c
@@ -703,10 +703,8 @@ static int davinci_spi_bufs(struct spi_device *spi, struct spi_transfer *t)
 		if (!txdesc)
 			goto err_desc;
 
-		rxdesc->callback = davinci_spi_dma_rx_callback;
-		rxdesc->callback_param = (void *)dspi;
-		txdesc->callback = davinci_spi_dma_tx_callback;
-		txdesc->callback_param = (void *)dspi;
+		dmaengine_desc_set_callback(rxdesc, davinci_spi_dma_rx_callback, NULL, (void *)dspi);
+		dmaengine_desc_set_callback(txdesc, davinci_spi_dma_tx_callback, NULL, (void *)dspi);
 
 		if (pdata->cshold_bug)
 			iowrite16(spidat1 >> 16, dspi->base + SPIDAT1 + 2);
diff --git a/drivers/spi/spi-dw-dma.c b/drivers/spi/spi-dw-dma.c
index b706770334a61..94810f9dd5c5d 100644
--- a/drivers/spi/spi-dw-dma.c
+++ b/drivers/spi/spi-dw-dma.c
@@ -397,8 +397,7 @@ static int dw_spi_dma_submit_tx(struct dw_spi *dws, struct scatterlist *sgl,
 	if (!txdesc)
 		return -ENOMEM;
 
-	txdesc->callback = dw_spi_dma_tx_done;
-	txdesc->callback_param = dws;
+	dmaengine_desc_set_callback(txdesc, dw_spi_dma_tx_done, NULL, dws);
 
 	cookie = dmaengine_submit(txdesc);
 	ret = dma_submit_error(cookie);
@@ -498,8 +497,7 @@ static int dw_spi_dma_submit_rx(struct dw_spi *dws, struct scatterlist *sgl,
 	if (!rxdesc)
 		return -ENOMEM;
 
-	rxdesc->callback = dw_spi_dma_rx_done;
-	rxdesc->callback_param = dws;
+	dmaengine_desc_set_callback(rxdesc, dw_spi_dma_rx_done, NULL, dws);
 
 	cookie = dmaengine_submit(rxdesc);
 	ret = dma_submit_error(cookie);
diff --git a/drivers/spi/spi-ep93xx.c b/drivers/spi/spi-ep93xx.c
index d8f4aa38685f5..6832869bc73bf 100644
--- a/drivers/spi/spi-ep93xx.c
+++ b/drivers/spi/spi-ep93xx.c
@@ -418,8 +418,7 @@ static int ep93xx_spi_dma_transfer(struct spi_controller *host)
 	}
 
 	/* We are ready when RX is done */
-	rxd->callback = ep93xx_spi_dma_callback;
-	rxd->callback_param = host;
+	dmaengine_desc_set_callback(rxd, ep93xx_spi_dma_callback, NULL, host);
 
 	/* Now submit both descriptors and start DMA */
 	dmaengine_submit(rxd);
diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c
index f03488870d024..aee0393f9a832 100644
--- a/drivers/spi/spi-fsl-dspi.c
+++ b/drivers/spi/spi-fsl-dspi.c
@@ -581,8 +581,7 @@ static int dspi_next_xfer_dma_submit(struct fsl_dspi *dspi)
 		return -EIO;
 	}
 
-	dma->tx_desc->callback = dspi_tx_dma_callback;
-	dma->tx_desc->callback_param = dspi;
+	dmaengine_desc_set_callback(dma->tx_desc, dspi_tx_dma_callback, NULL, dspi);
 	if (dma_submit_error(dmaengine_submit(dma->tx_desc))) {
 		dev_err(dev, "DMA submit failed\n");
 		return -EINVAL;
@@ -600,8 +599,7 @@ static int dspi_next_xfer_dma_submit(struct fsl_dspi *dspi)
 		return -EIO;
 	}
 
-	dma->rx_desc->callback = dspi_rx_dma_callback;
-	dma->rx_desc->callback_param = dspi;
+	dmaengine_desc_set_callback(dma->rx_desc, dspi_rx_dma_callback, NULL, dspi);
 	if (dma_submit_error(dmaengine_submit(dma->rx_desc))) {
 		dev_err(dev, "DMA submit failed\n");
 		return -EINVAL;
diff --git a/drivers/spi/spi-fsl-lpspi.c b/drivers/spi/spi-fsl-lpspi.c
index b25f94b2ef738..7798197d5b350 100644
--- a/drivers/spi/spi-fsl-lpspi.c
+++ b/drivers/spi/spi-fsl-lpspi.c
@@ -634,8 +634,7 @@ static int fsl_lpspi_dma_transfer(struct spi_controller *controller,
 	if (!desc_rx)
 		return -EINVAL;
 
-	desc_rx->callback = fsl_lpspi_dma_rx_callback;
-	desc_rx->callback_param = (void *)fsl_lpspi;
+	dmaengine_desc_set_callback(desc_rx, fsl_lpspi_dma_rx_callback, NULL, (void *)fsl_lpspi);
 	dmaengine_submit(desc_rx);
 	reinit_completion(&fsl_lpspi->dma_rx_completion);
 	dma_async_issue_pending(controller->dma_rx);
@@ -648,8 +647,7 @@ static int fsl_lpspi_dma_transfer(struct spi_controller *controller,
 		return -EINVAL;
 	}
 
-	desc_tx->callback = fsl_lpspi_dma_tx_callback;
-	desc_tx->callback_param = (void *)fsl_lpspi;
+	dmaengine_desc_set_callback(desc_tx, fsl_lpspi_dma_tx_callback, NULL, (void *)fsl_lpspi);
 	dmaengine_submit(desc_tx);
 	reinit_completion(&fsl_lpspi->dma_tx_completion);
 	dma_async_issue_pending(controller->dma_tx);
diff --git a/drivers/spi/spi-geni-qcom.c b/drivers/spi/spi-geni-qcom.c
index 91e75e213f929..e239c4333055b 100644
--- a/drivers/spi/spi-geni-qcom.c
+++ b/drivers/spi/spi-geni-qcom.c
@@ -506,8 +506,7 @@ static int setup_gsi_xfer(struct spi_transfer *xfer, struct spi_geni_master *mas
 		return -EIO;
 	}
 
-	tx_desc->callback_result = spi_gsi_callback_result;
-	tx_desc->callback_param = spi;
+	dmaengine_desc_set_callback(tx_desc, NULL, spi_gsi_callback_result, spi);
 
 	if (peripheral.cmd & SPI_RX)
 		dmaengine_submit(rx_desc);
diff --git a/drivers/spi/spi-img-spfi.c b/drivers/spi/spi-img-spfi.c
index 76dcb283d1225..53370cff7e2cd 100644
--- a/drivers/spi/spi-img-spfi.c
+++ b/drivers/spi/spi-img-spfi.c
@@ -334,8 +334,7 @@ static int img_spfi_start_dma(struct spi_controller *host,
 		if (!rxdesc)
 			goto stop_dma;
 
-		rxdesc->callback = img_spfi_dma_rx_cb;
-		rxdesc->callback_param = spfi;
+		dmaengine_desc_set_callback(rxdesc, img_spfi_dma_rx_cb, NULL, spfi);
 	}
 
 	if (xfer->tx_buf) {
@@ -358,8 +357,7 @@ static int img_spfi_start_dma(struct spi_controller *host,
 		if (!txdesc)
 			goto stop_dma;
 
-		txdesc->callback = img_spfi_dma_tx_cb;
-		txdesc->callback_param = spfi;
+		dmaengine_desc_set_callback(txdesc, img_spfi_dma_tx_cb, NULL, spfi);
 	}
 
 	if (xfer->rx_buf) {
diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c
index cadf0b93f4403..f8a3ac11f49d0 100644
--- a/drivers/spi/spi-imx.c
+++ b/drivers/spi/spi-imx.c
@@ -1738,8 +1738,7 @@ static int spi_imx_dma_submit(struct spi_imx_data *spi_imx,
 		return -EINVAL;
 	}
 
-	desc_rx->callback = spi_imx_dma_rx_callback;
-	desc_rx->callback_param = (void *)spi_imx;
+	dmaengine_desc_set_callback(desc_rx, spi_imx_dma_rx_callback, NULL, (void *)spi_imx);
 	cookie = dmaengine_submit(desc_rx);
 	if (dma_submit_error(cookie)) {
 		dev_err(spi_imx->dev, "submitting DMA RX failed\n");
@@ -1756,8 +1755,7 @@ static int spi_imx_dma_submit(struct spi_imx_data *spi_imx,
 	if (!desc_tx)
 		goto dmaengine_terminate_rx;
 
-	desc_tx->callback = spi_imx_dma_tx_callback;
-	desc_tx->callback_param = (void *)spi_imx;
+	dmaengine_desc_set_callback(desc_tx, spi_imx_dma_tx_callback, NULL, (void *)spi_imx);
 	cookie = dmaengine_submit(desc_tx);
 	if (dma_submit_error(cookie)) {
 		dev_err(spi_imx->dev, "submitting DMA TX failed\n");
diff --git a/drivers/spi/spi-ingenic.c b/drivers/spi/spi-ingenic.c
index a0a047510611e..9567ddde06ef0 100644
--- a/drivers/spi/spi-ingenic.c
+++ b/drivers/spi/spi-ingenic.c
@@ -157,8 +157,7 @@ spi_ingenic_prepare_dma(struct spi_controller *ctlr, struct dma_chan *chan,
 		return ERR_PTR(-ENOMEM);
 
 	if (dir == DMA_DEV_TO_MEM) {
-		desc->callback = spi_ingenic_finalize_transfer;
-		desc->callback_param = ctlr;
+		dmaengine_desc_set_callback(desc, spi_ingenic_finalize_transfer, NULL, ctlr);
 	}
 
 	cookie = dmaengine_submit(desc);
diff --git a/drivers/spi/spi-mxs.c b/drivers/spi/spi-mxs.c
index fda1d260b2966..eabea73a19fc7 100644
--- a/drivers/spi/spi-mxs.c
+++ b/drivers/spi/spi-mxs.c
@@ -267,8 +267,7 @@ static int mxs_spi_txrx_dma(struct mxs_spi *spi,
 	 * The last descriptor must have this callback,
 	 * to finish the DMA transaction.
 	 */
-	desc->callback = mxs_ssp_dma_irq_callback;
-	desc->callback_param = spi;
+	dmaengine_desc_set_callback(desc, mxs_ssp_dma_irq_callback, NULL, spi);
 
 	/* Start the transfer. */
 	dmaengine_submit(desc);
diff --git a/drivers/spi/spi-nxp-xspi.c b/drivers/spi/spi-nxp-xspi.c
index 38c8d6269aadd..e532b2da54835 100644
--- a/drivers/spi/spi-nxp-xspi.c
+++ b/drivers/spi/spi-nxp-xspi.c
@@ -872,8 +872,7 @@ static int nxp_xspi_ahb_dma_read(struct nxp_xspi *xspi,
 		goto err_unmap_src;
 	}
 
-	desc->callback = nxp_xspi_dma_rx_callback;
-	desc->callback_param = xspi;
+	dmaengine_desc_set_callback(desc, nxp_xspi_dma_rx_callback, NULL, xspi);
 	reinit_completion(&xspi->dma_rx_c);
 	dmaengine_submit(desc);
 	dma_async_issue_pending(chan);
diff --git a/drivers/spi/spi-omap2-mcspi.c b/drivers/spi/spi-omap2-mcspi.c
index e46b1d9c8cd08..56fc8211a752f 100644
--- a/drivers/spi/spi-omap2-mcspi.c
+++ b/drivers/spi/spi-omap2-mcspi.c
@@ -436,8 +436,7 @@ static int omap2_mcspi_tx_dma(struct spi_device *spi,
 	if (!tx)
 		return -EIO;
 
-	tx->callback = omap2_mcspi_tx_callback;
-	tx->callback_param = spi;
+	dmaengine_desc_set_callback(tx, omap2_mcspi_tx_callback, NULL, spi);
 
 	return dma_submit_error(dmaengine_submit(tx));
 }
@@ -525,8 +524,7 @@ omap2_mcspi_rx_dma(struct spi_device *spi, struct spi_transfer *xfer,
 		goto out_free_sg;
 	}
 
-	tx->callback = omap2_mcspi_rx_callback;
-	tx->callback_param = spi;
+	dmaengine_desc_set_callback(tx, omap2_mcspi_rx_callback, NULL, spi);
 	ret = dma_submit_error(dmaengine_submit(tx));
 	if (ret)
 		goto out_free_sg;
diff --git a/drivers/spi/spi-pic32.c b/drivers/spi/spi-pic32.c
index 8363bc873b03a..b6a6929cbb0c2 100644
--- a/drivers/spi/spi-pic32.c
+++ b/drivers/spi/spi-pic32.c
@@ -330,8 +330,7 @@ static int pic32_spi_dma_transfer(struct pic32_spi *pic32s,
 	}
 
 	/* Put callback on the RX transfer, that should finish last */
-	desc_rx->callback = pic32_spi_dma_rx_notify;
-	desc_rx->callback_param = pic32s;
+	dmaengine_desc_set_callback(desc_rx, pic32_spi_dma_rx_notify, NULL, pic32s);
 
 	cookie = dmaengine_submit(desc_rx);
 	ret = dma_submit_error(cookie);
diff --git a/drivers/spi/spi-pl022.c b/drivers/spi/spi-pl022.c
index 3ff30486b2892..9f98f95bb534c 100644
--- a/drivers/spi/spi-pl022.c
+++ b/drivers/spi/spi-pl022.c
@@ -956,8 +956,7 @@ static int configure_dma(struct pl022 *pl022)
 		goto err_txdesc;
 
 	/* Put the callback on the RX transfer only, that should finish last */
-	rxdesc->callback = dma_callback;
-	rxdesc->callback_param = pl022;
+	dmaengine_desc_set_callback(rxdesc, dma_callback, NULL, pl022);
 
 	/* Submit and fire RX and TX with TX last so we're ready to read! */
 	dmaengine_submit(rxdesc);
diff --git a/drivers/spi/spi-pxa2xx-dma.c b/drivers/spi/spi-pxa2xx-dma.c
index c94d1d192e743..0e7ad7fb48eb2 100644
--- a/drivers/spi/spi-pxa2xx-dma.c
+++ b/drivers/spi/spi-pxa2xx-dma.c
@@ -154,8 +154,7 @@ int pxa2xx_spi_dma_prepare(struct driver_data *drv_data,
 	}
 
 	/* We are ready when RX completes */
-	rx_desc->callback = pxa2xx_spi_dma_callback;
-	rx_desc->callback_param = drv_data;
+	dmaengine_desc_set_callback(rx_desc, pxa2xx_spi_dma_callback, NULL, drv_data);
 
 	dmaengine_submit(rx_desc);
 	dmaengine_submit(tx_desc);
diff --git a/drivers/spi/spi-qup.c b/drivers/spi/spi-qup.c
index e8b076b1622d3..6be0b942d7c4e 100644
--- a/drivers/spi/spi-qup.c
+++ b/drivers/spi/spi-qup.c
@@ -429,8 +429,7 @@ static int spi_qup_prep_sg(struct spi_controller *host, struct scatterlist *sgl,
 	if (IS_ERR_OR_NULL(desc))
 		return desc ? PTR_ERR(desc) : -EINVAL;
 
-	desc->callback = callback;
-	desc->callback_param = qup;
+	dmaengine_desc_set_callback(desc, callback, NULL, qup);
 
 	cookie = dmaengine_submit(desc);
 
diff --git a/drivers/spi/spi-rockchip.c b/drivers/spi/spi-rockchip.c
index 1a81fd94b4396..f8d6cea2f3dad 100644
--- a/drivers/spi/spi-rockchip.c
+++ b/drivers/spi/spi-rockchip.c
@@ -475,8 +475,7 @@ static int rockchip_spi_prepare_dma(struct rockchip_spi *rs,
 		if (!rxdesc)
 			return -EINVAL;
 
-		rxdesc->callback = rockchip_spi_dma_rxcb;
-		rxdesc->callback_param = ctlr;
+		dmaengine_desc_set_callback(rxdesc, rockchip_spi_dma_rxcb, NULL, ctlr);
 	}
 
 	txdesc = NULL;
@@ -500,8 +499,7 @@ static int rockchip_spi_prepare_dma(struct rockchip_spi *rs,
 			return -EINVAL;
 		}
 
-		txdesc->callback = rockchip_spi_dma_txcb;
-		txdesc->callback_param = ctlr;
+		dmaengine_desc_set_callback(txdesc, rockchip_spi_dma_txcb, NULL, ctlr);
 	}
 
 	/* rx must be started before tx due to spi instinct */
diff --git a/drivers/spi/spi-rspi.c b/drivers/spi/spi-rspi.c
index c61edd1c1353b..5e03a186e9e79 100644
--- a/drivers/spi/spi-rspi.c
+++ b/drivers/spi/spi-rspi.c
@@ -553,8 +553,7 @@ static int rspi_dma_transfer(struct rspi_data *rspi, struct sg_table *tx,
 			goto no_dma_rx;
 		}
 
-		desc_rx->callback = rspi_dma_complete;
-		desc_rx->callback_param = rspi;
+		dmaengine_desc_set_callback(desc_rx, rspi_dma_complete, NULL, rspi);
 		cookie = dmaengine_submit(desc_rx);
 		if (dma_submit_error(cookie)) {
 			ret = cookie;
@@ -577,8 +576,7 @@ static int rspi_dma_transfer(struct rspi_data *rspi, struct sg_table *tx,
 			/* No callback */
 			desc_tx->callback = NULL;
 		} else {
-			desc_tx->callback = rspi_dma_complete;
-			desc_tx->callback_param = rspi;
+			dmaengine_desc_set_callback(desc_tx, rspi_dma_complete, NULL, rspi);
 		}
 		cookie = dmaengine_submit(desc_tx);
 		if (dma_submit_error(cookie)) {
diff --git a/drivers/spi/spi-rzv2h-rspi.c b/drivers/spi/spi-rzv2h-rspi.c
index daa4239b0fe04..f17b6d3da5de7 100644
--- a/drivers/spi/spi-rzv2h-rspi.c
+++ b/drivers/spi/spi-rzv2h-rspi.c
@@ -295,8 +295,7 @@ rzv2h_rspi_setup_dma_channel(struct rzv2h_rspi_priv *rspi,
 		return ERR_PTR(-EAGAIN);
 
 	if (direction == DMA_DEV_TO_MEM) {
-		desc->callback = rzv2h_rspi_dma_complete;
-		desc->callback_param = rspi;
+		dmaengine_desc_set_callback(desc, rzv2h_rspi_dma_complete, NULL, rspi);
 	}
 
 	return desc;
diff --git a/drivers/spi/spi-s3c64xx.c b/drivers/spi/spi-s3c64xx.c
index 58e306cc730fc..d24b95212ecd8 100644
--- a/drivers/spi/spi-s3c64xx.c
+++ b/drivers/spi/spi-s3c64xx.c
@@ -338,8 +338,7 @@ static int s3c64xx_prepare_dma(struct s3c64xx_spi_dma_data *dma,
 		return -ENOMEM;
 	}
 
-	desc->callback = s3c64xx_spi_dmacb;
-	desc->callback_param = dma;
+	dmaengine_desc_set_callback(desc, s3c64xx_spi_dmacb, NULL, dma);
 
 	dma->cookie = dmaengine_submit(desc);
 	ret = dma_submit_error(dma->cookie);
diff --git a/drivers/spi/spi-sh-msiof.c b/drivers/spi/spi-sh-msiof.c
index 89fbdde46cfe9..557c645fcebc6 100644
--- a/drivers/spi/spi-sh-msiof.c
+++ b/drivers/spi/spi-sh-msiof.c
@@ -665,8 +665,7 @@ static int sh_msiof_dma_once(struct sh_msiof_spi_priv *p, const void *tx,
 		if (!desc_rx)
 			return -EAGAIN;
 
-		desc_rx->callback = sh_msiof_dma_complete;
-		desc_rx->callback_param = &p->done;
+		dmaengine_desc_set_callback(desc_rx, sh_msiof_dma_complete, NULL, &p->done);
 		cookie = dmaengine_submit(desc_rx);
 		if (dma_submit_error(cookie))
 			return cookie;
@@ -684,8 +683,7 @@ static int sh_msiof_dma_once(struct sh_msiof_spi_priv *p, const void *tx,
 			goto no_dma_tx;
 		}
 
-		desc_tx->callback = sh_msiof_dma_complete;
-		desc_tx->callback_param = &p->done_txdma;
+		dmaengine_desc_set_callback(desc_tx, sh_msiof_dma_complete, NULL, &p->done_txdma);
 		cookie = dmaengine_submit(desc_tx);
 		if (dma_submit_error(cookie)) {
 			ret = cookie;
diff --git a/drivers/spi/spi-spacemit-k1.c b/drivers/spi/spi-spacemit-k1.c
index d03a93d149ecc..c9bf925ee3521 100644
--- a/drivers/spi/spi-spacemit-k1.c
+++ b/drivers/spi/spi-spacemit-k1.c
@@ -294,8 +294,7 @@ static int k1_spi_dma_one(struct spi_controller *host, struct spi_device *spi,
 	}
 
 	/* When RX is complete we also know TX has completed */
-	rxdesc->callback = k1_spi_dma_callback;
-	rxdesc->callback_param = drv_data;
+	dmaengine_desc_set_callback(rxdesc, k1_spi_dma_callback, NULL, drv_data);
 
 	dmaengine_submit(txdesc);
 	dmaengine_submit(rxdesc);
diff --git a/drivers/spi/spi-stm32-ospi.c b/drivers/spi/spi-stm32-ospi.c
index fa0e8e83cb1be..4e202d74c9926 100644
--- a/drivers/spi/spi-stm32-ospi.c
+++ b/drivers/spi/spi-stm32-ospi.c
@@ -374,8 +374,7 @@ static int stm32_ospi_tx_dma(struct stm32_ospi *ospi,
 	cr = readl_relaxed(regs_base + OSPI_CR);
 
 	reinit_completion(&ospi->dma_completion);
-	desc->callback = stm32_ospi_dma_callback;
-	desc->callback_param = &ospi->dma_completion;
+	dmaengine_desc_set_callback(desc, stm32_ospi_dma_callback, NULL, &ospi->dma_completion);
 	cookie = dmaengine_submit(desc);
 	err = dma_submit_error(cookie);
 	if (err)
diff --git a/drivers/spi/spi-stm32-qspi.c b/drivers/spi/spi-stm32-qspi.c
index b77daba6db83a..f9865720c6dd3 100644
--- a/drivers/spi/spi-stm32-qspi.c
+++ b/drivers/spi/spi-stm32-qspi.c
@@ -265,8 +265,7 @@ static int stm32_qspi_tx_dma(struct stm32_qspi *qspi,
 	cr = readl_relaxed(qspi->io_base + QSPI_CR);
 
 	reinit_completion(&qspi->dma_completion);
-	desc->callback = stm32_qspi_dma_callback;
-	desc->callback_param = &qspi->dma_completion;
+	dmaengine_desc_set_callback(desc, stm32_qspi_dma_callback, NULL, &qspi->dma_completion);
 	cookie = dmaengine_submit(desc);
 	err = dma_submit_error(cookie);
 	if (err)
diff --git a/drivers/spi/spi-stm32.c b/drivers/spi/spi-stm32.c
index 4c3ae546afc05..66932400cf570 100644
--- a/drivers/spi/spi-stm32.c
+++ b/drivers/spi/spi-stm32.c
@@ -1690,11 +1690,9 @@ static int stm32_spi_transfer_one_dma(struct stm32_spi *spi,
 
 	if (rx_dma_desc) {
 		if (rx_mdma_desc) {
-			rx_mdma_desc->callback = spi->cfg->dma_rx_cb;
-			rx_mdma_desc->callback_param = spi;
+			dmaengine_desc_set_callback(rx_mdma_desc, spi->cfg->dma_rx_cb, NULL, spi);
 		} else {
-			rx_dma_desc->callback = spi->cfg->dma_rx_cb;
-			rx_dma_desc->callback_param = spi;
+			dmaengine_desc_set_callback(rx_dma_desc, spi->cfg->dma_rx_cb, NULL, spi);
 		}
 
 		/* Enable Rx DMA request */
@@ -1719,8 +1717,7 @@ static int stm32_spi_transfer_one_dma(struct stm32_spi *spi,
 	if (tx_dma_desc) {
 		if (spi->cur_comm == SPI_SIMPLEX_TX ||
 		    spi->cur_comm == SPI_3WIRE_TX) {
-			tx_dma_desc->callback = spi->cfg->dma_tx_cb;
-			tx_dma_desc->callback_param = spi;
+			dmaengine_desc_set_callback(tx_dma_desc, spi->cfg->dma_tx_cb, NULL, spi);
 		}
 
 		if (dma_submit_error(dmaengine_submit(tx_dma_desc))) {
diff --git a/drivers/spi/spi-sun6i.c b/drivers/spi/spi-sun6i.c
index 6b7a05dd0de8a..e9fce8618299a 100644
--- a/drivers/spi/spi-sun6i.c
+++ b/drivers/spi/spi-sun6i.c
@@ -232,8 +232,7 @@ static int sun6i_spi_prepare_dma(struct sun6i_spi *sspi,
 						 DMA_PREP_INTERRUPT);
 		if (!rxdesc)
 			return -EINVAL;
-		rxdesc->callback_param = sspi;
-		rxdesc->callback = sun6i_spi_dma_rx_cb;
+		dmaengine_desc_set_callback(rxdesc, sun6i_spi_dma_rx_cb, NULL, sspi);
 	}
 
 	txdesc = NULL;
diff --git a/drivers/spi/spi-tegra114.c b/drivers/spi/spi-tegra114.c
index f43f2df478b45..ffe547d1e3af3 100644
--- a/drivers/spi/spi-tegra114.c
+++ b/drivers/spi/spi-tegra114.c
@@ -480,8 +480,7 @@ static int tegra_spi_start_tx_dma(struct tegra_spi_data *tspi, int len)
 		return -EIO;
 	}
 
-	tspi->tx_dma_desc->callback = tegra_spi_dma_complete;
-	tspi->tx_dma_desc->callback_param = &tspi->tx_dma_complete;
+	dmaengine_desc_set_callback(tspi->tx_dma_desc, tegra_spi_dma_complete, NULL, &tspi->tx_dma_complete);
 
 	dmaengine_submit(tspi->tx_dma_desc);
 	dma_async_issue_pending(tspi->tx_dma_chan);
@@ -499,8 +498,7 @@ static int tegra_spi_start_rx_dma(struct tegra_spi_data *tspi, int len)
 		return -EIO;
 	}
 
-	tspi->rx_dma_desc->callback = tegra_spi_dma_complete;
-	tspi->rx_dma_desc->callback_param = &tspi->rx_dma_complete;
+	dmaengine_desc_set_callback(tspi->rx_dma_desc, tegra_spi_dma_complete, NULL, &tspi->rx_dma_complete);
 
 	dmaengine_submit(tspi->rx_dma_desc);
 	dma_async_issue_pending(tspi->rx_dma_chan);
diff --git a/drivers/spi/spi-tegra20-slink.c b/drivers/spi/spi-tegra20-slink.c
index ed1fcf57dd30d..5aca26549e730 100644
--- a/drivers/spi/spi-tegra20-slink.c
+++ b/drivers/spi/spi-tegra20-slink.c
@@ -440,8 +440,7 @@ static int tegra_slink_start_tx_dma(struct tegra_slink_data *tspi, int len)
 		return -EIO;
 	}
 
-	tspi->tx_dma_desc->callback = tegra_slink_dma_complete;
-	tspi->tx_dma_desc->callback_param = &tspi->tx_dma_complete;
+	dmaengine_desc_set_callback(tspi->tx_dma_desc, tegra_slink_dma_complete, NULL, &tspi->tx_dma_complete);
 
 	dmaengine_submit(tspi->tx_dma_desc);
 	dma_async_issue_pending(tspi->tx_dma_chan);
@@ -459,8 +458,7 @@ static int tegra_slink_start_rx_dma(struct tegra_slink_data *tspi, int len)
 		return -EIO;
 	}
 
-	tspi->rx_dma_desc->callback = tegra_slink_dma_complete;
-	tspi->rx_dma_desc->callback_param = &tspi->rx_dma_complete;
+	dmaengine_desc_set_callback(tspi->rx_dma_desc, tegra_slink_dma_complete, NULL, &tspi->rx_dma_complete);
 
 	dmaengine_submit(tspi->rx_dma_desc);
 	dma_async_issue_pending(tspi->rx_dma_chan);
diff --git a/drivers/spi/spi-tegra210-quad.c b/drivers/spi/spi-tegra210-quad.c
index d8cca3aa276b2..95132d8be9dd6 100644
--- a/drivers/spi/spi-tegra210-quad.c
+++ b/drivers/spi/spi-tegra210-quad.c
@@ -522,8 +522,7 @@ static int tegra_qspi_start_tx_dma(struct tegra_qspi *tqspi, struct spi_transfer
 		return -EIO;
 	}
 
-	tqspi->tx_dma_desc->callback = tegra_qspi_dma_complete;
-	tqspi->tx_dma_desc->callback_param = &tqspi->tx_dma_complete;
+	dmaengine_desc_set_callback(tqspi->tx_dma_desc, tegra_qspi_dma_complete, NULL, &tqspi->tx_dma_complete);
 	dmaengine_submit(tqspi->tx_dma_desc);
 	dma_async_issue_pending(tqspi->tx_dma_chan);
 
@@ -550,8 +549,7 @@ static int tegra_qspi_start_rx_dma(struct tegra_qspi *tqspi, struct spi_transfer
 		return -EIO;
 	}
 
-	tqspi->rx_dma_desc->callback = tegra_qspi_dma_complete;
-	tqspi->rx_dma_desc->callback_param = &tqspi->rx_dma_complete;
+	dmaengine_desc_set_callback(tqspi->rx_dma_desc, tegra_qspi_dma_complete, NULL, &tqspi->rx_dma_complete);
 	dmaengine_submit(tqspi->rx_dma_desc);
 	dma_async_issue_pending(tqspi->rx_dma_chan);
 
diff --git a/drivers/spi/spi-ti-qspi.c b/drivers/spi/spi-ti-qspi.c
index 091a8b8842f58..0083160c15fea 100644
--- a/drivers/spi/spi-ti-qspi.c
+++ b/drivers/spi/spi-ti-qspi.c
@@ -452,8 +452,7 @@ static int ti_qspi_dma_xfer(struct ti_qspi *qspi, dma_addr_t dma_dst,
 		return -EIO;
 	}
 
-	tx->callback = ti_qspi_dma_callback;
-	tx->callback_param = qspi;
+	dmaengine_desc_set_callback(tx, ti_qspi_dma_callback, NULL, qspi);
 	cookie = dmaengine_submit(tx);
 	reinit_completion(&qspi->transfer_complete);
 
diff --git a/drivers/spi/spi-topcliff-pch.c b/drivers/spi/spi-topcliff-pch.c
index eb3485149e75a..fdda26eb311fb 100644
--- a/drivers/spi/spi-topcliff-pch.c
+++ b/drivers/spi/spi-topcliff-pch.c
@@ -1021,8 +1021,7 @@ static void pch_spi_handle_dma(struct pch_spi_data *data, int *bpw)
 		return;
 	}
 	dma_sync_sg_for_device(&data->host->dev, sg, num, DMA_FROM_DEVICE);
-	desc_rx->callback = pch_dma_rx_complete;
-	desc_rx->callback_param = data;
+	dmaengine_desc_set_callback(desc_rx, pch_dma_rx_complete, NULL, data);
 	dma->nent = num;
 	dma->desc_rx = desc_rx;
 
@@ -1083,8 +1082,7 @@ static void pch_spi_handle_dma(struct pch_spi_data *data, int *bpw)
 		return;
 	}
 	dma_sync_sg_for_device(&data->host->dev, sg, num, DMA_TO_DEVICE);
-	desc_tx->callback = NULL;
-	desc_tx->callback_param = data;
+	dmaengine_desc_set_callback(desc_tx, NULL, NULL, data);
 	dma->nent = num;
 	dma->desc_tx = desc_tx;
 
diff --git a/drivers/spi/spi-uniphier.c b/drivers/spi/spi-uniphier.c
index 86fce9a571dab..e8344a66e4361 100644
--- a/drivers/spi/spi-uniphier.c
+++ b/drivers/spi/spi-uniphier.c
@@ -418,8 +418,7 @@ static int uniphier_spi_transfer_one_dma(struct spi_controller *host,
 		if (!rxdesc)
 			goto out_err_prep;
 
-		rxdesc->callback = uniphier_spi_dma_rxcb;
-		rxdesc->callback_param = host;
+		dmaengine_desc_set_callback(rxdesc, uniphier_spi_dma_rxcb, NULL, host);
 
 		uniphier_spi_irq_enable(priv, SSI_IE_RXRE);
 		atomic_or(SSI_DMA_RX_BUSY, &priv->dma_busy);
@@ -445,8 +444,7 @@ static int uniphier_spi_transfer_one_dma(struct spi_controller *host,
 		if (!txdesc)
 			goto out_err_prep;
 
-		txdesc->callback = uniphier_spi_dma_txcb;
-		txdesc->callback_param = host;
+		dmaengine_desc_set_callback(txdesc, uniphier_spi_dma_txcb, NULL, host);
 
 		uniphier_spi_irq_enable(priv, SSI_IE_TXRE);
 		atomic_or(SSI_DMA_TX_BUSY, &priv->dma_busy);
-- 
2.43.0


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-11-03 11:53 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-11-02 17:39 [PATCH 1/1] spi: use dmaengine_desc_set_callback() Frank.Li
2026-11-03  9:04 ` Linus Walleij
2026-11-03 11:53 ` Mukesh Savaliya

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®