[PATCH v3 6/9] iio: buffer-dmaengine: Use dma_slave_caps bus width accessors
From: Nuno Sá
Date: Mon Aug 31 2026 - 07:56:44 EST
Query the minimum supported source and destination bus widths through
the new dma_slave_caps_get_{src,dst}_width_min() helpers rather than
decoding the raw legacy u32 width masks. This keeps the buffer working
with DMA controllers that advertise bus widths via the new bitmap
representation.
Reviewed-by: Frank Li <Frank.Li@xxxxxxx>
Acked-by: Jonathan Cameron <jonathan.cameron@xxxxxxxxxxxxxxxx>
Signed-off-by: Nuno Sá <nuno.sa@xxxxxxxxxx>
---
drivers/iio/buffer/industrialio-buffer-dmaengine.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/drivers/iio/buffer/industrialio-buffer-dmaengine.c b/drivers/iio/buffer/industrialio-buffer-dmaengine.c
index 98acce909854..e1aea691b732 100644
--- a/drivers/iio/buffer/industrialio-buffer-dmaengine.c
+++ b/drivers/iio/buffer/industrialio-buffer-dmaengine.c
@@ -7,6 +7,7 @@
#include <linux/slab.h>
#include <linux/kernel.h>
#include <linux/cleanup.h>
+#include <linux/dma/engine/widthmask.h>
#include <linux/dmaengine.h>
#include <linux/dma-mapping.h>
#include <linux/spinlock.h>
@@ -229,14 +230,13 @@ static struct iio_buffer *iio_dmaengine_buffer_alloc(struct dma_chan *chan)
return ERR_PTR(-ENOMEM);
/* Needs to be aligned to the maximum of the minimums */
- if (caps.src_addr_widths)
- src_width = __ffs(caps.src_addr_widths);
- else
- src_width = 1;
- if (caps.dst_addr_widths)
- dest_width = __ffs(caps.dst_addr_widths);
- else
- dest_width = 1;
+ src_width = dma_bus_width_min(caps.src_bus_widths);
+ if (src_width == DMA_SLAVE_BUSWIDTH_UNDEFINED)
+ src_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
+ dest_width = dma_bus_width_min(caps.dst_bus_widths);
+ if (dest_width == DMA_SLAVE_BUSWIDTH_UNDEFINED)
+ dest_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
+
width = max(src_width, dest_width);
INIT_LIST_HEAD(&dmaengine_buffer->active);
--
2.55.0