Input: reset device timestamp on sync
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Thu, 29 Aug 2019 23:55:26 +0000 (16:55 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Fri, 6 Sep 2019 00:56:32 +0000 (17:56 -0700)
We need to reset input device's timestamp on input_sync(), otherwise
drivers not using input_set_timestamp() will end up with a stale
timestamp after their clients consume first input event.

Fixes: 3b51c44bd693 ("Input: allow drivers specify timestamp for input events")
Reported-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/input.c

index c08aa35..5508627 100644 (file)
@@ -397,6 +397,13 @@ static void input_handle_event(struct input_dev *dev,
                if (dev->num_vals >= 2)
                        input_pass_values(dev, dev->vals, dev->num_vals);
                dev->num_vals = 0;
+               /*
+                * Reset the timestamp on flush so we won't end up
+                * with a stale one. Note we only need to reset the
+                * monolithic one as we use its presence when deciding
+                * whether to generate a synthetic timestamp.
+                */
+               dev->timestamp[INPUT_CLK_MONO] = ktime_set(0, 0);
        } else if (dev->num_vals >= dev->max_vals - 2) {
                dev->vals[dev->num_vals++] = input_value_sync;
                input_pass_values(dev, dev->vals, dev->num_vals);