From: Jean-Baptiste Maneyrol <Jean-Baptiste.Maneyrol@tdk.com>
To: Jonathan Cameron <jonathan.cameron@oss.qualcomm.com>,
Jean-Baptiste Maneyrol via B4 Relay
<devnull+jean-baptiste.maneyrol.tdk.com@kernel.org>
Cc: "David Lechner" <dlechner@baylibre.com>,
"Nuno Sá" <nuno.sa@analog.com>,
"Andy Shevchenko" <andy@kernel.org>,
"linux-iio@vger.kernel.org" <linux-iio@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 1/2] iio: invensense: better timestamp alignment when using watermark
Date: Mon, 20 Jul 2026 10:17:41 +0000 [thread overview]
Message-ID: <BE1P281MB14268198103C642AF19D1425CEC32@BE1P281MB1426.DEUP281.PROD.OUTLOOK.COM> (raw)
In-Reply-To: <20260718021401.7e5f54d3@jic23-huawei>
>
>________________________________________
>From: Jonathan Cameron <jonathan.cameron@oss.qualcomm.com>
>Sent: Saturday, July 18, 2026 03:14
>To: Jean-Baptiste Maneyrol via B4 Relay
>Cc: Jean-Baptiste Maneyrol; David Lechner; Nuno Sá; Andy Shevchenko; linux-iio@vger.kernel.org; linux-kernel@vger.kernel.org
>Subject: Re: [PATCH 1/2] iio: invensense: better timestamp alignment when using watermark
>
>On Fri, 17 Jul 2026 14: 39: 40 +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> > > Current interrupt timestamp
>ZjQcmQRYFpfptBannerStart
>This Message Is From an External Sender
>This message came from outside your organization.
>
>ZjQcmQRYFpfptBannerEnd
>
>On Fri, 17 Jul 2026 14:39:40 +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>
>>
>> Current interrupt timestamp alignment only change the next coming
>> timestamp. For watermark where we have a batch of samples per
>> interrupt, it doesn't manage to align timestamp since modification
>> is limited because of jitter.
>I've read this a few times and I'm not entirely following the meaning.
>Please rewrite. Intent might be something close to:
>
>"Current interrupt timestamp alignment only changes the final timestamp.
>When the watermark is in use, we have a batch of samples for each interrupt.
>The current code doesn't manage to align the timestamp because the
>jitter is too high.
>
>Instead modify the estimated inter interrupt period and use that
>to adjust the timestamp alignment over the batch in a linear fashion.
>"
>
>I'm not entirely sure however!
>
Hello Jonathan,
you're explanation is right. I will change the commit message and use your
rewording.
>
>>
>> Implement a better version that instead modify the period to align
>> to interrupt timestamp. Period is now computed by align timestamp
>> if interrupt interval is valid, or we use the computed estimation.
>>
>> Signed-off-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
>> ---
>> .../iio/common/inv_sensors/inv_sensors_timestamp.c | 55 ++++++++--------------
>> 1 file changed, 20 insertions(+), 35 deletions(-)
>>
>> diff --git a/drivers/iio/common/inv_sensors/inv_sensors_timestamp.c b/drivers/iio/common/inv_sensors/inv_sensors_timestamp.c
>> index e0b10366ed2b..2c89e0edc87d 100644
>> --- a/drivers/iio/common/inv_sensors/inv_sensors_timestamp.c
>> +++ b/drivers/iio/common/inv_sensors/inv_sensors_timestamp.c
>> @@ -10,9 +10,7 @@
>>
>> #include <linux/iio/common/inv_sensors_timestamp.h>
>>
>> -/* compute jitter, min and max following jitter in per mille */
>> -#define INV_SENSORS_TIMESTAMP_JITTER(_val, _jitter) \
>> - (div_s64((_val) * (_jitter), 1000))
>> +/* compute min and max following jitter in per mille */
>> #define INV_SENSORS_TIMESTAMP_MIN(_val, _jitter) \
>> (((_val) * (1000 - (_jitter))) / 1000)
>> #define INV_SENSORS_TIMESTAMP_MAX(_val, _jitter) \
>> @@ -102,34 +100,22 @@ static bool inv_update_chip_period(struct inv_sensors_timestamp *ts,
>> /* update chip internal period estimation */
>> new_chip_period = period / ts->mult;
>> inv_update_acc(&ts->chip_period, new_chip_period);
>> - ts->period = ts->mult * ts->chip_period.val;
>>
>> return true;
>> }
>>
>> -static void inv_align_timestamp_it(struct inv_sensors_timestamp *ts)
>> +static uint32_t inv_align_timestamp_it(struct inv_sensors_timestamp *ts,
>> + unsigned int sample_nb)
>> {
>> - const int64_t period_min = (int64_t)ts->min_period * ts->mult;
>> - const int64_t period_max = (int64_t)ts->max_period * ts->mult;
>> - int64_t add_max, sub_max;
>> - int64_t delta, jitter;
>> - int64_t adjust;
>> -
>> - /* delta time between last sample and last interrupt */
>> - delta = ts->it.lo - ts->timestamp;
>> -
>> - /* adjust timestamp while respecting jitter */
>> - add_max = period_max - (int64_t)ts->period;
>> - sub_max = period_min - (int64_t)ts->period;
>> - jitter = INV_SENSORS_TIMESTAMP_JITTER((int64_t)ts->period, ts->chip.jitter);
>> - if (delta > jitter)
>> - adjust = add_max;
>> - else if (delta < -jitter)
>> - adjust = sub_max;
>> - else
>> - adjust = 0;
>> + const uint64_t period_min = (uint64_t)ts->min_period * ts->mult;
>> + const uint64_t period_max = (uint64_t)ts->max_period * ts->mult;
>> + uint32_t new_period;
>>
>> - ts->timestamp += adjust;
>> + /* compute new period aligning last timestamp with interrupt timestamp */
>> + new_period = div_s64(ts->it.up - ts->timestamp, sample_nb);
>> +
>> + /* ensure that period never overflows the jitter */
>> + return clamp(new_period, period_min, period_max);
>> }
>>
>> void inv_sensors_timestamp_interrupt(struct inv_sensors_timestamp *ts,
>> @@ -143,6 +129,13 @@ void inv_sensors_timestamp_interrupt(struct inv_sensors_timestamp *ts,
>> if (sample_nb == 0)
>> return;
>>
>> + /* no previous data, compute theoretical value from interrupt */
>> + if (ts->timestamp == 0) {
>> + /* elapsed time: sensor period * sensor samples number */
>> + interval = (int64_t)ts->period * (int64_t)sample_nb;
>> + ts->timestamp = timestamp - interval;
>> + }
>> +
>> /* update interrupt timestamp and compute chip and sensor periods */
>> it = &ts->it;
>> it->lo = it->up;
>> @@ -154,17 +147,9 @@ void inv_sensors_timestamp_interrupt(struct inv_sensors_timestamp *ts,
>> valid = inv_update_chip_period(ts, period);
>> }
>>
>> - /* no previous data, compute theoretical value from interrupt */
>> - if (ts->timestamp == 0) {
>> - /* elapsed time: sensor period * sensor samples number */
>> - interval = (int64_t)ts->period * (int64_t)sample_nb;
>> - ts->timestamp = it->up - interval;
>> - return;
>> - }
>> -
>> /* if interrupt interval is valid, sync with interrupt timestamp */
>> - if (valid)
>> - inv_align_timestamp_it(ts);
>> + ts->period = valid ? inv_align_timestamp_it(ts, sample_nb) :
>> + ts->mult * ts->chip_period.val;
>> }
>> EXPORT_SYMBOL_NS_GPL(inv_sensors_timestamp_interrupt, "IIO_INV_SENSORS_TIMESTAMP");
>>
>>
Thanks,
JB
next prev parent reply other threads:[~2026-07-20 10:17 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-17 12:39 [PATCH 0/2] iio: common: improve InvenSense sample timestamping Jean-Baptiste Maneyrol via B4 Relay
2026-07-17 12:39 ` [PATCH 1/2] iio: invensense: better timestamp alignment when using watermark Jean-Baptiste Maneyrol via B4 Relay
2026-07-17 18:06 ` Andy Shevchenko
2026-07-20 10:15 ` Jean-Baptiste Maneyrol
2026-07-18 1:14 ` Jonathan Cameron
2026-07-20 10:17 ` Jean-Baptiste Maneyrol [this message]
2026-07-17 12:39 ` [PATCH 2/2] iio: invensense: improve period measurement by using a longer delay Jean-Baptiste Maneyrol via B4 Relay
2026-07-17 18:09 ` Andy Shevchenko
2026-07-20 10:19 ` Jean-Baptiste Maneyrol
2026-07-18 1:25 ` Jonathan Cameron
2026-07-20 10:23 ` Jean-Baptiste Maneyrol
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=BE1P281MB14268198103C642AF19D1425CEC32@BE1P281MB1426.DEUP281.PROD.OUTLOOK.COM \
--to=jean-baptiste.maneyrol@tdk.com \
--cc=andy@kernel.org \
--cc=devnull+jean-baptiste.maneyrol.tdk.com@kernel.org \
--cc=dlechner@baylibre.com \
--cc=jonathan.cameron@oss.qualcomm.com \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nuno.sa@analog.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®