[PATCHv2] iio: iio-mux: use flexible array member

From: Rosen Penev

Date: Mon Mar 16 2026 - 19:31:23 EST


Make it clear that there's trailing data

Removes a pointer from the struct.

Use array_size for the sizeof calculations. Slightly cleaner.

Signed-off-by: Rosen Penev <rosenp@xxxxxxxxx>
---
v2: use array_size
drivers/iio/multiplexer/iio-mux.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/iio/multiplexer/iio-mux.c b/drivers/iio/multiplexer/iio-mux.c
index b742ca9a99d1..f2bc8f3aad95 100644
--- a/drivers/iio/multiplexer/iio-mux.c
+++ b/drivers/iio/multiplexer/iio-mux.c
@@ -33,8 +33,8 @@ struct mux {
struct iio_channel *parent;
struct iio_chan_spec *chan;
struct iio_chan_spec_ext_info *ext_info;
- struct mux_child *child;
u32 delay_us;
+ struct mux_child child[];
};

static int iio_mux_select(struct mux *mux, int idx)
@@ -381,8 +381,8 @@ static int mux_probe(struct platform_device *pdev)
}

sizeof_priv = sizeof(*mux);
- sizeof_priv += sizeof(*mux->child) * children;
- sizeof_priv += sizeof(*mux->chan) * children;
+ sizeof_priv += array_size(children, sizeof(*mux->child));
+ sizeof_priv += array_size(children, sizeof(*mux->chan));
sizeof_priv += sizeof_ext_info;

indio_dev = devm_iio_device_alloc(dev, sizeof_priv);
@@ -390,7 +390,6 @@ static int mux_probe(struct platform_device *pdev)
return -ENOMEM;

mux = iio_priv(indio_dev);
- mux->child = (struct mux_child *)(mux + 1);
mux->chan = (struct iio_chan_spec *)(mux->child + children);

platform_set_drvdata(pdev, indio_dev);
--
2.53.0