[PATCH 11/18] staging:iio:accel:sca3000: Fix off by one error in axis due to IIO_NO_MOD

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxx>
---
 drivers/staging/iio/accel/sca3000.c | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/drivers/staging/iio/accel/sca3000.c b/drivers/staging/iio/accel/sca3000.c
index 24685a2f224e..e8f43df65142 100644
--- a/drivers/staging/iio/accel/sca3000.c
+++ b/drivers/staging/iio/accel/sca3000.c
@@ -933,16 +933,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->channel2 - IIO_MOD_X][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];
@@ -972,12 +973,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]) {
@@ -994,7 +994,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->channel2 - IIO_MOD_X][1],
+				     nonlinear);
 	mutex_unlock(&st->lock);
 
 	return ret;
@@ -1160,8 +1162,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);
 
@@ -1189,7 +1189,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->channel2 - IIO_MOD_X][2]);
 		}
 		break;
 	default:
@@ -1305,7 +1305,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->channel2 - IIO_MOD_X,
 						      state);
 		break;
 	default:
-- 
2.10.0

--
To unsubscribe from this list: send the line "unsubscribe linux-iio" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux