aboutsummaryrefslogtreecommitdiffstats
path: root/meta/recipes-graphics/tslib/tslib/32bitBE-support.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-graphics/tslib/tslib/32bitBE-support.patch')
-rw-r--r--meta/recipes-graphics/tslib/tslib/32bitBE-support.patch52
1 files changed, 52 insertions, 0 deletions
diff --git a/meta/recipes-graphics/tslib/tslib/32bitBE-support.patch b/meta/recipes-graphics/tslib/tslib/32bitBE-support.patch
new file mode 100644
index 0000000000..3262f16c6d
--- /dev/null
+++ b/meta/recipes-graphics/tslib/tslib/32bitBE-support.patch
@@ -0,0 +1,52 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 030-32bitBE-support.dpatch by Neil Williams <codehelp@debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: See bug #496759 - being tested upstream for 32bit BE devices
+
+@DPATCH@
+diff -urNad tslib-1.0~/plugins/input-raw.c tslib-1.0/plugins/input-raw.c
+--- tslib-1.0~/plugins/input-raw.c 2008-12-09 10:56:47.000000000 +0000
++++ tslib-1.0/plugins/input-raw.c 2008-12-09 11:05:41.000000000 +0000
+@@ -44,25 +44,33 @@
+ int using_syn;
+ };
+
++#define BITS_PER_LONG (sizeof(long) * 8)
++#ifndef EV_CNT
++#define EV_CNT (EV_MAX+1)
++#endif
++#ifndef ABS_CNT
++#define ABS_CNT (ABS_MAX+1)
++#endif
++
+ static int check_fd(struct tslib_input *i)
+ {
+ struct tsdev *ts = i->module.dev;
+ int version;
+- u_int32_t bit;
+- u_int64_t absbit;
++ unsigned long bit[EV_CNT / BITS_PER_LONG + 1];
++ unsigned long absbit[ABS_MAX / BITS_PER_LONG + 1];
+
+ if (! ((ioctl(ts->fd, EVIOCGVERSION, &version) >= 0) &&
+ (version == EV_VERSION) &&
+- (ioctl(ts->fd, EVIOCGBIT(0, sizeof(bit) * 8), &bit) >= 0) &&
+- (bit & (1 << EV_ABS)) &&
+- (ioctl(ts->fd, EVIOCGBIT(EV_ABS, sizeof(absbit) * 8), &absbit) >= 0) &&
+- (absbit & (1 << ABS_X)) &&
+- (absbit & (1 << ABS_Y)) && (absbit & (1 << ABS_PRESSURE)))) {
++ (ioctl(ts->fd, EVIOCGBIT(0, sizeof(bit)), bit) >= 0) &&
++ (bit[0] & (1 << EV_ABS)) &&
++ (ioctl(ts->fd, EVIOCGBIT(EV_ABS, sizeof(absbit)), absbit) >= 0) &&
++ (absbit[0] & (1 << ABS_X)) &&
++ (absbit[0] & (1 << ABS_Y)) && (absbit[0] & (1 << ABS_PRESSURE)))) {
+ fprintf(stderr, "selected device is not a touchscreen I understand\n");
+ return -1;
+ }
+
+- if (bit & (1 << EV_SYN))
++ if (bit[0] & (1 << EV_SYN))
+ i->using_syn = 1;
+
+ return 0;