[PATCH libinput 1/2] touchpad: check touchpad for basic features we expect
Peter Hutterer
peter.hutterer at who-t.net
Thu May 28 15:21:35 PDT 2015
If a relative device is tagged by udev as ID_INPUT_TOUCHPAD we need to
catch this before we try to dereference device->abs.absinfo_x.
Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
src/evdev-mt-touchpad.c | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
index b18f74e..eacec6e 100644
--- a/src/evdev-mt-touchpad.c
+++ b/src/evdev-mt-touchpad.c
@@ -1440,6 +1440,30 @@ tp_init_sendevents(struct tp_dispatch *tp,
}
static int
+tp_sanity_check(struct tp_dispatch *tp,
+ struct evdev_device *device)
+{
+ struct libevdev *evdev = device->evdev;
+ struct libinput *libinput = tp_libinput_context(tp);
+
+ if (!libevdev_has_event_code(evdev, EV_ABS, ABS_X))
+ goto error;
+
+ if (!libevdev_has_event_code(evdev, EV_KEY, BTN_TOUCH))
+ goto error;
+
+ if (!libevdev_has_event_code(evdev, EV_KEY, BTN_TOOL_FINGER))
+ goto error;
+
+ return 0;
+
+error:
+ log_bug_kernel(libinput,
+ "device %s failed touchpad sanity checks\n");
+ return -1;
+}
+
+static int
tp_init(struct tp_dispatch *tp,
struct evdev_device *device)
{
@@ -1449,6 +1473,9 @@ tp_init(struct tp_dispatch *tp,
tp->base.interface = &tp_interface;
tp->device = device;
+ if (tp_sanity_check(tp, device) != 0)
+ return -1;
+
if (tp_init_slots(tp, device) != 0)
return -1;
--
2.4.1
More information about the wayland-devel
mailing list