Skip to content

Commit

Permalink
staging:iio:hwmon bridge: Use iio_read_channel_processed
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Lars-Peter Clausen authored and Jonathan Cameron committed Sep 17, 2012
1 parent 48e44ce commit a0e545e
Showing 1 changed file with 5 additions and 28 deletions.
33 changes: 5 additions & 28 deletions drivers/staging/iio/iio_hwmon.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit a0e545e

Please sign in to comment.