aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/iio/gyro
diff options
context:
space:
mode:
authorLars-Peter Clausen <lars@metafoo.de>2013-07-17 15:44:00 +0100
committerJonathan Cameron <jic23@kernel.org>2013-08-03 18:41:20 +0100
commit73149badce2dbd9483e1af7010c4fb6425500ec0 (patch)
tree8112d6ac48bce19d179dc3670f9ce1e3c5587a8a /drivers/staging/iio/gyro
parentstaging:iio:adis16260: Use sign_extend32() instead of open-coding it (diff)
downloadlinux-dev-73149badce2dbd9483e1af7010c4fb6425500ec0.tar.xz
linux-dev-73149badce2dbd9483e1af7010c4fb6425500ec0.zip
staging:iio:adis16260: Simplify calibscale and caliboffset reading
All channels for this device have the same number of bits for calibscale and caliboffset, there is no need to determine it dynamically based on the channel type. Also there is no locking required since adis_read_reg_16() will take care of proper locking on its own. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Diffstat (limited to 'drivers/staging/iio/gyro')
-rw-r--r--drivers/staging/iio/gyro/adis16260_core.c31
1 files changed, 5 insertions, 26 deletions
diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
index f060452f367e..c70094f6afce 100644
--- a/drivers/staging/iio/gyro/adis16260_core.c
+++ b/drivers/staging/iio/gyro/adis16260_core.c
@@ -222,7 +222,6 @@ static int adis16260_read_raw(struct iio_dev *indio_dev,
{
struct adis *adis = iio_priv(indio_dev);
int ret;
- int bits;
u8 addr;
s16 val16;
@@ -263,40 +262,20 @@ static int adis16260_read_raw(struct iio_dev *indio_dev,
*val = 250000 / 1453; /* 25 C = 0x00 */
return IIO_VAL_INT;
case IIO_CHAN_INFO_CALIBBIAS:
- switch (chan->type) {
- case IIO_ANGL_VEL:
- bits = 12;
- break;
- default:
- return -EINVAL;
- }
- mutex_lock(&indio_dev->mlock);
addr = adis16260_addresses[chan->scan_index][0];
ret = adis_read_reg_16(adis, addr, &val16);
- if (ret) {
- mutex_unlock(&indio_dev->mlock);
+ if (ret)
return ret;
- }
- *val = sign_extend32(val16, bits - 1);
- mutex_unlock(&indio_dev->mlock);
+
+ *val = sign_extend32(val16, 11);
return IIO_VAL_INT;
case IIO_CHAN_INFO_CALIBSCALE:
- switch (chan->type) {
- case IIO_ANGL_VEL:
- bits = 12;
- break;
- default:
- return -EINVAL;
- }
- mutex_lock(&indio_dev->mlock);
addr = adis16260_addresses[chan->scan_index][1];
ret = adis_read_reg_16(adis, addr, &val16);
- if (ret) {
- mutex_unlock(&indio_dev->mlock);
+ if (ret)
return ret;
- }
+
*val = val16;
- mutex_unlock(&indio_dev->mlock);
return IIO_VAL_INT;
}
return -EINVAL;