On Tue, 25 Jun 2024 17:07:11 +0200 Olivier Moysan <olivier.moysan@xxxxxxxxxxx> wrote: > Add an API to support IIO generic channels binding: > http://devicetree.org/schemas/iio/adc/adc.yaml# > This new API is needed, as generic channel DT node isn't populated as a > device. > Add devm_iio_backend_fwnode_get() to allow an IIO device backend > consumer to reference backend phandles in its child nodes. > > Signed-off-by: Olivier Moysan <olivier.moysan@xxxxxxxxxxx> > Reviewed-by: Nuno Sa <nuno.sa@xxxxxxxxxx> A passing comment inline. I'm not asking for any changes in this series (unless you want to make it more complex ;) > --- > drivers/iio/industrialio-backend.c | 62 +++++++++++++++++++++--------- > include/linux/iio/backend.h | 2 + > 2 files changed, 45 insertions(+), 19 deletions(-) > > diff --git a/drivers/iio/industrialio-backend.c b/drivers/iio/industrialio-backend.c > index 6be1fa9a960b..8cc959ac278a 100644 > --- a/drivers/iio/industrialio-backend.c > +++ b/drivers/iio/industrialio-backend.c > @@ -577,19 +577,10 @@ static int __devm_iio_backend_get(struct device *dev, struct iio_backend *back) > return 0; > } > > -/** > - * devm_iio_backend_get - Device managed backend device get > - * @dev: Consumer device for the backend > - * @name: Backend name > - * > - * Get's the backend associated with @dev. > - * > - * RETURNS: > - * A backend pointer, negative error pointer otherwise. > - */ > -struct iio_backend *devm_iio_backend_get(struct device *dev, const char *name) > +static struct iio_backend *__devm_iio_backend_fwnode_get(struct device *dev, const char *name, > + struct fwnode_handle *fwnode) > { > - struct fwnode_handle *fwnode; > + struct fwnode_handle *fwnode_back; > struct iio_backend *back; > unsigned int index; > int ret; > @@ -604,19 +595,19 @@ struct iio_backend *devm_iio_backend_get(struct device *dev, const char *name) > index = 0; > } > > - fwnode = fwnode_find_reference(dev_fwnode(dev), "io-backends", index); > - if (IS_ERR(fwnode)) { > - dev_err_probe(dev, PTR_ERR(fwnode), > + fwnode_back = fwnode_find_reference(fwnode, "io-backends", index); Not really related, but this looks 'ripe' for some cleanup.h magic. > + if (IS_ERR(fwnode_back)) { > + dev_err_probe(dev, PTR_ERR(fwnode_back), > "Cannot get Firmware reference\n"); > - return ERR_CAST(fwnode); > + return ERR_CAST(fwnode_back); > } > > guard(mutex)(&iio_back_lock); > list_for_each_entry(back, &iio_back_list, entry) { > - if (!device_match_fwnode(back->dev, fwnode)) > + if (!device_match_fwnode(back->dev, fwnode_back)) > continue; > > - fwnode_handle_put(fwnode); > + fwnode_handle_put(fwnode_back); > ret = __devm_iio_backend_get(dev, back); > if (ret) > return ERR_PTR(ret); > @@ -624,11 +615,44 @@ struct iio_backend *devm_iio_backend_get(struct device *dev, const char *name) > return back; > } > > - fwnode_handle_put(fwnode); > + fwnode_handle_put(fwnode_back); > return ERR_PTR(-EPROBE_DEFER); > }