mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-04 04:04:19 +00:00
iio: invensense: fix interrupt timestamp alignment
Restrict interrupt timestamp alignment for not overflowing max/min
period thresholds.
Fixes: 0ecc363cce
("iio: make invensense timestamp module generic")
Cc: stable@vger.kernel.org
Signed-off-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
Link: https://lore.kernel.org/r/20240426135814.141837-1-inv.git-commit@tdk.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
561e2e3e90
commit
0340dc4c82
@ -101,6 +101,9 @@ static bool inv_update_chip_period(struct inv_sensors_timestamp *ts,
|
|||||||
|
|
||||||
static void inv_align_timestamp_it(struct inv_sensors_timestamp *ts)
|
static void inv_align_timestamp_it(struct inv_sensors_timestamp *ts)
|
||||||
{
|
{
|
||||||
|
const int64_t period_min = ts->min_period * ts->mult;
|
||||||
|
const int64_t period_max = ts->max_period * ts->mult;
|
||||||
|
int64_t add_max, sub_max;
|
||||||
int64_t delta, jitter;
|
int64_t delta, jitter;
|
||||||
int64_t adjust;
|
int64_t adjust;
|
||||||
|
|
||||||
@ -108,11 +111,13 @@ static void inv_align_timestamp_it(struct inv_sensors_timestamp *ts)
|
|||||||
delta = ts->it.lo - ts->timestamp;
|
delta = ts->it.lo - ts->timestamp;
|
||||||
|
|
||||||
/* adjust timestamp while respecting jitter */
|
/* 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);
|
jitter = INV_SENSORS_TIMESTAMP_JITTER((int64_t)ts->period, ts->chip.jitter);
|
||||||
if (delta > jitter)
|
if (delta > jitter)
|
||||||
adjust = jitter;
|
adjust = add_max;
|
||||||
else if (delta < -jitter)
|
else if (delta < -jitter)
|
||||||
adjust = -jitter;
|
adjust = sub_max;
|
||||||
else
|
else
|
||||||
adjust = 0;
|
adjust = 0;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user