Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

iio: add child nodes support in iio backend framework

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>
Link: https://patch.msgid.link/20240730084640.1307938-4-olivier.moysan@foss.st.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

authored by

Olivier Moysan and committed by
Jonathan Cameron
c464cc61 2530d7d4

+44 -16
+41 -16
drivers/iio/industrialio-backend.c
··· 718 718 return 0; 719 719 } 720 720 721 - /** 722 - * devm_iio_backend_get - Device managed backend device get 723 - * @dev: Consumer device for the backend 724 - * @name: Backend name 725 - * 726 - * Get's the backend associated with @dev. 727 - * 728 - * RETURNS: 729 - * A backend pointer, negative error pointer otherwise. 730 - */ 731 - struct iio_backend *devm_iio_backend_get(struct device *dev, const char *name) 721 + static struct iio_backend *__devm_iio_backend_fwnode_get(struct device *dev, const char *name, 722 + struct fwnode_handle *fwnode) 732 723 { 733 - struct fwnode_handle *fwnode; 724 + struct fwnode_handle *fwnode_back; 734 725 struct iio_backend *back; 735 726 unsigned int index; 736 727 int ret; ··· 736 745 index = 0; 737 746 } 738 747 739 - fwnode = fwnode_find_reference(dev_fwnode(dev), "io-backends", index); 748 + fwnode_back = fwnode_find_reference(fwnode, "io-backends", index); 740 749 if (IS_ERR(fwnode)) 741 750 return dev_err_cast_probe(dev, fwnode, 742 751 "Cannot get Firmware reference\n"); 743 752 744 753 guard(mutex)(&iio_back_lock); 745 754 list_for_each_entry(back, &iio_back_list, entry) { 746 - if (!device_match_fwnode(back->dev, fwnode)) 755 + if (!device_match_fwnode(back->dev, fwnode_back)) 747 756 continue; 748 757 749 - fwnode_handle_put(fwnode); 758 + fwnode_handle_put(fwnode_back); 750 759 ret = __devm_iio_backend_get(dev, back); 751 760 if (ret) 752 761 return ERR_PTR(ret); ··· 757 766 return back; 758 767 } 759 768 760 - fwnode_handle_put(fwnode); 769 + fwnode_handle_put(fwnode_back); 761 770 return ERR_PTR(-EPROBE_DEFER); 762 771 } 772 + 773 + /** 774 + * devm_iio_backend_get - Device managed backend device get 775 + * @dev: Consumer device for the backend 776 + * @name: Backend name 777 + * 778 + * Get's the backend associated with @dev. 779 + * 780 + * RETURNS: 781 + * A backend pointer, negative error pointer otherwise. 782 + */ 783 + struct iio_backend *devm_iio_backend_get(struct device *dev, const char *name) 784 + { 785 + return __devm_iio_backend_fwnode_get(dev, name, dev_fwnode(dev)); 786 + } 763 787 EXPORT_SYMBOL_NS_GPL(devm_iio_backend_get, IIO_BACKEND); 788 + 789 + /** 790 + * devm_iio_backend_fwnode_get - Device managed backend firmware node get 791 + * @dev: Consumer device for the backend 792 + * @name: Backend name 793 + * @fwnode: Firmware node of the backend consumer 794 + * 795 + * Get's the backend associated with a firmware node. 796 + * 797 + * RETURNS: 798 + * A backend pointer, negative error pointer otherwise. 799 + */ 800 + struct iio_backend *devm_iio_backend_fwnode_get(struct device *dev, 801 + const char *name, 802 + struct fwnode_handle *fwnode) 803 + { 804 + return __devm_iio_backend_fwnode_get(dev, name, fwnode); 805 + } 806 + EXPORT_SYMBOL_NS_GPL(devm_iio_backend_fwnode_get, IIO_BACKEND); 764 807 765 808 /** 766 809 * __devm_iio_backend_get_from_fwnode_lookup - Device managed fwnode backend device get
+3
include/linux/iio/backend.h
··· 176 176 struct iio_chan_spec *chan); 177 177 void *iio_backend_get_priv(const struct iio_backend *conv); 178 178 struct iio_backend *devm_iio_backend_get(struct device *dev, const char *name); 179 + struct iio_backend *devm_iio_backend_fwnode_get(struct device *dev, 180 + const char *name, 181 + struct fwnode_handle *fwnode); 179 182 struct iio_backend * 180 183 __devm_iio_backend_get_from_fwnode_lookup(struct device *dev, 181 184 struct fwnode_handle *fwnode);