From: Fabrice Fontaine Date: Wed, 11 Mar 2020 20:17:49 +0000 (+0100) Subject: package/tslib: fix build with headers >= 4.16 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=fedaa28079489b308f77d80a0cac8698d776df23;p=buildroot.git package/tslib: fix build with headers >= 4.16 Fixes: - http://autobuild.buildroot.org/results/bc8bc3f1d88f3b64765025fee7f941d30a81ee46 Signed-off-by: Fabrice Fontaine Signed-off-by: Thomas Petazzoni --- diff --git a/package/tslib/0001-Fix-build-on-32bit-arches-with-64bit-time_t.patch b/package/tslib/0001-Fix-build-on-32bit-arches-with-64bit-time_t.patch new file mode 100644 index 0000000000..70a3f25f59 --- /dev/null +++ b/package/tslib/0001-Fix-build-on-32bit-arches-with-64bit-time_t.patch @@ -0,0 +1,386 @@ +From 09eeff8c90a82e7aa9ff215320d558c1147982f6 Mon Sep 17 00:00:00 2001 +From: Khem Raj +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 +Signed-off-by: Fabrice Fontaine +[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 + #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;