summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathan Cameron <jic23@kernel.org>2016-10-08 17:39:11 +0100
committerJonathan Cameron <jic23@kernel.org>2016-10-23 19:34:03 +0100
commit74bdc940757608876a77cc0cdc2877b66e5dd47d (patch)
treeefeafa09cbd8a954cce9397ab8e2cc11f1be2240
parent085fe1b2e3df91a085d15a0bdc3f03cef6a42dab (diff)
downloadlinux-74bdc940757608876a77cc0cdc2877b66e5dd47d.tar.gz
linux-74bdc940757608876a77cc0cdc2877b66e5dd47d.tar.bz2
linux-74bdc940757608876a77cc0cdc2877b66e5dd47d.zip
staging:iio:accel:sca3000: Fix off by one error in axis due to IIO_NO_MOD
Given the introduction of IIO_NO_MOD was prior to the first submission prior to IIO entering staging this has been broken for a while. Signed-off-by: Jonathan Cameron <jic23@kernel.org> Reviewed-by: Lars-Peter Clausen <lars@metafoo.de>
-rw-r--r--drivers/staging/iio/accel/sca3000.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/drivers/staging/iio/accel/sca3000.c b/drivers/staging/iio/accel/sca3000.c
index 8aa6980406f1..b5dc40523bb5 100644
--- a/drivers/staging/iio/accel/sca3000.c
+++ b/drivers/staging/iio/accel/sca3000.c
@@ -934,16 +934,17 @@ static int sca3000_read_event_value(struct iio_dev *indio_dev,
{
int ret, i;
struct sca3000_state *st = iio_priv(indio_dev);
- int num = chan->channel2;
+
switch (info) {
case IIO_EV_INFO_VALUE:
mutex_lock(&st->lock);
- ret = sca3000_read_ctrl_reg(st, sca3000_addresses[num][1]);
+ ret = sca3000_read_ctrl_reg(st,
+ sca3000_addresses[chan->address][1]);
mutex_unlock(&st->lock);
if (ret < 0)
return ret;
*val = 0;
- if (num == 1)
+ if (chan->channel2 == IIO_MOD_Y)
for_each_set_bit(i, (unsigned long *)&ret,
ARRAY_SIZE(st->info->mot_det_mult_y))
*val += st->info->mot_det_mult_y[i];
@@ -973,12 +974,11 @@ static int sca3000_write_event_value(struct iio_dev *indio_dev,
int val, int val2)
{
struct sca3000_state *st = iio_priv(indio_dev);
- int num = chan->channel2;
int ret;
int i;
u8 nonlinear = 0;
- if (num == IIO_MOD_Y) {
+ if (chan->channel2 == IIO_MOD_Y) {
i = ARRAY_SIZE(st->info->mot_det_mult_y);
while (i > 0)
if (val >= st->info->mot_det_mult_y[--i]) {
@@ -995,7 +995,9 @@ static int sca3000_write_event_value(struct iio_dev *indio_dev,
}
mutex_lock(&st->lock);
- ret = sca3000_write_ctrl_reg(st, sca3000_addresses[num][1], nonlinear);
+ ret = sca3000_write_ctrl_reg(st,
+ sca3000_addresses[chan->address][1],
+ nonlinear);
mutex_unlock(&st->lock);
return ret;
@@ -1161,8 +1163,6 @@ static int sca3000_read_event_config(struct iio_dev *indio_dev,
{
struct sca3000_state *st = iio_priv(indio_dev);
int ret;
- int num = chan->channel2;
-
/* read current value of mode register */
mutex_lock(&st->lock);
@@ -1190,7 +1190,7 @@ static int sca3000_read_event_config(struct iio_dev *indio_dev,
if (ret < 0)
goto error_ret;
/* only supporting logical or's for now */
- ret = !!(ret & sca3000_addresses[num][2]);
+ ret = !!(ret & sca3000_addresses[chan->address][2]);
}
break;
default:
@@ -1306,7 +1306,8 @@ static int sca3000_write_event_config(struct iio_dev *indio_dev,
case IIO_MOD_X:
case IIO_MOD_Y:
case IIO_MOD_Z:
- ret = sca3000_motion_detect_set_state(indio_dev, chan->channel2,
+ ret = sca3000_motion_detect_set_state(indio_dev,
+ chan->address,
state);
break;
default: