evdev: don't suspend keyboard on ThinkPad X1 Yoga 1st in tablet mode

When the X1 Yoga is in tablet mode, one capacitative touch button (windows
key, sends KEY_LEFTMETA) and two side volume buttons are accessible on the
front. The key event comes through the internal keyboard that we disabled in
tablet mode so it stops working.

Luckily the Yoga physically disables the "main" keyboard when in tablet mode,
so all we have to do is skip our code to disable the keyboard and the keys are
working again.

https://bugs.freedesktop.org/show_bug.cgi?id=103749

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit 5feaa5f00c)
This commit is contained in:
Davide Depau 2018-04-17 15:22:42 +02:00 committed by Peter Hutterer
parent 4dcba5d889
commit 831e1664d6
4 changed files with 10 additions and 0 deletions

View file

@ -1175,6 +1175,9 @@ fallback_keyboard_pair_tablet_mode(struct evdev_device *keyboard,
(EVDEV_TAG_TRACKPOINT|EVDEV_TAG_INTERNAL_KEYBOARD)) == 0)
return;
if (keyboard->model_flags & EVDEV_MODEL_TABLET_MODE_NO_SUSPEND)
return;
if ((tablet_mode_switch->tags & EVDEV_TAG_TABLET_MODE_SWITCH) == 0)
return;

View file

@ -1272,6 +1272,7 @@ evdev_read_model_flags(struct evdev_device *device)
MODEL(LOGITECH_MARBLE_MOUSE),
MODEL(TABLET_NO_PROXIMITY_OUT),
MODEL(MS_NANO_TRANSCEIVER),
MODEL(TABLET_MODE_NO_SUSPEND),
#undef MODEL
{ "ID_INPUT_TRACKBALL", EVDEV_MODEL_TRACKBALL },
{ NULL, EVDEV_MODEL_DEFAULT },

View file

@ -126,6 +126,7 @@ enum evdev_device_model {
EVDEV_MODEL_LOGITECH_MARBLE_MOUSE = (1 << 26),
EVDEV_MODEL_TABLET_NO_PROXIMITY_OUT = (1 << 27),
EVDEV_MODEL_MS_NANO_TRANSCEIVER = (1 << 28),
EVDEV_MODEL_TABLET_MODE_NO_SUSPEND = (1 << 30),
};
enum evdev_button_scroll_state {

View file

@ -234,6 +234,11 @@ libinput:keyboard:input:b0003v17EFp6047*
libinput:name:*ALPS TrackPoint*:svnLENOVO:*:pvrThinkPadX280:*
LIBINPUT_ATTR_TRACKPOINT_RANGE=70
# Lenovo Thinkpad X1 Yoga disables the keyboard anyway but has the same device
# use a windows key on the screen and volume rocker on the side (#103749)
libinput:name:AT Translated Set 2 keyboard:dmi:*svnLENOVO:*pvrThinkPadX1Yoga1st:*
LIBINPUT_MODEL_TABLET_MODE_NO_SUSPEND=1
##########################################
# Logitech
##########################################