Re: [PATCH] iio: imu: inv_icm42600: fix timestamp clock period by using lower value
From: Jonathan Cameron
Date: Sat Jul 11 2026 - 18:52:14 EST
On Mon, 6 Jul 2026 08:00:43 +0000
Jean-Baptiste Maneyrol <Jean-Baptiste.Maneyrol@xxxxxxx> wrote:
> >From: Jonathan Cameron <jic23@xxxxxxxxxx>
> >Sent: Friday, July 3, 2026 21:02
> >To: Jean-Baptiste Maneyrol via B4 Relay
> >Cc: Jean-Baptiste Maneyrol; David Lechner; Nuno Sá; Andy Shevchenko; linux-iio@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; stable@xxxxxxxxxxxxxxx
> >Subject: Re: [PATCH] iio: imu: inv_icm42600: fix timestamp clock period by using lower value
> >
> >On Tue, 23 Jun 2026 16: 22: 15 +0200 Jean-Baptiste Maneyrol via B4 Relay <devnull+jean-baptiste. maneyrol. tdk. com@ kernel. org> wrote: > From: Jean-Baptiste Maneyrol <jean-baptiste. maneyrol@ tdk. com> > Sorry for delay - I'm finally
> >ZjQcmQRYFpfptBannerStart
> >This Message Is From an External Sender
> >This message came from outside your organization.
> >
> >ZjQcmQRYFpfptBannerEnd
> >
> >On Tue, 23 Jun 2026 16:22:15 +0200
> >Jean-Baptiste Maneyrol via B4 Relay <devnull+jean-baptiste.maneyrol.tdk.com@xxxxxxxxxx> wrote:
> >
> >> From: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@xxxxxxx>
> >>
> >Sorry for delay - I'm finally getting back on top of my emails (for IIO anyway!)
> >
> >> Clock period value is used for computing periods of sampling. There is
> >> no need for it to be higher than the maximum odr, otherwise we are
> >> losing precision in the computation for nothing.
> >
> >Silly question - what are the user visible results of that precision loss?
> >
> >Less accurate time stamp estimates, or something else?
> >
> >Jonathan
> >
> Hello Jonathan,
>
> that's not a silly question, it will effectively lead to less accurate timestamps.
>
> We are measuring the delta time between 2 interrupts, and for abstracting the ODR
> we divide this measurement to go to the configured clock period. Then we compute timestamps by multiplying back this measured clock period. If we divide
> too much, we are losing precision. Since maximum ODR is 8kHz, there is no
> need to go further than this value. Internal chip clock is 32kHz, but maximum
> ODR is 8kHz.
>
Seems I applied this and forgot to say so. Anyhow, now upstream.
Jonathan
> Thanks,
> JB
>
> >
> >>
> >> Switch clock period value to maximum odr period (8kHz).
> >>
> >> Fixes: 0ecc363ccea7 ("iio: make invensense timestamp module generic")
> >> Cc: stable@xxxxxxxxxxxxxxx
> >> Signed-off-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@xxxxxxx>
> >
> >
> >> ---
> >> drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c | 4 ++--
> >> drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c | 4 ++--
> >> 2 files changed, 4 insertions(+), 4 deletions(-)
> >>
> >> diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c
> >> index 532d5fdffaf8..7df920ef3cf0 100644
> >> --- a/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c
> >> +++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c
> >> @@ -1170,10 +1170,10 @@ struct iio_dev *inv_icm42600_accel_init(struct inv_icm42600_state *st)
> >> accel_st->filter = INV_ICM42600_FILTER_AVG_16X;
> >>
> >> /*
> >> - * clock period is 32kHz (31250ns)
> >> + * clock period is 8kHz (125000ns)
> >> * jitter is +/- 2% (20 per mille)
> >> */
> >> - ts_chip.clock_period = 31250;
> >> + ts_chip.clock_period = 125000;
> >> ts_chip.jitter = 20;
> >> ts_chip.init_period = inv_icm42600_odr_to_period(st->conf.accel.odr);
> >> inv_sensors_timestamp_init(&accel_st->ts, &ts_chip);
> >> diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c
> >> index 11339ddf1da3..a18dcac93929 100644
> >> --- a/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c
> >> +++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c
> >> @@ -755,10 +755,10 @@ struct iio_dev *inv_icm42600_gyro_init(struct inv_icm42600_state *st)
> >> }
> >>
> >> /*
> >> - * clock period is 32kHz (31250ns)
> >> + * clock period is 8kHz (125000ns)
> >> * jitter is +/- 2% (20 per mille)
> >> */
> >> - ts_chip.clock_period = 31250;
> >> + ts_chip.clock_period = 125000;
> >> ts_chip.jitter = 20;
> >> ts_chip.init_period = inv_icm42600_odr_to_period(st->conf.accel.odr);
> >> inv_sensors_timestamp_init(&gyro_st->ts, &ts_chip);
> >>
> >> ---
> >> base-commit: cc746297b23e89bd5df9f91f3a0ca209e8991763
> >> change-id: 20260623-inv-icm42600-fix-timestamp-clock-period-931338a848c3
> >>
> >> Best regards,
> >> --
> >> Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@xxxxxxx>
> >>
> >