[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <becd9db1-818f-4aa8-8362-91a711861839@baylibre.com>
Date: Mon, 9 Feb 2026 09:28:21 -0600
From: David Lechner <dlechner@...libre.com>
To: Nuno Sá <noname.nuno@...il.com>,
Antoniu Miclaus <antoniu.miclaus@...log.com>,
Lars-Peter Clausen <lars@...afoo.de>,
Michael Hennerich <Michael.Hennerich@...log.com>,
Jonathan Cameron <jic23@...nel.org>, Nuno Sá
<nuno.sa@...log.com>, Andy Shevchenko <andy@...nel.org>,
Rob Herring <robh@...nel.org>, Krzysztof Kozlowski <krzk+dt@...nel.org>,
Conor Dooley <conor+dt@...nel.org>,
Olivier Moysan <olivier.moysan@...s.st.com>, Mark Brown
<broonie@...nel.org>, linux-iio@...r.kernel.org, devicetree@...r.kernel.org,
linux-kernel@...r.kernel.org, linux-spi@...r.kernel.org
Subject: Re: [PATCH v2 2/4] iio: backend: add devm_iio_backend_get_by_index()
On 2/8/26 3:24 AM, Nuno Sá wrote:
> On Fri, 2026-02-06 at 18:07 +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.
>>
>> Signed-off-by: Antoniu Miclaus <antoniu.miclaus@...log.com>
>> ---
>> drivers/iio/industrialio-backend.c | 51 ++++++++++++++++++++++++++++++
>> include/linux/iio/backend.h | 2 ++
>> 2 files changed, 53 insertions(+)
>>
>> diff --git a/drivers/iio/industrialio-backend.c b/drivers/iio/industrialio-
>> backend.c
>> index 447b694d6d5f..3b692d48481e 100644
>> --- a/drivers/iio/industrialio-backend.c
>> +++ b/drivers/iio/industrialio-backend.c
>> @@ -1008,6 +1008,57 @@ struct iio_backend *devm_iio_backend_get(struct device *dev,
>> const char *name)
>> }
>> EXPORT_SYMBOL_NS_GPL(devm_iio_backend_get, "IIO_BACKEND");
>>
>> +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;
>> + struct iio_backend *back;
>> + int ret;
>> +
>> + fwnode_back = 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");
>> +
>> + guard(mutex)(&iio_back_lock);
>> + list_for_each_entry(back, &iio_back_list, entry) {
>> + 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);
>> +
>> + back->idx = index;
>> +
>> + return back;
>> + }
>> +
>> + fwnode_handle_put(fwnode_back);
>> + return ERR_PTR(-EPROBE_DEFER);
>> +}
>
> I believe we don't necessarily need this. Why can't we use io-backend-names? I get
> that in here we just want something matching the number of channels we have so giving
> names is probably does not add much added value. But still, I would prefer t have
> more simplicity in the API and it should be fairly easy for the frontend to use the
> names argument.
>
> _ Nuno Sá
>
IMHO, using names in this case would just be annoying because we would have to
sprintf the string to add the index to the string. And also have to spend time
coming up with more complex DT bindings. Using the index seems much simpler.
If you really feel strongly about it though, maybe we could make a
devm_iio_backend_fwnode_get_fmt() function instead that handles the
sprintf() part so that we only have to write that once?
Powered by blists - more mailing lists