From: Antoniu Miclaus <antoniu.miclaus@analog.com>
To: "Antoniu Miclaus" <antoniu.miclaus@analog.com>,
"Lars-Peter Clausen" <lars@metafoo.de>,
"Michael Hennerich" <Michael.Hennerich@analog.com>,
"Jonathan Cameron" <jic23@kernel.org>,
"David Lechner" <dlechner@baylibre.com>,
"Nuno Sá" <nuno.sa@analog.com>,
"Andy Shevchenko" <andy@kernel.org>,
"Rob Herring" <robh@kernel.org>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
"Conor Dooley" <conor+dt@kernel.org>,
"Olivier Moysan" <olivier.moysan@foss.st.com>,
"Mark Brown" <broonie@kernel.org>,
linux-iio@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-spi@vger.kernel.org
Subject: [PATCH v3 3/5] iio: backend: add devm_iio_backend_get_by_index()
Date: Fri, 13 Feb 2026 16:47:35 +0200 [thread overview]
Message-ID: <20260213144742.16394-4-antoniu.miclaus@analog.com> (raw)
In-Reply-To: <20260213144742.16394-1-antoniu.miclaus@analog.com>
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@analog.com>
---
Changes in v3:
- Refactor __devm_iio_backend_fwnode_get() to reuse
__devm_iio_backend_fwnode_get_by_index() instead of duplicating
the lookup logic
- Use __free(fwnode_handle) for automatic cleanup instead of manual
fwnode_handle_put()
- Set back->idx unconditionally in the by_index path
drivers/iio/industrialio-backend.c | 61 ++++++++++++++++++++----------
include/linux/iio/backend.h | 2 +
2 files changed, 44 insertions(+), 19 deletions(-)
diff --git a/drivers/iio/industrialio-backend.c b/drivers/iio/industrialio-backend.c
index 447b694d6d5f..d90a3a0b17c6 100644
--- a/drivers/iio/industrialio-backend.c
+++ b/drivers/iio/industrialio-backend.c
@@ -949,25 +949,16 @@ int iio_backend_data_transfer_addr(struct iio_backend *back, u32 address)
}
EXPORT_SYMBOL_NS_GPL(iio_backend_data_transfer_addr, "IIO_BACKEND");
-static struct iio_backend *__devm_iio_backend_fwnode_get(struct device *dev, const char *name,
- struct fwnode_handle *fwnode)
+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 fwnode_handle *fwnode_back __free(fwnode_handle) =
+ fwnode_find_reference(fwnode, "io-backends", index);
struct iio_backend *back;
- unsigned int index;
int ret;
- if (name) {
- ret = device_property_match_string(dev, "io-backend-names",
- name);
- if (ret < 0)
- return ERR_PTR(ret);
- index = ret;
- } else {
- index = 0;
- }
-
- 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");
@@ -977,21 +968,35 @@ static struct iio_backend *__devm_iio_backend_fwnode_get(struct device *dev, con
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;
+ int ret;
+
+ if (name) {
+ ret = device_property_match_string(dev, "io-backend-names",
+ name);
+ if (ret < 0)
+ return ERR_PTR(ret);
+ index = ret;
+ }
+
+ return __devm_iio_backend_fwnode_get_by_index(dev, fwnode, index);
+}
+
/**
* devm_iio_backend_get - Device managed backend device get
* @dev: Consumer device for the backend
@@ -1008,6 +1013,24 @@ struct iio_backend *devm_iio_backend_get(struct device *dev, const char *name)
}
EXPORT_SYMBOL_NS_GPL(devm_iio_backend_get, "IIO_BACKEND");
+/**
+ * devm_iio_backend_get_by_index - Device managed backend device get by index
+ * @dev: Consumer device for the backend
+ * @index: Index of the backend in the io-backends property
+ *
+ * Get's the backend at @index associated with @dev.
+ *
+ * RETURNS:
+ * A backend pointer, negative error pointer otherwise.
+ */
+struct iio_backend *devm_iio_backend_get_by_index(struct device *dev,
+ unsigned int index)
+{
+ return __devm_iio_backend_fwnode_get_by_index(dev, dev_fwnode(dev),
+ index);
+}
+EXPORT_SYMBOL_NS_GPL(devm_iio_backend_get_by_index, "IIO_BACKEND");
+
/**
* devm_iio_backend_fwnode_get - Device managed backend firmware node get
* @dev: Consumer device for the backend
diff --git a/include/linux/iio/backend.h b/include/linux/iio/backend.h
index 7f815f3fed6a..8f18df0ca896 100644
--- a/include/linux/iio/backend.h
+++ b/include/linux/iio/backend.h
@@ -237,6 +237,8 @@ int iio_backend_extend_chan_spec(struct iio_backend *back,
struct iio_chan_spec *chan);
void *iio_backend_get_priv(const struct iio_backend *conv);
struct iio_backend *devm_iio_backend_get(struct device *dev, const char *name);
+struct iio_backend *devm_iio_backend_get_by_index(struct device *dev,
+ unsigned int index);
struct iio_backend *devm_iio_backend_fwnode_get(struct device *dev,
const char *name,
struct fwnode_handle *fwnode);
--
2.43.0
next prev parent reply other threads:[~2026-02-13 14:51 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-13 14:47 [PATCH v3 0/5] iio: adc: ad4080: add support for AD4880 dual-channel ADC Antoniu Miclaus
2026-02-13 14:47 ` [PATCH v3 1/5] spi: allow ancillary devices to share parent's chip selects Antoniu Miclaus
2026-02-13 16:39 ` Nuno Sá
2026-02-15 18:36 ` Jonathan Cameron
2026-02-13 14:47 ` [PATCH v3 2/5] spi: add devm_spi_new_ancillary_device() Antoniu Miclaus
2026-02-13 16:40 ` Nuno Sá
2026-02-13 14:47 ` Antoniu Miclaus [this message]
2026-02-13 16:33 ` [PATCH v3 3/5] iio: backend: add devm_iio_backend_get_by_index() Nuno Sá
2026-02-13 14:47 ` [PATCH v3 4/5] dt-bindings: iio: adc: ad4080: add AD4880 support Antoniu Miclaus
2026-02-13 16:34 ` Rob Herring (Arm)
2026-02-14 8:54 ` Krzysztof Kozlowski
2026-02-13 14:47 ` [PATCH v3 5/5] iio: adc: ad4080: add support for AD4880 dual-channel ADC Antoniu Miclaus
2026-02-13 16:43 ` Nuno Sá
2026-02-15 18:42 ` Jonathan Cameron
2026-02-15 18:34 ` [PATCH v3 0/5] " Jonathan Cameron
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260213144742.16394-4-antoniu.miclaus@analog.com \
--to=antoniu.miclaus@analog.com \
--cc=Michael.Hennerich@analog.com \
--cc=andy@kernel.org \
--cc=broonie@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dlechner@baylibre.com \
--cc=jic23@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=lars@metafoo.de \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-spi@vger.kernel.org \
--cc=nuno.sa@analog.com \
--cc=olivier.moysan@foss.st.com \
--cc=robh@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox