Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a0e545e0 authored by Lars-Peter Clausen's avatar Lars-Peter Clausen Committed by Jonathan Cameron
Browse files

staging:iio:hwmon bridge: Use iio_read_channel_processed



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: default avatarLars-Peter Clausen <lars@metafoo.de>
Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
parent 48e44ce0
Loading
Loading
Loading
Loading
+5 −28
Original line number Diff line number Diff line
@@ -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)