[PATCH 3/3] i2c: lpi2c: Use auto cleanup for dma_map_single()

Frank Li Frank.Li at nxp.com
Fri Oct 10 11:50:26 PDT 2025


Use auto cleanup for dma_map_single() to simple code.

Signed-off-by: Frank Li <Frank.Li at nxp.com>
---
Demostrate to how to use auto cleanup for dma map functiongs. It will
simple more if need map multi buffers at a functions.
---
 drivers/i2c/busses/i2c-imx-lpi2c.c | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/drivers/i2c/busses/i2c-imx-lpi2c.c b/drivers/i2c/busses/i2c-imx-lpi2c.c
index 03b5a7e8c361abe1d75fb4d31f9614bbc6387d93..2c89d441ab1b3e607b8a2b0a6589e5909fa39ef4 100644
--- a/drivers/i2c/busses/i2c-imx-lpi2c.c
+++ b/drivers/i2c/busses/i2c-imx-lpi2c.c
@@ -727,9 +727,11 @@ static int lpi2c_dma_rx_cmd_submit(struct lpi2c_imx_struct *lpi2c_imx)
 	struct dma_chan *txchan = dma->chan_tx;
 	dma_cookie_t cookie;
 
-	dma->dma_tx_addr = dma_map_single(txchan->device->dev,
-					  dma->rx_cmd_buf, dma->rx_cmd_buf_len,
-					  DMA_TO_DEVICE);
+	CLASS(dma_map_single, dma_addr)(txchan->device->dev,
+					dma->rx_cmd_buf, dma->rx_cmd_buf_len,
+					DMA_TO_DEVICE);
+	dma->dma_tx_addr = dma_addr.ret;
+
 	if (dma_mapping_error(txchan->device->dev, dma->dma_tx_addr)) {
 		dev_err(&lpi2c_imx->adapter.dev, "DMA map failed, use pio\n");
 		return -EINVAL;
@@ -749,18 +751,15 @@ static int lpi2c_dma_rx_cmd_submit(struct lpi2c_imx_struct *lpi2c_imx)
 		goto submit_err_exit;
 	}
 
+	retain_and_empty(dma_addr);
 	dma_async_issue_pending(txchan);
 
 	return 0;
 
 desc_prepare_err_exit:
-	dma_unmap_single(txchan->device->dev, dma->dma_tx_addr,
-			 dma->rx_cmd_buf_len, DMA_TO_DEVICE);
 	return -EINVAL;
 
 submit_err_exit:
-	dma_unmap_single(txchan->device->dev, dma->dma_tx_addr,
-			 dma->rx_cmd_buf_len, DMA_TO_DEVICE);
 	dmaengine_desc_free(rx_cmd_desc);
 	return -EINVAL;
 }

-- 
2.34.1




More information about the linux-arm-kernel mailing list