Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 82fde1a9 authored by Abhilash Jindal's avatar Abhilash Jindal Committed by Mauro Carvalho Chehab
Browse files

[media] bt8xxx: Use monotonic time



Wall time obtained from do_gettimeofday is susceptible to sudden jumps due to
user setting the time or due to NTP.

Monotonic time is constantly increasing time better suited for comparing two
timestamps.

Signed-off-by: default avatarAbhilash Jindal <klock.android@gmail.com>
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent e4d45dd8
Loading
Loading
Loading
Loading
+8 −13
Original line number Diff line number Diff line
@@ -194,21 +194,18 @@ static u32 bttv_rc5_decode(unsigned int code)
static void bttv_rc5_timer_end(unsigned long data)
{
	struct bttv_ir *ir = (struct bttv_ir *)data;
	struct timeval tv;
	ktime_t tv;
	u32 gap, rc5, scancode;
	u8 toggle, command, system;

	/* get time */
	do_gettimeofday(&tv);
	tv = ktime_get();

	gap = ktime_to_us(ktime_sub(tv, ir->base_time));
	/* avoid overflow with gap >1s */
	if (tv.tv_sec - ir->base_time.tv_sec > 1) {
	if (gap > USEC_PER_SEC) {
		gap = 200000;
	} else {
		gap = 1000000 * (tv.tv_sec - ir->base_time.tv_sec) +
		    tv.tv_usec - ir->base_time.tv_usec;
	}

	/* signal we're ready to start a new code */
	ir->active = false;

@@ -249,7 +246,7 @@ static void bttv_rc5_timer_end(unsigned long data)
static int bttv_rc5_irq(struct bttv *btv)
{
	struct bttv_ir *ir = btv->remote;
	struct timeval tv;
	ktime_t tv;
	u32 gpio;
	u32 gap;
	unsigned long current_jiffies;
@@ -259,14 +256,12 @@ static int bttv_rc5_irq(struct bttv *btv)

	/* get time of bit */
	current_jiffies = jiffies;
	do_gettimeofday(&tv);
	tv = ktime_get();

	gap = ktime_to_us(ktime_sub(tv, ir->base_time));
	/* avoid overflow with gap >1s */
	if (tv.tv_sec - ir->base_time.tv_sec > 1) {
	if (gap > USEC_PER_SEC) {
		gap = 200000;
	} else {
		gap = 1000000 * (tv.tv_sec - ir->base_time.tv_sec) +
		    tv.tv_usec - ir->base_time.tv_usec;
	}

	dprintk("RC5 IRQ: gap %d us for %s\n",
+1 −1
Original line number Diff line number Diff line
@@ -140,7 +140,7 @@ struct bttv_ir {
	bool			rc5_gpio;   /* Is RC5 legacy GPIO enabled? */
	u32                     last_bit;   /* last raw bit seen */
	u32                     code;       /* raw code under construction */
	struct timeval          base_time;  /* time of last seen code */
	ktime_t          				base_time;  /* time of last seen code */
	bool                    active;     /* building raw code */
};