]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
iio: imu: inv_icm42600: fix timestamps after suspend if sensor is on
authorJean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
Wed, 13 Nov 2024 20:25:45 +0000 (21:25 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 23 Jan 2025 16:16:02 +0000 (17:16 +0100)
commit 65a60a590142c54a3f3be11ff162db2d5b0e1e06 upstream.

Currently suspending while sensors are one will result in timestamping
continuing without gap at resume. It can work with monotonic clock but
not with other clocks. Fix that by resetting timestamping.

Fixes: ec74ae9fd37c ("iio: imu: inv_icm42600: add accurate timestamping")
Cc: stable@vger.kernel.org
Signed-off-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
Link: https://patch.msgid.link/20241113-inv_icm42600-fix-timestamps-after-suspend-v1-1-dfc77c394173@tdk.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/iio/imu/inv_icm42600/inv_icm42600_core.c

index f4f0dc213769ff2f70e475700a29482b62b63f27..9dec4ad38c0dc2c058b37578423ce134da35741b 100644 (file)
@@ -720,6 +720,8 @@ out_unlock:
 static int __maybe_unused inv_icm42600_resume(struct device *dev)
 {
        struct inv_icm42600_state *st = dev_get_drvdata(dev);
+       struct inv_icm42600_timestamp *gyro_ts = iio_priv(st->indio_gyro);
+       struct inv_icm42600_timestamp *accel_ts = iio_priv(st->indio_accel);
        int ret;
 
        mutex_lock(&st->lock);
@@ -740,9 +742,12 @@ static int __maybe_unused inv_icm42600_resume(struct device *dev)
                goto out_unlock;
 
        /* restore FIFO data streaming */
-       if (st->fifo.on)
+       if (st->fifo.on) {
+               inv_icm42600_timestamp_reset(gyro_ts);
+               inv_icm42600_timestamp_reset(accel_ts);
                ret = regmap_write(st->map, INV_ICM42600_REG_FIFO_CONFIG,
                                   INV_ICM42600_FIFO_CONFIG_STREAM);
+       }
 
 out_unlock:
        mutex_unlock(&st->lock);