Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
[muen/linux.git] / drivers / input / evdev.c
index 0193dd4f045277a6eadee57f07bd3be2f205dbe7..94049fdc583cce8900bdaab9f69ac7f20ff7dd0e 100644 (file)
@@ -135,10 +135,7 @@ static void __evdev_flush_queue(struct evdev_client *client, unsigned int type)
                        continue;
                } else if (head != i) {
                        /* move entry to fill the gap */
-                       client->buffer[head].time = ev->time;
-                       client->buffer[head].type = ev->type;
-                       client->buffer[head].code = ev->code;
-                       client->buffer[head].value = ev->value;
+                       client->buffer[head] = *ev;
                }
 
                num++;
@@ -157,6 +154,7 @@ static void __evdev_queue_syn_dropped(struct evdev_client *client)
 {
        struct input_event ev;
        ktime_t time;
+       struct timespec64 ts;
 
        time = client->clk_type == EV_CLK_REAL ?
                        ktime_get_real() :
@@ -164,7 +162,9 @@ static void __evdev_queue_syn_dropped(struct evdev_client *client)
                                ktime_get() :
                                ktime_get_boottime();
 
-       ev.time = ktime_to_timeval(time);
+       ts = ktime_to_timespec64(time);
+       ev.input_event_sec = ts.tv_sec;
+       ev.input_event_usec = ts.tv_nsec / NSEC_PER_USEC;
        ev.type = EV_SYN;
        ev.code = SYN_DROPPED;
        ev.value = 0;
@@ -241,7 +241,10 @@ static void __pass_event(struct evdev_client *client,
                 */
                client->tail = (client->head - 2) & (client->bufsize - 1);
 
-               client->buffer[client->tail].time = event->time;
+               client->buffer[client->tail].input_event_sec =
+                                               event->input_event_sec;
+               client->buffer[client->tail].input_event_usec =
+                                               event->input_event_usec;
                client->buffer[client->tail].type = EV_SYN;
                client->buffer[client->tail].code = SYN_DROPPED;
                client->buffer[client->tail].value = 0;
@@ -262,12 +265,15 @@ static void evdev_pass_values(struct evdev_client *client,
        struct evdev *evdev = client->evdev;
        const struct input_value *v;
        struct input_event event;
+       struct timespec64 ts;
        bool wakeup = false;
 
        if (client->revoked)
                return;
 
-       event.time = ktime_to_timeval(ev_time[client->clk_type]);
+       ts = ktime_to_timespec64(ev_time[client->clk_type]);
+       event.input_event_sec = ts.tv_sec;
+       event.input_event_usec = ts.tv_nsec / NSEC_PER_USEC;
 
        /* Interrupts are disabled, just acquire the lock. */
        spin_lock(&client->buffer_lock);