Re: [PATCH v4 3/5] iio: backend: add devm_iio_backend_get_by_index()
From: Andy Shevchenko
Date: Tue Feb 24 2026 - 05:16:55 EST
On Mon, Feb 23, 2026 at 06:21:02PM +0200, Antoniu Miclaus wrote:
> Add a new function to get an IIO backend by its index in the
> io-backends device tree property. This is useful for multi-channel
> devices that have multiple backends, where looking up by index is
> more straightforward than using named backends.
>
> The new function directly uses the index to find the backend reference
> in the io-backends property, avoiding the need for io-backend-names.
...
> +static struct iio_backend *
> +__devm_iio_backend_fwnode_get_by_index(struct device *dev,
> + struct fwnode_handle *fwnode,
> + unsigned int index)
> {
> + struct fwnode_handle *fwnode_back __free(fwnode_handle) =
> + fwnode_find_reference(fwnode, "io-backends", index);
Better for maintenance to have this near to the check.
It will narrow down the scope as required, in case more code appear in between.
> struct iio_backend *back;
> int ret;
>
(yes, the above blank line is fine)
struct fwnode_handle *fwnode_back __free(fwnode_handle) =
fwnode_find_reference(fwnode, "io-backends", index);
> if (IS_ERR(fwnode_back))
> return dev_err_cast_probe(dev, fwnode_back,
> "Cannot get Firmware reference\n");
> if (!device_match_fwnode(back->dev, fwnode_back))
> continue;
>
> - fwnode_handle_put(fwnode_back);
> ret = __devm_iio_backend_get(dev, back);
> if (ret)
> return ERR_PTR(ret);
>
> - if (name)
> - back->idx = index;
> + back->idx = index;
>
> return back;
> }
>
> - fwnode_handle_put(fwnode_back);
> return ERR_PTR(-EPROBE_DEFER);
> }
...
> +static struct iio_backend *__devm_iio_backend_fwnode_get(struct device *dev, const char *name,
> + struct fwnode_handle *fwnode)
> +{
> + unsigned int index = 0;
Better to maintain when assignment is closer to the real use. See below.
> + int ret;
> +
> + if (name) {
> + ret = device_property_match_string(dev, "io-backend-names",
> + name);
This can be located on a single line (it's only 82 characters long).
> + if (ret < 0)
> + return ERR_PTR(ret);
> + index = ret;
} else {
index = 0;
> + }
> +
> + return __devm_iio_backend_fwnode_get_by_index(dev, fwnode, index);
> +}
--
With Best Regards,
Andy Shevchenko