iio: inkern: add iio_read_channel_offset helper
authorMatt Ranostay <mranostay@gmail.com>
Sat, 24 Sep 2016 06:04:07 +0000 (23:04 -0700)
committerJonathan Cameron <jic23@kernel.org>
Tue, 27 Sep 2016 19:33:02 +0000 (20:33 +0100)
Allow access to underlying channel IIO_CHAN_INFO_OFFSET from a consumer.

Signed-off-by: Matt Ranostay <matt@ranostay.consulting>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
drivers/iio/inkern.c
include/linux/iio/consumer.h

index c4757e6367e7ae00ac27f5bf89879307f816a97a..29df1157285857333f38c61d8c2a6b96c5c0a0e7 100644 (file)
@@ -658,6 +658,31 @@ err_unlock:
 }
 EXPORT_SYMBOL_GPL(iio_convert_raw_to_processed);
 
+static int iio_read_channel_attribute(struct iio_channel *chan,
+                                     int *val, int *val2,
+                                     enum iio_chan_info_enum attribute)
+{
+       int ret;
+
+       mutex_lock(&chan->indio_dev->info_exist_lock);
+       if (chan->indio_dev->info == NULL) {
+               ret = -ENODEV;
+               goto err_unlock;
+       }
+
+       ret = iio_channel_read(chan, val, val2, attribute);
+err_unlock:
+       mutex_unlock(&chan->indio_dev->info_exist_lock);
+
+       return ret;
+}
+
+int iio_read_channel_offset(struct iio_channel *chan, int *val, int *val2)
+{
+       return iio_read_channel_attribute(chan, val, val2, IIO_CHAN_INFO_OFFSET);
+}
+EXPORT_SYMBOL_GPL(iio_read_channel_offset);
+
 int iio_read_channel_processed(struct iio_channel *chan, int *val)
 {
        int ret;
@@ -687,19 +712,7 @@ EXPORT_SYMBOL_GPL(iio_read_channel_processed);
 
 int iio_read_channel_scale(struct iio_channel *chan, int *val, int *val2)
 {
-       int ret;
-
-       mutex_lock(&chan->indio_dev->info_exist_lock);
-       if (chan->indio_dev->info == NULL) {
-               ret = -ENODEV;
-               goto err_unlock;
-       }
-
-       ret = iio_channel_read(chan, val, val2, IIO_CHAN_INFO_SCALE);
-err_unlock:
-       mutex_unlock(&chan->indio_dev->info_exist_lock);
-
-       return ret;
+       return iio_read_channel_attribute(chan, val, val2, IIO_CHAN_INFO_SCALE);
 }
 EXPORT_SYMBOL_GPL(iio_read_channel_scale);
 
index 9edccfba1ffbbae780dfe278eb6a1c48f2be2b43..638157234357b5813394d0240c5823725056c747 100644 (file)
@@ -235,6 +235,19 @@ int iio_write_channel_raw(struct iio_channel *chan, int val);
 int iio_get_channel_type(struct iio_channel *channel,
                         enum iio_chan_type *type);
 
+/**
+ * iio_read_channel_offset() - read the offset value for a channel
+ * @chan:              The channel being queried.
+ * @val:               First part of value read back.
+ * @val2:              Second part of value read back.
+ *
+ * Note returns a description of what is in val and val2, such
+ * as IIO_VAL_INT_PLUS_MICRO telling us we have a value of val
+ * + val2/1e6
+ */
+int iio_read_channel_offset(struct iio_channel *chan, int *val,
+                          int *val2);
+
 /**
  * iio_read_channel_scale() - read the scale value for a channel
  * @chan:              The channel being queried.