diff options
author | Sebastian Reichel <sre@debian.org> | 2014-10-03 12:25:00 -0400 |
---|---|---|
committer | Jonathan Cameron <jic23@kernel.org> | 2014-03-16 14:00:33 -0400 |
commit | 476d4af22cec8a9ebc90137712e5ab7070b7379d (patch) | |
tree | 3da0d92e3e37b9a37e0184d5bf8d10a9e2a7d60c | |
parent | c0a6b7ee9498269e4bf9a7e6676f2f45edca2f1a (diff) |
iio: inkern: add iio_read_channel_average_raw
Add iio_read_channel_average_raw to support reading
averaged raw values in consumer drivers.
Signed-off-by: Sebastian Reichel <sre@debian.org>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
-rw-r--r-- | drivers/iio/inkern.c | 18 | ||||
-rw-r--r-- | include/linux/iio/consumer.h | 13 |
2 files changed, 31 insertions, 0 deletions
diff --git a/drivers/iio/inkern.c b/drivers/iio/inkern.c index 0cf5f8e06cfc..adeba5a0ecf7 100644 --- a/drivers/iio/inkern.c +++ b/drivers/iio/inkern.c | |||
@@ -443,6 +443,24 @@ err_unlock: | |||
443 | } | 443 | } |
444 | EXPORT_SYMBOL_GPL(iio_read_channel_raw); | 444 | EXPORT_SYMBOL_GPL(iio_read_channel_raw); |
445 | 445 | ||
446 | int iio_read_channel_average_raw(struct iio_channel *chan, int *val) | ||
447 | { | ||
448 | int ret; | ||
449 | |||
450 | mutex_lock(&chan->indio_dev->info_exist_lock); | ||
451 | if (chan->indio_dev->info == NULL) { | ||
452 | ret = -ENODEV; | ||
453 | goto err_unlock; | ||
454 | } | ||
455 | |||
456 | ret = iio_channel_read(chan, val, NULL, IIO_CHAN_INFO_AVERAGE_RAW); | ||
457 | err_unlock: | ||
458 | mutex_unlock(&chan->indio_dev->info_exist_lock); | ||
459 | |||
460 | return ret; | ||
461 | } | ||
462 | EXPORT_SYMBOL_GPL(iio_read_channel_average_raw); | ||
463 | |||
446 | static int iio_convert_raw_to_processed_unlocked(struct iio_channel *chan, | 464 | static int iio_convert_raw_to_processed_unlocked(struct iio_channel *chan, |
447 | int raw, int *processed, unsigned int scale) | 465 | int raw, int *processed, unsigned int scale) |
448 | { | 466 | { |
diff --git a/include/linux/iio/consumer.h b/include/linux/iio/consumer.h index 2752b1fd12be..651f9a0e2765 100644 --- a/include/linux/iio/consumer.h +++ b/include/linux/iio/consumer.h | |||
@@ -123,6 +123,19 @@ int iio_read_channel_raw(struct iio_channel *chan, | |||
123 | int *val); | 123 | int *val); |
124 | 124 | ||
125 | /** | 125 | /** |
126 | * iio_read_channel_average_raw() - read from a given channel | ||
127 | * @chan: The channel being queried. | ||
128 | * @val: Value read back. | ||
129 | * | ||
130 | * Note raw reads from iio channels are in adc counts and hence | ||
131 | * scale will need to be applied if standard units required. | ||
132 | * | ||
133 | * In opposit to the normal iio_read_channel_raw this function | ||
134 | * returns the average of multiple reads. | ||
135 | */ | ||
136 | int iio_read_channel_average_raw(struct iio_channel *chan, int *val); | ||
137 | |||
138 | /** | ||
126 | * iio_read_channel_processed() - read processed value from a given channel | 139 | * iio_read_channel_processed() - read processed value from a given channel |
127 | * @chan: The channel being queried. | 140 | * @chan: The channel being queried. |
128 | * @val: Value read back. | 141 | * @val: Value read back. |