All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] iio: imu: inv_mpu6050: improve missing timestamp handling
@ 2018-03-24  0:02 Martin Kelly
  2018-03-24 12:35 ` How to handle missing timestamps? (was Re: [PATCH] iio: imu: inv_mpu6050: improve missing timestamp handling) Jonathan Cameron
  0 siblings, 1 reply; 8+ messages in thread
From: Martin Kelly @ 2018-03-24  0:02 UTC (permalink / raw)
  To: linux-iio; +Cc: Jonathan Cameron, Jean-Baptiste Maneyrol, Martin Kelly

When interrupts are generated at a slower rate than the FIFO queue fills
up, we will have fewer timestamps than samples. Currently, we fill in 0
for any unmatched timestamps. However, this is very confusing for
userspace, which does not expect discontinuities in timestamps and
must somehow work around the issue.

Improve the situation by using the most recent timestamp when a
timestamp is missing. Although this guess is not perfectly accurate, it
is still close to the correct timestamp and won't result in the
confusion caused by using 0.

Signed-off-by: Martin Kelly <mkelly@xevo.com>
---
 drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c
index ff81c6aa009d..a982037d5dad 100644
--- a/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c
+++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c
@@ -126,6 +126,7 @@ irqreturn_t inv_mpu6050_read_fifo(int irq, void *p)
 	int result;
 	u8 data[INV_MPU6050_OUTPUT_DATA_SIZE];
 	u16 fifo_count;
+	s64 last_timestamp;
 	s64 timestamp;
 
 	mutex_lock(&st->lock);
@@ -159,6 +160,7 @@ irqreturn_t inv_mpu6050_read_fifo(int irq, void *p)
 	if (kfifo_len(&st->timestamps) >
 	    fifo_count / bytes_per_datum + INV_MPU6050_TIME_STAMP_TOR)
 		goto flush_fifo;
+	last_timestamp = 0;
 	while (fifo_count >= bytes_per_datum) {
 		result = regmap_bulk_read(st->map, st->reg->fifo_r_w,
 					  data, bytes_per_datum);
@@ -166,9 +168,11 @@ irqreturn_t inv_mpu6050_read_fifo(int irq, void *p)
 			goto flush_fifo;
 
 		result = kfifo_out(&st->timestamps, &timestamp, 1);
-		/* when there is no timestamp, put timestamp as 0 */
+		/* when there is no timestamp, just use the last one we saw */
 		if (result == 0)
-			timestamp = 0;
+			timestamp = last_timestamp;
+		else
+			last_timestamp = timestamp;
 
 		result = iio_push_to_buffers_with_timestamp(indio_dev, data,
 							    timestamp);
-- 
2.11.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2018-03-28 16:41 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-24  0:02 [PATCH] iio: imu: inv_mpu6050: improve missing timestamp handling Martin Kelly
2018-03-24 12:35 ` How to handle missing timestamps? (was Re: [PATCH] iio: imu: inv_mpu6050: improve missing timestamp handling) Jonathan Cameron
2018-03-26 14:17   ` Jean-Baptiste Maneyrol
     [not found]   ` <7c1718f2fc324eb6b959257a80e136cdCY4PR1201MB0184E4503B2B1EEA7F24C41DC4AD0@CY4PR1201MB0184.namprd12.prod.outlook.com>
2018-03-26 17:43     ` Martin Kelly
2018-03-27  8:47       ` Jean-Baptiste Maneyrol
2018-03-28  0:34         ` Martin Kelly
2018-03-28 15:13           ` Jean-Baptiste Maneyrol
2018-03-28 16:40             ` Martin Kelly

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.