--- Begin Message ---
- To: Debian Bug Tracking System <submit@bugs.debian.org>
- Subject: buster-pu: package libinput/1.12.6-2+deb10u1
- From: Salvatore Bonaccorso <carnil@debian.org>
- Date: Mon, 20 Jul 2020 16:33:14 +0200
- Message-id: <159525559461.7889.17647364929823317652.reportbug@lorien.valinor.li>
Package: release.debian.org
Severity: normal
Tags: buster
User: release.debian.org@packages.debian.org
Usertags: pu
Hi Stable Release Managers,
libinput in buster is affected by the bug #952700 (fixed in unstable
already back when the new version was uploaded) and can be described
as:
libinput has an issue which was reported upstream in
https://gitlab.freedesktop.org/libinput/libinput/issues/291 and makes
external lenovo keyboard trackpoint and mouse buttons erroneously
suspended in yoga tablet mode. The pointing stick gets disabled on
tablet mode switch.
I was able to test the respective bug in the given combination.
Attached is the proposed debdiff for this update.
Regards,
Salvatore
diff -Nru libinput-1.12.6/debian/changelog libinput-1.12.6/debian/changelog
--- libinput-1.12.6/debian/changelog 2019-03-31 03:42:45.000000000 +0200
+++ libinput-1.12.6/debian/changelog 2020-02-27 21:27:20.000000000 +0100
@@ -1,3 +1,10 @@
+libinput (1.12.6-2+deb10u1) buster; urgency=medium
+
+ * Non-maintainer upload.
+ * quirks: add trackpoint integration attribute (Closes: #952700)
+
+ -- Salvatore Bonaccorso <carnil@debian.org> Thu, 27 Feb 2020 21:27:20 +0100
+
libinput (1.12.6-2) unstable; urgency=medium
* Ship /usr/share/libinput in the udeb, since that's now needed by the
diff -Nru libinput-1.12.6/debian/patches/quirks-add-trackpoint-integration-attribute.patch libinput-1.12.6/debian/patches/quirks-add-trackpoint-integration-attribute.patch
--- libinput-1.12.6/debian/patches/quirks-add-trackpoint-integration-attribute.patch 1970-01-01 01:00:00.000000000 +0100
+++ libinput-1.12.6/debian/patches/quirks-add-trackpoint-integration-attribute.patch 2020-02-27 21:27:20.000000000 +0100
@@ -0,0 +1,224 @@
+From: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Tue, 28 May 2019 09:54:27 +1000
+Subject: quirks: add trackpoint integration attribute
+Origin: https://gitlab.freedesktop.org/libinput/libinput/commit/6e60f8fb19cad03747b877dfcf587d9684dfc6f7
+Bug: https://gitlab.freedesktop.org/libinput/libinput/issues/291
+Bug-Debian: https://bugs.debian.org/952700
+
+Some versions [1] of the Lenovo ThinkPad Compact USB Keyboard with TrackPoint USB
+have the pointing stick on an event node that has keys but is not a regular
+keyboard. Thus the stick falls through the cracks and gets disabled on tablet
+mode switch. Instead of adding more hacks let's do this properly: tag the
+pointing stick as external and have the code in place to deal with that.
+
+[1] This may be caused by recent kernel changes
+
+Fixes #291
+
+Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+(cherry picked from commit 8dfe8c68eb9bde9eecc7de5665903d258df42272)
+---
+ doc/user/device-quirks.rst | 3 +++
+ quirks/50-system-lenovo.quirks | 9 ++++++++-
+ src/evdev-fallback.c | 14 +++++++++-----
+ src/evdev.c | 32 ++++++++++++++++++++++++++++----
+ src/quirks.c | 8 ++++++++
+ src/quirks.h | 1 +
+ test/test-quirks.c | 34 ++++++++++++++++++++++++++++++++++
+ 7 files changed, 91 insertions(+), 10 deletions(-)
+
+--- a/doc/user/device-quirks.rst
++++ b/doc/user/device-quirks.rst
+@@ -181,3 +181,6 @@ AttrEventCodeDisable=EV_ABS;BTN_STYLUS;E
+ Disables the evdev event type/code tuples on the device. Entries may be
+ a named event type, or a named event code, or a named event type with a
+ hexadecimal event code, separated by a single colon.
++AttrPointingStickIntegration=internal|external
++ Indicates the integration of the pointing stick. This is a string enum.
++ Only needed for external pointing sticks. These are rare.
+--- a/quirks/50-system-lenovo.quirks
++++ b/quirks/50-system-lenovo.quirks
+@@ -59,13 +59,20 @@ MatchDMIModalias=dmi:*svnLENOVO:*:pvrThi
+ ModelLenovoT450Touchpad=1
+ AttrPalmPressureThreshold=150
+
+-[Lenovo ThinkPad Compact USB Keyboard with TrackPoint]
++[Lenovo ThinkPad Compact USB Keyboard with TrackPoint (keyboard)]
+ MatchUdevType=keyboard
+ MatchBus=usb
+ MatchVendor=0x17EF
+ MatchProduct=0x6047
+ AttrKeyboardIntegration=external
+
++[Lenovo ThinkPad Compact USB Keyboard with TrackPoint (trackpoint)]
++MatchUdevType=pointingstick
++MatchBus=usb
++MatchVendor=0x17EF
++MatchProduct=0x6047
++AttrPointingStickIntegration=external
++
+ # Lenovo Thinkpad Yoga (not the consumer versions) disables the keyboard
+ # mechanically. We must not disable the keyboard because some keys are
+ # still accessible on the screen and volume rocker.
+--- a/src/evdev-fallback.c
++++ b/src/evdev-fallback.c
+@@ -1313,8 +1313,8 @@ fallback_tablet_mode_switch_event(uint64
+ }
+
+ static void
+-fallback_keyboard_pair_tablet_mode(struct evdev_device *keyboard,
+- struct evdev_device *tablet_mode_switch)
++fallback_pair_tablet_mode(struct evdev_device *keyboard,
++ struct evdev_device *tablet_mode_switch)
+ {
+ struct fallback_dispatch *dispatch =
+ fallback_dispatch(keyboard->dispatch);
+@@ -1322,8 +1322,12 @@ fallback_keyboard_pair_tablet_mode(struc
+ if ((keyboard->tags & EVDEV_TAG_EXTERNAL_KEYBOARD))
+ return;
+
+- if ((keyboard->tags &
+- (EVDEV_TAG_TRACKPOINT|EVDEV_TAG_INTERNAL_KEYBOARD)) == 0)
++ if ((keyboard->tags & EVDEV_TAG_TRACKPOINT)) {
++ if (keyboard->tags & EVDEV_TAG_EXTERNAL_MOUSE)
++ return;
++ /* This filters out all internal keyboard-like devices (Video
++ * Switch) */
++ } else if ((keyboard->tags & EVDEV_TAG_INTERNAL_KEYBOARD) == 0)
+ return;
+
+ if (evdev_device_has_model_quirk(keyboard,
+@@ -1360,7 +1364,7 @@ fallback_interface_device_added(struct e
+ struct evdev_device *added_device)
+ {
+ fallback_lid_pair_keyboard(device, added_device);
+- fallback_keyboard_pair_tablet_mode(device, added_device);
++ fallback_pair_tablet_mode(device, added_device);
+ }
+
+ static void
+--- a/src/evdev.c
++++ b/src/evdev.c
+@@ -387,10 +387,34 @@ static void
+ evdev_tag_trackpoint(struct evdev_device *device,
+ struct udev_device *udev_device)
+ {
+- if (libevdev_has_property(device->evdev,
+- INPUT_PROP_POINTING_STICK) ||
+- parse_udev_flag(device, udev_device, "ID_INPUT_POINTINGSTICK"))
+- device->tags |= EVDEV_TAG_TRACKPOINT;
++ struct quirks_context *quirks;
++ struct quirks *q;
++ char *prop;
++
++ if (!libevdev_has_property(device->evdev,
++ INPUT_PROP_POINTING_STICK) &&
++ !parse_udev_flag(device, udev_device, "ID_INPUT_POINTINGSTICK"))
++ return;
++
++ device->tags |= EVDEV_TAG_TRACKPOINT;
++
++ quirks = evdev_libinput_context(device)->quirks;
++ q = quirks_fetch_for_device(quirks, device->udev_device);
++ if (q && quirks_get_string(q, QUIRK_ATTR_TRACKPOINT_INTEGRATION, &prop)) {
++ if (streq(prop, "internal")) {
++ /* noop, this is the default anyway */
++ } else if (streq(prop, "external")) {
++ device->tags |= EVDEV_TAG_EXTERNAL_MOUSE;
++ evdev_log_info(device,
++ "is an external pointing stick\n");
++ } else {
++ evdev_log_info(device,
++ "tagged with unknown value %s\n",
++ prop);
++ }
++ }
++
++ quirks_unref(q);
+ }
+
+ static inline void
+--- a/src/quirks.c
++++ b/src/quirks.c
+@@ -259,6 +259,7 @@ quirk_get_name(enum quirk q)
+ case QUIRK_ATTR_PALM_SIZE_THRESHOLD: return "AttrPalmSizeThreshold";
+ case QUIRK_ATTR_LID_SWITCH_RELIABILITY: return "AttrLidSwitchReliability";
+ case QUIRK_ATTR_KEYBOARD_INTEGRATION: return "AttrKeyboardIntegration";
++ case QUIRK_ATTR_TRACKPOINT_INTEGRATION: return "AttrPointingStickIntegration";
+ case QUIRK_ATTR_TPKBCOMBO_LAYOUT: return "AttrTPKComboLayout";
+ case QUIRK_ATTR_PRESSURE_RANGE: return "AttrPressureRange";
+ case QUIRK_ATTR_PALM_PRESSURE_THRESHOLD: return "AttrPalmPressureThreshold";
+@@ -654,6 +655,13 @@ parse_attr(struct quirks_context *ctx,
+ if (!streq(value, "internal") && !streq(value, "external"))
+ goto out;
+ p->type = PT_STRING;
++ p->value.s = safe_strdup(value);
++ rc = true;
++ } else if (streq(key, quirk_get_name(QUIRK_ATTR_TRACKPOINT_INTEGRATION))) {
++ p->id = QUIRK_ATTR_TRACKPOINT_INTEGRATION;
++ if (!streq(value, "internal") && !streq(value, "external"))
++ goto out;
++ p->type = PT_STRING;
+ p->value.s = safe_strdup(value);
+ rc = true;
+ } else if (streq(key, quirk_get_name(QUIRK_ATTR_TPKBCOMBO_LAYOUT))) {
+--- a/src/quirks.h
++++ b/src/quirks.h
+@@ -94,6 +94,7 @@ enum quirk {
+ QUIRK_ATTR_PALM_SIZE_THRESHOLD,
+ QUIRK_ATTR_LID_SWITCH_RELIABILITY,
+ QUIRK_ATTR_KEYBOARD_INTEGRATION,
++ QUIRK_ATTR_TRACKPOINT_INTEGRATION,
+ QUIRK_ATTR_TPKBCOMBO_LAYOUT,
+ QUIRK_ATTR_PRESSURE_RANGE,
+ QUIRK_ATTR_PALM_PRESSURE_THRESHOLD,
+--- a/test/test-quirks.c
++++ b/test/test-quirks.c
+@@ -1204,6 +1204,39 @@ START_TEST(quirks_parse_string_attr)
+ }
+ END_TEST
+
++START_TEST(quirks_parse_integration_attr)
++{
++ struct litest_device *dev = litest_current_device();
++ char *do_not_use; /* freed before we can use it */
++ bool
++
++ rc = test_attr_parse(dev,
++ QUIRK_ATTR_KEYBOARD_INTEGRATION,
++ "internal",
++ (qparsefunc)quirks_get_string,
++ &do_not_use);
++ ck_assert(rc);
++ rc = test_attr_parse(dev,
++ QUIRK_ATTR_KEYBOARD_INTEGRATION,
++ "external",
++ (qparsefunc)quirks_get_string,
++ &do_not_use);
++ ck_assert(rc);
++ rc = test_attr_parse(dev,
++ QUIRK_ATTR_TRACKPOINT_INTEGRATION,
++ "internal",
++ (qparsefunc)quirks_get_string,
++ &do_not_use);
++ ck_assert(rc);
++ rc = test_attr_parse(dev,
++ QUIRK_ATTR_TRACKPOINT_INTEGRATION,
++ "external",
++ (qparsefunc)quirks_get_string,
++ &do_not_use);
++ ck_assert(rc);
++}
++END_TEST
++
+ START_TEST(quirks_model_one)
+ {
+ struct litest_device *dev = litest_current_device();
+@@ -1432,6 +1465,7 @@ TEST_COLLECTION(quirks)
+ litest_add_for_device("quirks:parsing", quirks_parse_uint_attr, LITEST_MOUSE);
+ litest_add_for_device("quirks:parsing", quirks_parse_double_attr, LITEST_MOUSE);
+ litest_add_for_device("quirks:parsing", quirks_parse_string_attr, LITEST_MOUSE);
++ litest_add_for_device("quirks:parsing", quirks_parse_integration_attr, LITEST_MOUSE);
+
+ litest_add_for_device("quirks:model", quirks_model_one, LITEST_MOUSE);
+ litest_add_for_device("quirks:model", quirks_model_zero, LITEST_MOUSE);
diff -Nru libinput-1.12.6/debian/patches/series libinput-1.12.6/debian/patches/series
--- libinput-1.12.6/debian/patches/series 1970-01-01 01:00:00.000000000 +0100
+++ libinput-1.12.6/debian/patches/series 2020-02-27 21:27:20.000000000 +0100
@@ -0,0 +1 @@
+quirks-add-trackpoint-integration-attribute.patch
--- End Message ---