|
@@ -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)
|