iio: bma220: Use scan_type when processing raw data
authorGwendal Grignou <gwendal@chromium.org>
Thu, 4 Nov 2021 08:24:01 +0000 (01:24 -0700)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Wed, 17 Nov 2021 17:51:40 +0000 (17:51 +0000)
Use channel definition as root of trust and replace constant
when reading elements directly using the raw sysfs attributes.

Signed-off-by: Gwendal Grignou <gwendal@chromium.org>
Link: https://lore.kernel.org/r/20211104082413.3681212-2-gwendal@chromium.org
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/accel/bma220_spi.c

index bc4c626e454d338a02ff420674d5c617d5c51852..74024d7ce5ac234aa9f1863268163db54eab417b 100644 (file)
@@ -27,7 +27,6 @@
 #define BMA220_CHIP_ID                         0xDD
 #define BMA220_READ_MASK                       BIT(7)
 #define BMA220_RANGE_MASK                      GENMASK(1, 0)
-#define BMA220_DATA_SHIFT                      2
 #define BMA220_SUSPEND_SLEEP                   0xFF
 #define BMA220_SUSPEND_WAKE                    0x00
 
@@ -45,7 +44,7 @@
                .sign = 's',                                            \
                .realbits = 6,                                          \
                .storagebits = 8,                                       \
-               .shift = BMA220_DATA_SHIFT,                             \
+               .shift = 2,                                             \
                .endianness = IIO_CPU,                                  \
        },                                                              \
 }
@@ -125,7 +124,8 @@ static int bma220_read_raw(struct iio_dev *indio_dev,
                ret = bma220_read_reg(data->spi_device, chan->address);
                if (ret < 0)
                        return -EINVAL;
-               *val = sign_extend32(ret >> BMA220_DATA_SHIFT, 5);
+               *val = sign_extend32(ret >> chan->scan_type.shift,
+                                    chan->scan_type.realbits - 1);
                return IIO_VAL_INT;
        case IIO_CHAN_INFO_SCALE:
                ret = bma220_read_reg(data->spi_device, BMA220_REG_RANGE);