Message ID | 20240625150717.1038212-4-olivier.moysan@foss.st.com (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
Series | iio: adc: dfsdm: add scaling support | expand |
On Tue, 2024-06-25 at 17:07 +0200, Olivier Moysan 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@foss.st.com> > Reviewed-by: Nuno Sa <nuno.sa@analog.com> > --- > drivers/iio/industrialio-backend.c | 62 +++++++++++++++++++++--------- > include/linux/iio/backend.h | 2 + > 2 files changed, 45 insertions(+), 19 deletions(-) ... > --- a/include/linux/iio/backend.h > +++ b/include/linux/iio/backend.h > @@ -153,6 +153,8 @@ int iio_backend_extend_chan_spec(struct iio_dev > *indio_dev, > 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_fwnode_get(struct device *dev, const > char *name, > + struct fwnode_handle *node); node -> fwnode - Nuno Sá
On Tue, 25 Jun 2024 17:07:11 +0200 Olivier Moysan <olivier.moysan@foss.st.com> 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@foss.st.com> > Reviewed-by: Nuno Sa <nuno.sa@analog.com> 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); > }
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); + 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); } + +/** + * 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) +{ + return __devm_iio_backend_fwnode_get(dev, name, dev_fwnode(dev)); +} EXPORT_SYMBOL_NS_GPL(devm_iio_backend_get, IIO_BACKEND); +/** + * devm_iio_backend_fwnode_get - Device managed backend firmware node get + * @dev: Consumer device for the backend + * @name: Backend name + * @fwnode: Firmware node of the backend consumer + * + * Get's the backend associated with a firmware node. + * + * RETURNS: + * A backend pointer, negative error pointer otherwise. + */ +struct iio_backend *devm_iio_backend_fwnode_get(struct device *dev, const char *name, + struct fwnode_handle *fwnode) +{ + return __devm_iio_backend_fwnode_get(dev, name, fwnode); +} +EXPORT_SYMBOL_NS_GPL(devm_iio_backend_fwnode_get, IIO_BACKEND); + /** * __devm_iio_backend_get_from_fwnode_lookup - Device managed fwnode backend device get * @dev: Consumer device for the backend diff --git a/include/linux/iio/backend.h b/include/linux/iio/backend.h index 23f21990b85f..6fa9f1c88f61 100644 --- a/include/linux/iio/backend.h +++ b/include/linux/iio/backend.h @@ -153,6 +153,8 @@ int iio_backend_extend_chan_spec(struct iio_dev *indio_dev, 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_fwnode_get(struct device *dev, const char *name, + struct fwnode_handle *node); struct iio_backend * __devm_iio_backend_get_from_fwnode_lookup(struct device *dev, struct fwnode_handle *fwnode);