Signed-off-by: Khem Raj <[email protected]>
---
 ...ld-on-32bit-arches-with-64bit-time_t.patch | 389 ++++++++++++++++++
 meta-oe/recipes-graphics/tslib/tslib_1.21.bb  |   1 +
 2 files changed, 390 insertions(+)
 create mode 100644 
meta-oe/recipes-graphics/tslib/tslib/0001-Fix-build-on-32bit-arches-with-64bit-time_t.patch

diff --git 
a/meta-oe/recipes-graphics/tslib/tslib/0001-Fix-build-on-32bit-arches-with-64bit-time_t.patch
 
b/meta-oe/recipes-graphics/tslib/tslib/0001-Fix-build-on-32bit-arches-with-64bit-time_t.patch
new file mode 100644
index 0000000000..59bd97a0f2
--- /dev/null
+++ 
b/meta-oe/recipes-graphics/tslib/tslib/0001-Fix-build-on-32bit-arches-with-64bit-time_t.patch
@@ -0,0 +1,389 @@
+From 5455055660700be18eb8800e56e2423031ed4c76 Mon Sep 17 00:00:00 2001
+From: Khem Raj <[email protected]>
+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
+
+Upstream-Status: Submitted [https://github.com/libts/tslib/pull/162]
+
+Signed-off-by: Khem Raj <[email protected]>
+---
+ 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;
+-- 
+2.24.0
+
diff --git a/meta-oe/recipes-graphics/tslib/tslib_1.21.bb 
b/meta-oe/recipes-graphics/tslib/tslib_1.21.bb
index 2bc40d9391..bb28ee410c 100644
--- a/meta-oe/recipes-graphics/tslib/tslib_1.21.bb
+++ b/meta-oe/recipes-graphics/tslib/tslib_1.21.bb
@@ -14,6 +14,7 @@ LIC_FILES_CHKSUM = "\
 "
 
 SRC_URI = 
"https://github.com/kergoth/tslib/releases/download/${PV}/tslib-${PV}.tar.xz;downloadfilename=tslib-${PV}.tar.xz
 \
+           file://0001-Fix-build-on-32bit-arches-with-64bit-time_t.patch \
            file://ts.conf \
            file://tslib.sh \
 "
-- 
2.24.0

-- 
_______________________________________________
Openembedded-devel mailing list
[email protected]
http://lists.openembedded.org/mailman/listinfo/openembedded-devel

Reply via email to