iio: mag3110: Use scan_type when processing raw data
authorGwendal Grignou <gwendal@chromium.org>
Thu, 4 Nov 2021 08:24:10 +0000 (01:24 -0700)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Wed, 17 Nov 2021 17:51:43 +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-11-gwendal@chromium.org
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/magnetometer/mag3110.c

index c96415a..17c62d8 100644 (file)
@@ -291,7 +291,8 @@ static int mag3110_read_raw(struct iio_dev *indio_dev,
                        if (ret < 0)
                                goto release;
                        *val = sign_extend32(
-                               be16_to_cpu(buffer[chan->scan_index]), 15);
+                               be16_to_cpu(buffer[chan->scan_index]),
+                                           chan->scan_type.realbits - 1);
                        ret = IIO_VAL_INT;
                        break;
                case IIO_TEMP: /* in 1 C / LSB */
@@ -306,7 +307,8 @@ static int mag3110_read_raw(struct iio_dev *indio_dev,
                        mutex_unlock(&data->lock);
                        if (ret < 0)
                                goto release;
-                       *val = sign_extend32(ret, 7);
+                       *val = sign_extend32(ret,
+                                            chan->scan_type.realbits - 1);
                        ret = IIO_VAL_INT;
                        break;
                default: