Skip to contentSkip to conversation

staging:iio:accel: use sign extend function avoiding code duplication

PATCH In review Karim Eshapa 2 participants 2 messages Jun 10, 2018

Subsystems (4)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 staging:iio:accel: use sign extend function avoiding code duplication

Use sign_extend32 kernel function instead of code duplication. This function is also safe for 16 bits.

---
 drivers/staging/iio/accel/adis16201.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)
drivers/staging/iio/accel/adis16201.c +1 -3
index 0fae8aaf1cf4..fe4494e65395 100644
@@ -227,9 +227,7 @@ static int adis16201_read_raw(struct iio_dev *indio_dev,
 		ret = adis_read_reg_16(st, addr, &val16);
 		if (ret)
 			return ret;
-		val16 &= (1 << bits) - 1;
-		val16 = (s16)(val16 << (16 - bits)) >> (16 - bits);
-		*val = val16;
+		*val = sign_extend32(val16, bits);
 		return IIO_VAL_INT;
 	}
 
Signature · 1 line
2.17.1
#1 lore raw
Quoted 2 lines · Karim Eshapa

Use sign_extend32 kernel function instead of code duplication. This function is also safe for 16 bits.

Firstly:

This file is not in staging anymore.
Please use the -next tree for patches.

drivers/staging/iio/accel/adis16201.c

Quoted 1 line
drivers/staging/iio/accel/adis16201.c +0 -0

[]

drivers/staging/iio/accel/adis16201.c static int adis16201_read_raw(struct iio_dev *indio_dev, · line 232

Quoted 10 lines
drivers/staging/iio/accel/adis16201.c +1 -3
@@ -227,9 +227,7 @@ static int adis16201_read_raw(struct iio_dev *indio_dev,
 		ret = adis_read_reg_16(st, addr, &val16);
 		if (ret)
 			return ret;
-		val16 &= (1 << bits) - 1;
-		val16 = (s16)(val16 << (16 - bits)) >> (16 - bits);
-		*val = val16;
+		*val = sign_extend32(val16, bits);
 		return IIO_VAL_INT;
 	}

Secondly:

A similar patch with a different bits value was
already applied.

Please verify the appropriate bits value.

commit e7f3bfb7eb7d9307c0c157f82fceb228f0aec1d9

Author: Himanshu Jha <[email protected]>
Date:   Sat Mar 17 01:36:23 2018 +0530

Staging: iio: accel: adis16201: Use sign_extend32 function

Use sign_extned32() for 32 bit sign extending rather than hard coding.

---
 drivers/staging/iio/accel/adis16201.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)
drivers/staging/iio/accel/adis16201.c +2 -3
index 87ad3d421c12..526dde481f84 100644
@@ -173,9 +173,8 @@ static int adis16201_read_raw(struct iio_dev *indio_dev,
 		ret = adis_read_reg_16(st, addr, &val16);
 		if (ret)
 			return ret;
-		val16 &= (1 << bits) - 1;
-		val16 = (s16)(val16 << (16 - bits)) >> (16 - bits);
-		*val = val16;
+
+		*val = sign_extend32(val16, bits - 1);
                return IIO_VAL_INT;
        }