From 43352590f75c8b069c02ea18011fe7d3bce7d675 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Mon, 23 Jan 2017 09:55:03 +1000 Subject: [PATCH] touchpad: mask out ABS_MT if we don't have or disable MT Make sure the events we deal with are the ones we actually honor. This reduces the chance that we accidentally process events we weren't event supposed to get based on some earlier device decision. Signed-off-by: Peter Hutterer Reviewed-by: Hans de Goede --- src/evdev-mt-touchpad.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c index f437c2df..ca00c402 100644 --- a/src/evdev-mt-touchpad.c +++ b/src/evdev-mt-touchpad.c @@ -1749,6 +1749,16 @@ tp_sync_touch(struct tp_dispatch *tp, libevdev_fetch_slot_value(evdev, slot, ABS_MT_DISTANCE, &t->distance); } +static inline void +tp_disable_abs_mt(struct evdev_device *device) +{ + struct libevdev *evdev = device->evdev; + unsigned int code; + + for (code = ABS_MT_SLOT; code <= ABS_MAX; code++) + libevdev_disable_event_code(evdev, EV_ABS, code); +} + static bool tp_init_slots(struct tp_dispatch *tp, struct evdev_device *device) @@ -1804,6 +1814,9 @@ tp_init_slots(struct tp_dispatch *tp, tp->has_mt = false; } + if (!tp->has_mt) + tp_disable_abs_mt(device); + ARRAY_FOR_EACH(max_touches, m) { if (libevdev_has_event_code(device->evdev, EV_KEY,