[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