Commit 1e64b9c5 authored by Nuno Sá's avatar Nuno Sá Committed by Jonathan Cameron

iio: inkern: move to fwnode properties

This moves the IIO in kernel interface to use fwnode properties and thus
be firmware agnostic.

Note that the interface is still not firmware agnostic. At this point we
have both OF and fwnode interfaces so that we don't break any user. On
top of this we also want to have a per driver conversion and that is the
main reason we have both of_xlate() and fwnode_xlate() support.
Signed-off-by: default avatarNuno Sá <nuno.sa@analog.com>
Reviewed-by: default avatarAndy Shevchenko <andy.shevchenko@gmail.com>
Link: https://lore.kernel.org/r/20220715122903.332535-6-nuno.sa@analog.comSigned-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent d6bb09ea
This diff is collapsed.
......@@ -7,6 +7,7 @@
#ifndef _IIO_INKERN_CONSUMER_H_
#define _IIO_INKERN_CONSUMER_H_
#include <linux/of.h>
#include <linux/types.h>
#include <linux/iio/types.h>
......@@ -14,6 +15,7 @@ struct iio_dev;
struct iio_chan_spec;
struct device;
struct device_node;
struct fwnode_handle;
/**
* struct iio_channel - everything needed for a consumer to use a channel
......@@ -99,26 +101,20 @@ void iio_channel_release_all(struct iio_channel *chan);
struct iio_channel *devm_iio_channel_get_all(struct device *dev);
/**
* of_iio_channel_get_by_name() - get description of all that is needed to access channel.
* @np: Pointer to consumer device tree node
* fwnode_iio_channel_get_by_name() - get description of all that is needed to access channel.
* @fwnode: Pointer to consumer Firmware node
* @consumer_channel: Unique name to identify the channel on the consumer
* side. This typically describes the channels use within
* the consumer. E.g. 'battery_voltage'
*/
#ifdef CONFIG_OF
struct iio_channel *of_iio_channel_get_by_name(struct device_node *np, const char *name);
#else
static inline struct iio_channel *
of_iio_channel_get_by_name(struct device_node *np, const char *name)
{
return NULL;
}
#endif
struct iio_channel *fwnode_iio_channel_get_by_name(struct fwnode_handle *fwnode,
const char *name);
/**
* devm_of_iio_channel_get_by_name() - Resource managed version of of_iio_channel_get_by_name().
* devm_fwnode_iio_channel_get_by_name() - Resource managed version of
* fwnode_iio_channel_get_by_name().
* @dev: Pointer to consumer device.
* @np: Pointer to consumer device tree node
* @fwnode: Pointer to consumer Firmware node
* @consumer_channel: Unique name to identify the channel on the consumer
* side. This typically describes the channels use within
* the consumer. E.g. 'battery_voltage'
......@@ -129,9 +125,17 @@ of_iio_channel_get_by_name(struct device_node *np, const char *name)
* The allocated iio channel is automatically released when the device is
* unbound.
*/
struct iio_channel *devm_of_iio_channel_get_by_name(struct device *dev,
struct device_node *np,
const char *consumer_channel);
struct iio_channel *devm_fwnode_iio_channel_get_by_name(struct device *dev,
struct fwnode_handle *fwnode,
const char *consumer_channel);
static inline struct iio_channel
*devm_of_iio_channel_get_by_name(struct device *dev, struct device_node *np,
const char *consumer_channel)
{
return devm_fwnode_iio_channel_get_by_name(dev, of_fwnode_handle(np),
consumer_channel);
}
struct iio_cb_buffer;
/**
......
......@@ -18,6 +18,7 @@
*/
struct of_phandle_args;
struct fwnode_reference_args;
enum iio_shared_by {
IIO_SEPARATE,
......@@ -429,6 +430,8 @@ struct iio_trigger; /* forward declaration */
* provide a custom of_xlate function that reads the
* *args* and returns the appropriate index in registered
* IIO channels array.
* @fwnode_xlate: fwnode based function pointer to obtain channel specifier index.
* Functionally the same as @of_xlate.
* @hwfifo_set_watermark: function pointer to set the current hardware
* fifo watermark level; see hwfifo_* entries in
* Documentation/ABI/testing/sysfs-bus-iio for details on
......@@ -510,6 +513,8 @@ struct iio_info {
unsigned *readval);
int (*of_xlate)(struct iio_dev *indio_dev,
const struct of_phandle_args *iiospec);
int (*fwnode_xlate)(struct iio_dev *indio_dev,
const struct fwnode_reference_args *iiospec);
int (*hwfifo_set_watermark)(struct iio_dev *indio_dev, unsigned val);
int (*hwfifo_flush_to_buffer)(struct iio_dev *indio_dev,
unsigned count);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment