]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
iio: imu: inv_icm45600: fix temperature offset reporting
authorJean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
Thu, 18 Dec 2025 10:30:59 +0000 (11:30 +0100)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sun, 21 Dec 2025 18:40:56 +0000 (18:40 +0000)
Correct temperature computation is (raw + offset) * scale and not
apply scale and offset afterward.
Fix temperature offset reporting to the correct value and update
commentaries for the new computation.

Fixes: 27e072bc34d1 ("iio: imu: inv_icm45600: add IMU IIO gyroscope device")
Signed-off-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
Cc: stable@vger.kernel.org
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/imu/inv_icm45600/inv_icm45600_core.c

index ab1cb7b9dba435a3280e50ab77cd16e903c7816c..25bd9757a594d0180d7f53b49f959a49a50c64a9 100644 (file)
@@ -960,16 +960,17 @@ int inv_icm45600_temp_read_raw(struct iio_dev *indio_dev,
                return IIO_VAL_INT;
        /*
         * T°C = (temp / 128) + 25
-        * Tm°C = 1000 * ((temp * 100 / 12800) + 25)
-        * scale: 100000 / 13248 = 7.8125
-        * offset: 25000
+        * Tm°C = ((temp + 25 * 128) / 128)) * 1000
+        * Tm°C = (temp + 3200) * (1000 / 128)
+        * scale: 1000 / 128 = 7.8125
+        * offset: 3200
         */
        case IIO_CHAN_INFO_SCALE:
                *val = 7;
                *val2 = 812500;
                return IIO_VAL_INT_PLUS_MICRO;
        case IIO_CHAN_INFO_OFFSET:
-               *val = 25000;
+               *val = 3200;
                return IIO_VAL_INT;
        default:
                return -EINVAL;