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

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

staging:iio:adis16260: Add value range check for calibscale/-bias



Instead of just cutting of the upper bits of the value make sure that the value
is in the valid range and return an error if it is not.

Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
parent 988c79a9
Loading
Loading
Loading
Loading
+9 −6
Original line number Diff line number Diff line
@@ -311,18 +311,21 @@ static int adis16260_write_raw(struct iio_dev *indio_dev,
			       long mask)
{
	struct adis *adis = iio_priv(indio_dev);
	int bits = 12;
	s16 val16;
	u8 addr;

	switch (mask) {
	case IIO_CHAN_INFO_CALIBBIAS:
		val16 = val & ((1 << bits) - 1);
		if (val < -2048 || val >= 2048)
			return -EINVAL;

		addr = adis16260_addresses[chan->scan_index][0];
		return adis_write_reg_16(adis, addr, val16);
		return adis_write_reg_16(adis, addr, val);
	case IIO_CHAN_INFO_CALIBSCALE:
		val16 = val & ((1 << bits) - 1);
		if (val < 0 || val >= 4096)
			return -EINVAL;

		addr = adis16260_addresses[chan->scan_index][1];
		return adis_write_reg_16(adis, addr, val16);
		return adis_write_reg_16(adis, addr, val);
	}
	return -EINVAL;
}