staging:iio:hwmon bridge: Use iio_read_channel_processed
authorLars-Peter Clausen <lars@metafoo.de>
Mon, 17 Sep 2012 12:17:00 +0000 (13:17 +0100)
committerJonathan Cameron <jic23@kernel.org>
Mon, 17 Sep 2012 20:49:49 +0000 (21:49 +0100)
Use the iio_read_channel_processed function to read the sample value in the
proper unit instead of using iio_read_channel_raw and iio_read_channel_scale and
doing the unit conversion manually.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
drivers/staging/iio/iio_hwmon.c

index 69d4a3b0ced4f4859300ac9b5922ff8de4bbd5ff..5d491227e01b60b309c5ebb1534def818b40dd52 100644 (file)
@@ -42,40 +42,17 @@ static ssize_t iio_hwmon_read_val(struct device *dev,
                                  struct device_attribute *attr,
                                  char *buf)
 {
-       long result;
-       int val, ret, scaleint, scalepart;
+       int result;
+       int ret;
        struct sensor_device_attribute *sattr = to_sensor_dev_attr(attr);
        struct iio_hwmon_state *state = dev_get_drvdata(dev);
 
-       /*
-        * No locking between this pair, so theoretically possible
-        * the scale has changed.
-        */
-       ret = iio_read_channel_raw(&state->channels[sattr->index],
-                                     &val);
+       ret = iio_read_channel_processed(&state->channels[sattr->index],
+                                       &result);
        if (ret < 0)
                return ret;
 
-       ret = iio_read_channel_scale(&state->channels[sattr->index],
-                                       &scaleint, &scalepart);
-       if (ret < 0)
-               return ret;
-       switch (ret) {
-       case IIO_VAL_INT:
-               result = val * scaleint;
-               break;
-       case IIO_VAL_INT_PLUS_MICRO:
-               result = (s64)val * (s64)scaleint +
-                       div_s64((s64)val * (s64)scalepart, 1000000LL);
-               break;
-       case IIO_VAL_INT_PLUS_NANO:
-               result = (s64)val * (s64)scaleint +
-                       div_s64((s64)val * (s64)scalepart, 1000000000LL);
-               break;
-       default:
-               return -EINVAL;
-       }
-       return sprintf(buf, "%ld\n", result);
+       return sprintf(buf, "%d\n", result);
 }
 
 static void iio_hwmon_free_attrs(struct iio_hwmon_state *st)