+++ /dev/null
-From 09eeff8c90a82e7aa9ff215320d558c1147982f6 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sat, 30 Nov 2019 19:59:29 -0800
-Subject: [PATCH] Fix build on 32bit arches with 64bit time_t
-
-time element is deprecated on new input_event structure in kernel's
-input.h [1]
-
-[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit?id=152194fe9c3f
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
-[Upstream status: https://github.com/libts/tslib/commit/a7a39a67f9a7f7fab9765d412ab42869a5c5c858]
----
- plugins/input-raw.c | 59 +++++++++++++++++++++++++++-------------
- tools/ts_uinput.c | 66 ++++++++++++++++++++++++++++++---------------
- 2 files changed, 85 insertions(+), 40 deletions(-)
-
-diff --git a/plugins/input-raw.c b/plugins/input-raw.c
-index 64f0156..f030836 100644
---- a/plugins/input-raw.c
-+++ b/plugins/input-raw.c
-@@ -40,6 +40,11 @@
- # include <linux/input.h>
- #endif
-
-+#ifndef input_event_sec
-+#define input_event_sec time.tv_sec
-+#define input_event_usec time.tv_usec
-+#endif
-+
- #ifndef EV_SYN /* 2.4 kernel headers */
- # define EV_SYN 0x00
- #endif
-@@ -384,7 +389,8 @@ static int ts_input_read(struct tslib_module_info *inf,
- samp->y = i->current_y;
- samp->pressure = i->current_p;
- }
-- samp->tv = ev.time;
-+ samp->tv.tv_sec = ev.input_event_sec;
-+ samp->tv.tv_usec = ev.input_event_usec;
- #ifdef DEBUG
- fprintf(stderr,
- "RAW---------------------> %d %d %d %ld.%ld\n",
-@@ -519,7 +525,8 @@ static int ts_input_read(struct tslib_module_info *inf,
- samp->pressure = i->current_p = ev.value;
- break;
- }
-- samp->tv = ev.time;
-+ samp->tv.tv_sec = ev.input_event_sec;
-+ samp->tv.tv_usec = ev.input_event_usec;
- #ifdef DEBUG
- fprintf(stderr,
- "RAW---------------------------> %d %d %d\n",
-@@ -536,7 +543,8 @@ static int ts_input_read(struct tslib_module_info *inf,
- samp->x = 0;
- samp->y = 0;
- samp->pressure = 0;
-- samp->tv = ev.time;
-+ samp->tv.tv_sec = ev.input_event_sec;
-+ samp->tv.tv_usec = ev.input_event_usec;
- samp++;
- total++;
- }
-@@ -651,7 +659,8 @@ static int ts_input_read_mt(struct tslib_module_info *inf,
- switch (i->ev[it].code) {
- case BTN_TOUCH:
- i->buf[total][i->slot].pen_down = i->ev[it].value;
-- i->buf[total][i->slot].tv = i->ev[it].time;
-+ i->buf[total][i->slot].tv.tv_sec = i->ev[it].input_event_sec;
-+ i->buf[total][i->slot].tv.tv_usec = i->ev[it].input_event_usec;
- i->buf[total][i->slot].valid |= TSLIB_MT_VALID;
- if (i->ev[it].value == 0)
- pen_up = 1;
-@@ -751,7 +760,8 @@ static int ts_input_read_mt(struct tslib_module_info *inf,
- // fall through
- case ABS_MT_POSITION_X:
- i->buf[total][i->slot].x = i->ev[it].value;
-- i->buf[total][i->slot].tv = i->ev[it].time;
-+ i->buf[total][i->slot].tv.tv_sec = i->ev[it].input_event_sec;
-+ i->buf[total][i->slot].tv.tv_usec = i->ev[it].input_event_usec;
- i->buf[total][i->slot].valid |= TSLIB_MT_VALID;
- break;
- case ABS_Y:
-@@ -760,7 +770,8 @@ static int ts_input_read_mt(struct tslib_module_info *inf,
- // fall through
- case ABS_MT_POSITION_Y:
- i->buf[total][i->slot].y = i->ev[it].value;
-- i->buf[total][i->slot].tv = i->ev[it].time;
-+ i->buf[total][i->slot].tv.tv_sec = i->ev[it].input_event_sec;
-+ i->buf[total][i->slot].tv.tv_usec = i->ev[it].input_event_usec;
- i->buf[total][i->slot].valid |= TSLIB_MT_VALID;
- break;
- case ABS_PRESSURE:
-@@ -769,12 +780,14 @@ static int ts_input_read_mt(struct tslib_module_info *inf,
- // fall through
- case ABS_MT_PRESSURE:
- i->buf[total][i->slot].pressure = i->ev[it].value;
-- i->buf[total][i->slot].tv = i->ev[it].time;
-+ i->buf[total][i->slot].tv.tv_sec = i->ev[it].input_event_sec;
-+ i->buf[total][i->slot].tv.tv_usec = i->ev[it].input_event_usec;
- i->buf[total][i->slot].valid |= TSLIB_MT_VALID;
- break;
- case ABS_MT_TOOL_X:
- i->buf[total][i->slot].tool_x = i->ev[it].value;
-- i->buf[total][i->slot].tv = i->ev[it].time;
-+ i->buf[total][i->slot].tv.tv_sec = i->ev[it].input_event_sec;
-+ i->buf[total][i->slot].tv.tv_usec = i->ev[it].input_event_usec;
- i->buf[total][i->slot].valid |= TSLIB_MT_VALID;
- /* for future use
- * i->buf[total][i->slot].valid |= TSLIB_MT_VALID_TOOL;
-@@ -782,7 +795,8 @@ static int ts_input_read_mt(struct tslib_module_info *inf,
- break;
- case ABS_MT_TOOL_Y:
- i->buf[total][i->slot].tool_y = i->ev[it].value;
-- i->buf[total][i->slot].tv = i->ev[it].time;
-+ i->buf[total][i->slot].tv.tv_sec = i->ev[it].input_event_sec;
-+ i->buf[total][i->slot].tv.tv_usec = i->ev[it].input_event_usec;
- i->buf[total][i->slot].valid |= TSLIB_MT_VALID;
- /* for future use
- * i->buf[total][i->slot].valid |= TSLIB_MT_VALID_TOOL;
-@@ -790,7 +804,8 @@ static int ts_input_read_mt(struct tslib_module_info *inf,
- break;
- case ABS_MT_TOOL_TYPE:
- i->buf[total][i->slot].tool_type = i->ev[it].value;
-- i->buf[total][i->slot].tv = i->ev[it].time;
-+ i->buf[total][i->slot].tv.tv_sec = i->ev[it].input_event_sec;
-+ i->buf[total][i->slot].tv.tv_usec = i->ev[it].input_event_usec;
- i->buf[total][i->slot].valid |= TSLIB_MT_VALID;
- /* for future use
- * i->buf[total][i->slot].valid |= TSLIB_MT_VALID_TOOL;
-@@ -798,12 +813,14 @@ static int ts_input_read_mt(struct tslib_module_info *inf,
- break;
- case ABS_MT_ORIENTATION:
- i->buf[total][i->slot].orientation = i->ev[it].value;
-- i->buf[total][i->slot].tv = i->ev[it].time;
-+ i->buf[total][i->slot].tv.tv_sec = i->ev[it].input_event_sec;
-+ i->buf[total][i->slot].tv.tv_usec = i->ev[it].input_event_usec;
- i->buf[total][i->slot].valid |= TSLIB_MT_VALID;
- break;
- case ABS_MT_DISTANCE:
- i->buf[total][i->slot].distance = i->ev[it].value;
-- i->buf[total][i->slot].tv = i->ev[it].time;
-+ i->buf[total][i->slot].tv.tv_sec = i->ev[it].input_event_sec;
-+ i->buf[total][i->slot].tv.tv_usec = i->ev[it].input_event_usec;
- i->buf[total][i->slot].valid |= TSLIB_MT_VALID;
-
- if (i->special_device == EGALAX_VERSION_210) {
-@@ -816,34 +833,40 @@ static int ts_input_read_mt(struct tslib_module_info *inf,
- break;
- case ABS_MT_BLOB_ID:
- i->buf[total][i->slot].blob_id = i->ev[it].value;
-- i->buf[total][i->slot].tv = i->ev[it].time;
-+ i->buf[total][i->slot].tv.tv_sec = i->ev[it].input_event_sec;
-+ i->buf[total][i->slot].tv.tv_usec = i->ev[it].input_event_usec;
- i->buf[total][i->slot].valid |= TSLIB_MT_VALID;
- break;
- case ABS_MT_TOUCH_MAJOR:
- i->buf[total][i->slot].touch_major = i->ev[it].value;
-- i->buf[total][i->slot].tv = i->ev[it].time;
-+ i->buf[total][i->slot].tv.tv_sec = i->ev[it].input_event_sec;
-+ i->buf[total][i->slot].tv.tv_usec = i->ev[it].input_event_usec;
- i->buf[total][i->slot].valid |= TSLIB_MT_VALID;
- if (i->ev[it].value == 0)
- i->buf[total][i->slot].pressure = 0;
- break;
- case ABS_MT_WIDTH_MAJOR:
- i->buf[total][i->slot].width_major = i->ev[it].value;
-- i->buf[total][i->slot].tv = i->ev[it].time;
-+ i->buf[total][i->slot].tv.tv_sec = i->ev[it].input_event_sec;
-+ i->buf[total][i->slot].tv.tv_usec = i->ev[it].input_event_usec;
- i->buf[total][i->slot].valid |= TSLIB_MT_VALID;
- break;
- case ABS_MT_TOUCH_MINOR:
- i->buf[total][i->slot].touch_minor = i->ev[it].value;
-- i->buf[total][i->slot].tv = i->ev[it].time;
-+ i->buf[total][i->slot].tv.tv_sec = i->ev[it].input_event_sec;
-+ i->buf[total][i->slot].tv.tv_usec = i->ev[it].input_event_usec;
- i->buf[total][i->slot].valid |= TSLIB_MT_VALID;
- break;
- case ABS_MT_WIDTH_MINOR:
- i->buf[total][i->slot].width_minor = i->ev[it].value;
-- i->buf[total][i->slot].tv = i->ev[it].time;
-+ i->buf[total][i->slot].tv.tv_sec = i->ev[it].input_event_sec;
-+ i->buf[total][i->slot].tv.tv_usec = i->ev[it].input_event_usec;
- i->buf[total][i->slot].valid |= TSLIB_MT_VALID;
- break;
- case ABS_MT_TRACKING_ID:
- i->buf[total][i->slot].tracking_id = i->ev[it].value;
-- i->buf[total][i->slot].tv = i->ev[it].time;
-+ i->buf[total][i->slot].tv.tv_sec = i->ev[it].input_event_sec;
-+ i->buf[total][i->slot].tv.tv_usec = i->ev[it].input_event_usec;
- i->buf[total][i->slot].valid |= TSLIB_MT_VALID;
- if (i->ev[it].value == -1)
- i->buf[total][i->slot].pressure = 0;
-diff --git a/tools/ts_uinput.c b/tools/ts_uinput.c
-index 6ca4c3d..1832a07 100644
---- a/tools/ts_uinput.c
-+++ b/tools/ts_uinput.c
-@@ -170,14 +170,16 @@ static int send_touch_events(struct data_t *data, struct ts_sample_mt **s,
- continue;
-
- if (s[j][i].pen_down == 1) {
-- data->ev[c].time = s[j][i].tv;
-+ data->ev[c].input_event_sec = s[j][i].tv.tv_sec;
-+ data->ev[c].input_event_usec = s[j][i].tv.tv_usec;
- data->ev[c].type = EV_KEY;
- data->ev[c].code = BTN_TOUCH;
- data->ev[c].value = s[j][i].pen_down;
- c++;
- }
-
-- data->ev[c].time = s[j][i].tv;
-+ data->ev[c].input_event_sec = s[j][i].tv.tv_sec;
-+ data->ev[c].input_event_usec = s[j][i].tv.tv_usec;
- data->ev[c].type = EV_ABS;
- data->ev[c].code = ABS_MT_SLOT;
- data->ev[c].value = s[j][i].slot;
-@@ -190,111 +192,129 @@ static int send_touch_events(struct data_t *data, struct ts_sample_mt **s,
- * we should use slot 1 and so on.
- */
- if (i == 0) {
-- data->ev[c].time = s[j][i].tv;
-+ data->ev[c].input_event_sec = s[j][i].tv.tv_sec;
-+ data->ev[c].input_event_usec = s[j][i].tv.tv_usec;
- data->ev[c].type = EV_ABS;
- data->ev[c].code = ABS_X;
- data->ev[c].value = s[j][i].x;
- c++;
-
-- data->ev[c].time = s[j][i].tv;
-+ data->ev[c].input_event_sec = s[j][i].tv.tv_sec;
-+ data->ev[c].input_event_usec = s[j][i].tv.tv_usec;
- data->ev[c].type = EV_ABS;
- data->ev[c].code = ABS_Y;
- data->ev[c].value = s[j][i].y;
- c++;
-
-- data->ev[c].time = s[j][i].tv;
-+ data->ev[c].input_event_sec = s[j][i].tv.tv_sec;
-+ data->ev[c].input_event_usec = s[j][i].tv.tv_usec;
- data->ev[c].type = EV_ABS;
- data->ev[c].code = ABS_PRESSURE;
- data->ev[c].value = s[j][i].pressure;
- c++;
- }
-
-- data->ev[c].time = s[j][i].tv;
-+ data->ev[c].input_event_sec = s[j][i].tv.tv_sec;
-+ data->ev[c].input_event_usec = s[j][i].tv.tv_usec;
- data->ev[c].type = EV_ABS;
- data->ev[c].code = ABS_MT_POSITION_X;
- data->ev[c].value = s[j][i].x;
- c++;
-
-- data->ev[c].time = s[j][i].tv;
-+ data->ev[c].input_event_sec = s[j][i].tv.tv_sec;
-+ data->ev[c].input_event_usec = s[j][i].tv.tv_usec;
- data->ev[c].type = EV_ABS;
- data->ev[c].code = ABS_MT_POSITION_Y;
- data->ev[c].value = s[j][i].y;
- c++;
-
-- data->ev[c].time = s[j][i].tv;
-+ data->ev[c].input_event_sec = s[j][i].tv.tv_sec;
-+ data->ev[c].input_event_usec = s[j][i].tv.tv_usec;
- data->ev[c].type = EV_ABS;
- data->ev[c].code = ABS_MT_PRESSURE;
- data->ev[c].value = s[j][i].pressure;
- c++;
-
-- data->ev[c].time = s[j][i].tv;
-+ data->ev[c].input_event_sec = s[j][i].tv.tv_sec;
-+ data->ev[c].input_event_usec = s[j][i].tv.tv_usec;
- data->ev[c].type = EV_ABS;
- data->ev[c].code = ABS_MT_TOUCH_MAJOR;
- data->ev[c].value = s[j][i].touch_major;
- c++;
-
-- data->ev[c].time = s[j][i].tv;
-+ data->ev[c].input_event_sec = s[j][i].tv.tv_sec;
-+ data->ev[c].input_event_usec = s[j][i].tv.tv_usec;
- data->ev[c].type = EV_ABS;
- data->ev[c].code = ABS_MT_WIDTH_MAJOR;
- data->ev[c].value = s[j][i].width_major;
- c++;
-
-- data->ev[c].time = s[j][i].tv;
-+ data->ev[c].input_event_sec = s[j][i].tv.tv_sec;
-+ data->ev[c].input_event_usec = s[j][i].tv.tv_usec;
- data->ev[c].type = EV_ABS;
- data->ev[c].code = ABS_MT_TOUCH_MINOR;
- data->ev[c].value = s[j][i].touch_minor;
- c++;
-
-- data->ev[c].time = s[j][i].tv;
-+ data->ev[c].input_event_sec = s[j][i].tv.tv_sec;
-+ data->ev[c].input_event_usec = s[j][i].tv.tv_usec;
- data->ev[c].type = EV_ABS;
- data->ev[c].code = ABS_MT_WIDTH_MINOR;
- data->ev[c].value = s[j][i].width_minor;
- c++;
-
-- data->ev[c].time = s[j][i].tv;
-+ data->ev[c].input_event_sec = s[j][i].tv.tv_sec;
-+ data->ev[c].input_event_usec = s[j][i].tv.tv_usec;
- data->ev[c].type = EV_ABS;
- data->ev[c].code = ABS_MT_TOOL_TYPE;
- data->ev[c].value = s[j][i].tool_type;
- c++;
-
-- data->ev[c].time = s[j][i].tv;
-+ data->ev[c].input_event_sec = s[j][i].tv.tv_sec;
-+ data->ev[c].input_event_usec = s[j][i].tv.tv_usec;
- data->ev[c].type = EV_ABS;
- data->ev[c].code = ABS_MT_TOOL_X;
- data->ev[c].value = s[j][i].tool_x;
- c++;
-
-- data->ev[c].time = s[j][i].tv;
-+ data->ev[c].input_event_sec = s[j][i].tv.tv_sec;
-+ data->ev[c].input_event_usec = s[j][i].tv.tv_usec;
- data->ev[c].type = EV_ABS;
- data->ev[c].code = ABS_MT_TOOL_Y;
- data->ev[c].value = s[j][i].tool_y;
- c++;
-
-- data->ev[c].time = s[j][i].tv;
-+ data->ev[c].input_event_sec = s[j][i].tv.tv_sec;
-+ data->ev[c].input_event_usec = s[j][i].tv.tv_usec;
- data->ev[c].type = EV_ABS;
- data->ev[c].code = ABS_MT_ORIENTATION;
- data->ev[c].value = s[j][i].orientation;
- c++;
-
-- data->ev[c].time = s[j][i].tv;
-+ data->ev[c].input_event_sec = s[j][i].tv.tv_sec;
-+ data->ev[c].input_event_usec = s[j][i].tv.tv_usec;
- data->ev[c].type = EV_ABS;
- data->ev[c].code = ABS_MT_DISTANCE;
- data->ev[c].value = s[j][i].distance;
- c++;
-
-- data->ev[c].time = s[j][i].tv;
-+ data->ev[c].input_event_sec = s[j][i].tv.tv_sec;
-+ data->ev[c].input_event_usec = s[j][i].tv.tv_usec;
- data->ev[c].type = EV_ABS;
- data->ev[c].code = ABS_MT_BLOB_ID;
- data->ev[c].value = s[j][i].blob_id;
- c++;
-
-- data->ev[c].time = s[j][i].tv;
-+ data->ev[c].input_event_sec = s[j][i].tv.tv_sec;
-+ data->ev[c].input_event_usec = s[j][i].tv.tv_usec;
- data->ev[c].type = EV_ABS;
- data->ev[c].code = ABS_MT_TRACKING_ID;
- data->ev[c].value = s[j][i].tracking_id;
- c++;
-
- if (data->mt_type_a == 1) {
-- data->ev[c].time = s[j][i].tv;
-+ data->ev[c].input_event_sec = s[j][i].tv.tv_sec;
-+ data->ev[c].input_event_usec = s[j][i].tv.tv_usec;
- data->ev[c].type = EV_SYN;
- data->ev[c].code = SYN_MT_REPORT;
- data->ev[c].value = 0;
-@@ -302,7 +322,8 @@ static int send_touch_events(struct data_t *data, struct ts_sample_mt **s,
- }
-
- if (s[j][i].pen_down == 0) {
-- data->ev[c].time = s[j][i].tv;
-+ data->ev[c].input_event_sec = s[j][i].tv.tv_sec;
-+ data->ev[c].input_event_usec = s[j][i].tv.tv_usec;
- data->ev[c].type = EV_KEY;
- data->ev[c].code = BTN_TOUCH;
- data->ev[c].value = s[j][i].pen_down;
-@@ -312,7 +333,8 @@ static int send_touch_events(struct data_t *data, struct ts_sample_mt **s,
- }
-
- if (c > 0) {
-- data->ev[c].time = s[j][i].tv;
-+ data->ev[c].input_event_sec = s[j][i].tv.tv_sec;
-+ data->ev[c].input_event_usec = s[j][i].tv.tv_usec;
- data->ev[c].type = EV_SYN;
- data->ev[c].code = SYN_REPORT;
- data->ev[c].value = 0;