mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-26 13:44:15 +08:00
iio: provide of_iio_channel_get_by_name() and devm_ version it
There might be cases when the IIO channel is attached to the device subnode instead of being attached to the main device node. Allow drivers to query IIO channels by using device tree nodes. Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> Link: https://lore.kernel.org/r/20201204025509.1075506-8-dmitry.baryshkov@linaro.org Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
9695a2a52c
commit
6e39b145ce
@ -191,7 +191,7 @@ err_free_channel:
|
||||
return ERR_PTR(err);
|
||||
}
|
||||
|
||||
static struct iio_channel *of_iio_channel_get_by_name(struct device_node *np,
|
||||
struct iio_channel *of_iio_channel_get_by_name(struct device_node *np,
|
||||
const char *name)
|
||||
{
|
||||
struct iio_channel *chan = NULL;
|
||||
@ -230,6 +230,7 @@ static struct iio_channel *of_iio_channel_get_by_name(struct device_node *np,
|
||||
|
||||
return chan;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(of_iio_channel_get_by_name);
|
||||
|
||||
static struct iio_channel *of_iio_channel_get_all(struct device *dev)
|
||||
{
|
||||
@ -272,12 +273,6 @@ error_free_chans:
|
||||
|
||||
#else /* CONFIG_OF */
|
||||
|
||||
static inline struct iio_channel *
|
||||
of_iio_channel_get_by_name(struct device_node *np, const char *name)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline struct iio_channel *of_iio_channel_get_all(struct device *dev)
|
||||
{
|
||||
return NULL;
|
||||
@ -393,6 +388,29 @@ struct iio_channel *devm_iio_channel_get(struct device *dev,
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devm_iio_channel_get);
|
||||
|
||||
struct iio_channel *devm_of_iio_channel_get_by_name(struct device *dev,
|
||||
struct device_node *np,
|
||||
const char *channel_name)
|
||||
{
|
||||
struct iio_channel **ptr, *channel;
|
||||
|
||||
ptr = devres_alloc(devm_iio_channel_free, sizeof(*ptr), GFP_KERNEL);
|
||||
if (!ptr)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
channel = of_iio_channel_get_by_name(np, channel_name);
|
||||
if (IS_ERR(channel)) {
|
||||
devres_free(ptr);
|
||||
return channel;
|
||||
}
|
||||
|
||||
*ptr = channel;
|
||||
devres_add(dev, ptr);
|
||||
|
||||
return channel;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devm_of_iio_channel_get_by_name);
|
||||
|
||||
struct iio_channel *iio_channel_get_all(struct device *dev)
|
||||
{
|
||||
const char *name;
|
||||
|
@ -13,6 +13,7 @@
|
||||
struct iio_dev;
|
||||
struct iio_chan_spec;
|
||||
struct device;
|
||||
struct device_node;
|
||||
|
||||
/**
|
||||
* struct iio_channel - everything needed for a consumer to use a channel
|
||||
@ -97,6 +98,41 @@ 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
|
||||
* @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
|
||||
|
||||
/**
|
||||
* devm_of_iio_channel_get_by_name() - Resource managed version of of_iio_channel_get_by_name().
|
||||
* @dev: Pointer to consumer device.
|
||||
* @np: Pointer to consumer device tree 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'
|
||||
*
|
||||
* Returns a pointer to negative errno if it is not able to get the iio channel
|
||||
* otherwise returns valid pointer for iio channel.
|
||||
*
|
||||
* 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_cb_buffer;
|
||||
/**
|
||||
* iio_channel_get_all_cb() - register callback for triggered capture
|
||||
|
Loading…
Reference in New Issue
Block a user