mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2025-12-20 05:40:04 +01:00
This switches the quirk from AttrEventCodeEnable/Disable to just AttrEventCode with a +/- prefix for each entry. This switches the quirk from AttrInputPropEnable/Disable to just AttrInputProp with a +/- prefix for each entry. Previously, both event codes and input props would only apply the last-matching section entry for a device. Furthermore, an earlier Disable entry would take precedence over a later Enable entry. For example, a set of sections with these lines *should* enable left, right and middle: [first] AttrEventCodeEnable=BTN_LEFT;BTN_RIGHT;BTN_MIDDLE [second] AttrEventCodeDisable=BTN_RIGHT [third] AttrEventCodeEnable=BTN_LEFT;BTN_RIGHT; Alas: the first line was effectively ignored (quirks only returned the last-matching one, i.e. the one from "third"). And due to implementation details in evdev.c, the Disable attribute was processed after Enable, i.e. the device was enabled for left + right and then disabled for right. As a result, the device only had BTN_LEFT enabled. Fix this by changing the attribute to carry both enable/disable information and merging the commands together. Internally, all quirks matching a device are simply ref'd into an array in the struct quirks. The applied value is simply the last entry in the array corresponding to our quirk. For AttrEventCode and AttrInputProp instead do this: - switch them to a tuple with the code as first entry and a boolean enable/disable as second entry - if the struct quirk already has an entry for either, append the more recent one to the existing entry (instead of creating a new entry in the array). This way we have all entries that match and in-order of precedence - i.e. we can process them left-to-right to end up with the right state. Fixes: https://gitlab.freedesktop.org/libinput/libinput/-/issues/821 Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
296 lines
8.8 KiB
Text
296 lines
8.8 KiB
Text
# Do not edit this file, it will be overwritten on update
|
|
|
|
[Lenovo Thinkpad Touchpad]
|
|
MatchName=*Synaptics*
|
|
MatchDMIModalias=dmi:*svnLENOVO:*:pvrThinkPad*:*
|
|
AttrThumbPressureThreshold=100
|
|
|
|
[Lenovo ThinkPad 13 2nd Generation TrackPoint]
|
|
MatchUdevType=pointingstick
|
|
MatchName=*ETPS/2 Elantech TrackPoint*
|
|
MatchDMIModalias=dmi:*svnLENOVO:*:pvrThinkPad132ndGen*
|
|
AttrTrackpointMultiplier=1.75
|
|
|
|
[Lenovo x230 Touchpad]
|
|
MatchName=*SynPS/2 Synaptics TouchPad
|
|
MatchDMIModalias=dmi:*svnLENOVO:*:pvrThinkPadX230*
|
|
ModelLenovoX230=1
|
|
|
|
[Lenovo T440p Touchpad PS/2]
|
|
MatchName=SynPS/2 Synaptics TouchPad
|
|
MatchDMIModalias=dmi:*svnLENOVO:*:pvrThinkPadT440p*
|
|
ModelLenovoT450Touchpad=1
|
|
|
|
[Lenovo T440p Touchpad RMI4]
|
|
MatchName=Synaptics tm2964-001
|
|
MatchDMIModalias=dmi:*svnLENOVO:*:pvrThinkPadT440p*
|
|
ModelLenovoT450Touchpad=1
|
|
|
|
[Lenovo T470 Trackpoint]
|
|
MatchName=*TPPS/2 IBM TrackPoint
|
|
MatchDMIModalias=dmi:*svnLENOVO:*:pvrThinkPadT470:*
|
|
AttrTrackpointMultiplier=0.4
|
|
|
|
[Lenovo T480 Trackpoint]
|
|
MatchName=*TPPS/2 IBM TrackPoint
|
|
MatchDMIModalias=dmi:*svnLENOVO:*:pvrThinkPadT480:*
|
|
AttrTrackpointMultiplier=0.4
|
|
|
|
# Touchpad is a clickpad but INPUT_PROP_BUTTONPAD is not set, see
|
|
# https://gitlab.freedesktop.org/libinput/libinput/issues/177
|
|
[Lenovo T480s Touchpad]
|
|
MatchName=Elan Touchpad
|
|
MatchDMIModalias=dmi:*svnLENOVO:*:pvrThinkPadT480s*
|
|
AttrInputProp=+INPUT_PROP_BUTTONPAD
|
|
|
|
# Touchpad is a clickpad but INPUT_PROP_BUTTONPAD is not set, see
|
|
# https://gitlab.freedesktop.org/libinput/libinput/issues/177
|
|
[Lenovo T490s Touchpad]
|
|
MatchName=Elan Touchpad
|
|
MatchDMIModalias=dmi:*svnLENOVO:*:pvrThinkPadT490s*
|
|
AttrInputProp=+INPUT_PROP_BUTTONPAD
|
|
|
|
[Lenovo T490s Trackpoint]
|
|
MatchName=*TPPS/2 IBM TrackPoint
|
|
MatchDMIModalias=dmi:*svnLENOVO:*:pvrThinkPadT490s:*
|
|
AttrTrackpointMultiplier=0.4
|
|
|
|
# Touchpad is a clickpad but INPUT_PROP_BUTTONPAD is not set, see
|
|
# https://gitlab.freedesktop.org/libinput/libinput/issues/234
|
|
[Lenovo L380 Touchpad]
|
|
MatchName=Elan Touchpad
|
|
MatchDMIModalias=dmi:*svnLENOVO:*:pvrThinkPadL380*
|
|
AttrInputProp=+INPUT_PROP_BUTTONPAD
|
|
|
|
[Lenovo X200 Trackpoint]
|
|
MatchName=*TPPS/2 IBM TrackPoint
|
|
MatchDMIModalias=dmi:*svnLENOVO:*pvrThinkPadX20?:*
|
|
AttrTrackpointMultiplier=1.25
|
|
|
|
[Lenovo X200x Trackpoint]
|
|
MatchName=*TPPS/2 IBM TrackPoint
|
|
MatchDMIModalias=dmi:*svnLENOVO:*pvrThinkPadX20??:*
|
|
AttrTrackpointMultiplier=1.25
|
|
|
|
[Lenovo X230 Trackpoint]
|
|
MatchName=*TPPS/2 IBM TrackPoint
|
|
MatchDMIModalias=dmi:*svnLENOVO:*pvrThinkPadX230:*
|
|
AttrTrackpointMultiplier=0.25
|
|
|
|
[Lenovo P50 Touchpad]
|
|
MatchName=SynPS/2 Synaptics TouchPad
|
|
MatchDMIModalias=dmi:*svnLENOVO:*:pvrThinkPadP50*:
|
|
ModelLenovoT450Touchpad=1
|
|
AttrPalmPressureThreshold=150
|
|
|
|
[Lenovo *50 Touchpad]
|
|
MatchName=SynPS/2 Synaptics TouchPad
|
|
MatchDMIModalias=dmi:*svnLENOVO:*:pvrThinkPad??50*:
|
|
ModelLenovoT450Touchpad=1
|
|
AttrPalmPressureThreshold=150
|
|
|
|
[Lenovo *60 Touchpad]
|
|
MatchName=SynPS/2 Synaptics TouchPad
|
|
MatchDMIModalias=dmi:*svnLENOVO:*:pvrThinkPad??60*:
|
|
ModelLenovoT450Touchpad=1
|
|
AttrPalmPressureThreshold=150
|
|
|
|
[Lenovo X1 Carbon 3rd Touchpad]
|
|
MatchName=SynPS/2 Synaptics TouchPad
|
|
MatchDMIModalias=dmi:*svnLENOVO:*:pvrThinkPadX1Carbon3rd:*
|
|
ModelLenovoT450Touchpad=1
|
|
AttrPalmPressureThreshold=150
|
|
|
|
[Lenovo X1 Carbon 4th Trackpoint]
|
|
MatchUdevType=pointingstick
|
|
MatchName=*TPPS/2 IBM TrackPoint*
|
|
MatchDMIModalias=dmi:*svnLENOVO:*:pvrThinkPadX1Carbon4th*
|
|
AttrTrackpointMultiplier=0.5
|
|
|
|
[Lenovo X1 Carbon 6th Trackpoint]
|
|
MatchUdevType=pointingstick
|
|
MatchName=*TPPS/2 Elan TrackPoint*
|
|
MatchDMIModalias=dmi:*svnLENOVO:*:pvrThinkPadX1Carbon6th*
|
|
AttrTrackpointMultiplier=0.4
|
|
|
|
[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.
|
|
# Initially #103749 and extended by #106799 comment 7
|
|
[Lenovo Thinkpad Yoga]
|
|
MatchName=AT Translated Set 2 keyboard
|
|
MatchDMIModalias=dmi:*svnLENOVO:*pvrThinkPad*Yoga*:*
|
|
ModelTabletModeNoSuspend=1
|
|
|
|
[Lenovo X1 Yoga Trackpoint 1st gen]
|
|
MatchName=*TPPS/2 IBM TrackPoint
|
|
MatchDMIModalias=dmi:*svnLENOVO:*:pvrThinkPadX1Yoga1st:*
|
|
AttrTrackpointMultiplier=1.25
|
|
|
|
# A true pressurepad so let's not use pressure for contact size
|
|
# https://gitlab.freedesktop.org/libinput/libinput/-/issues/562
|
|
[Lenovo Yoga 9i Pressurepad]
|
|
MatchBus=i2c
|
|
MatchVendor=0x06CB
|
|
MatchProduct=0xCE37
|
|
AttrEventCode=-ABS_MT_PRESSURE;-ABS_PRESSURE;
|
|
|
|
[Lenovo Yoga C930 Tablet]
|
|
MatchBus=i2c
|
|
MatchVendor=0x056A
|
|
MatchProduct=0x5196
|
|
AttrTabletSmoothing=1
|
|
|
|
# Lenovo Carbon X1 6th gen (RMI4 only, PS/2 is broken on this device,
|
|
# sends bogus ABS_MT_TOOL_TYPE events for MT_TOOL_PALM
|
|
[Lenovo Carbon X1 6th gen]
|
|
MatchName=Synaptics TM3288-011
|
|
MatchDMIModalias=dmi:*svnLENOVO:*pvrThinkPadX1Carbon6th:*
|
|
AttrEventCode=-ABS_MT_TOOL_TYPE
|
|
ModelLenovoX1Gen6Touchpad=1
|
|
|
|
[Lenovo X41 Tablet]
|
|
MatchName=AT Translated Set 2 keyboard
|
|
MatchDMIModalias=dmi:*svnIBM:*pvrThinkPadX41Tablet:*
|
|
ModelTabletModeNoSuspend=1
|
|
|
|
[Lenovo X60 Tablet]
|
|
MatchName=AT Translated Set 2 keyboard
|
|
MatchDMIModalias=dmi:*svnLENOVO:*pvrThinkPadX60Tablet:*
|
|
ModelTabletModeNoSuspend=1
|
|
|
|
[Lenovo X61 Tablet]
|
|
MatchName=AT Translated Set 2 keyboard
|
|
MatchDMIModalias=dmi:*svnLENOVO:*pvrThinkPadX61Tablet:*
|
|
ModelTabletModeNoSuspend=1
|
|
|
|
# Lenovo X220 Tablet special bezel buttons are associated to the
|
|
# keyboard and would therefore mistakenly be deactivated as well.
|
|
# See https://gitlab.freedesktop.org/libinput/libinput/issues/154
|
|
[Lenovo X220 Tablet]
|
|
MatchName=AT Translated Set 2 keyboard
|
|
MatchDMIModalias=dmi:*svnLENOVO:*pvrThinkPadX220Tablet:*
|
|
ModelTabletModeNoSuspend=1
|
|
|
|
# Special bezel button deactivation with
|
|
# keyboard also applies to X230 Tablet
|
|
[Lenovo X230 Tablet]
|
|
MatchName=AT Translated Set 2 keyboard
|
|
MatchDMIModalias=dmi:*svnLENOVO:*pvrThinkPadX230Tablet:*
|
|
ModelTabletModeNoSuspend=1
|
|
|
|
# Special bezel button deactivation with
|
|
# keyboard also applies to X200 Tablet
|
|
[Lenovo X200 Tablet]
|
|
MatchName=AT Translated Set 2 keyboard
|
|
MatchDMIModalias=dmi:*svnLENOVO:*pvrThinkPadX200Tablet:*
|
|
ModelTabletModeNoSuspend=1
|
|
|
|
[Lenovo X201 Tablet]
|
|
MatchName=At Translated Set 2 keyboard
|
|
MatchDMIModalias=dmi:*svnLENOVO:*pvrThinkPadX201Tablet:*
|
|
ModelTabletModeNoSuspend=1
|
|
|
|
# Lenovo MIIX 720 comes with a detachable keyboard. We must not disable
|
|
# the keyboard because some keys are still accessible on the screen and
|
|
# volume rocker. See
|
|
# https://gitlab.freedesktop.org/libinput/libinput/issues/115
|
|
[Lenovo MIIX 720]
|
|
MatchName=AT Raw Set 2 keyboard
|
|
MatchDMIModalias=dmi:*svnLENOVO:*pvrLenovoMIIX720-12IKB:*
|
|
ModelTabletModeNoSuspend=1
|
|
|
|
# Lenovo ThinkPad X1 Tablet (1st Gen) also comes with a detachable keyboard.
|
|
# We must not disable the keyboard because some keys are still accessible on
|
|
# volume rocker.
|
|
[Lenovo ThinkPad X1 Tablet (1st Gen)]
|
|
MatchName=AT Raw Set 2 keyboard
|
|
MatchDMIModalias=dmi:*svnLENOVO:*pvrThinkPadX1Tablet:*
|
|
ModelTabletModeNoSuspend=1
|
|
|
|
# Misidentified as an external keyboard by libinput
|
|
# Tested on Legion 5 15AR05H
|
|
[Lenovo Legion 5 Keyboard]
|
|
MatchUdevType=keyboard
|
|
MatchBus=usb
|
|
MatchVendor=0x048D
|
|
MatchProduct=0xC100
|
|
AttrKeyboardIntegration=internal
|
|
|
|
[Lenovo Legion 5 Keyboard]
|
|
MatchUdevType=keyboard
|
|
MatchBus=usb
|
|
MatchVendor=0x048D
|
|
MatchProduct=0xC955
|
|
AttrKeyboardIntegration=internal
|
|
|
|
# Tested on Lenovo Legion 5 Pro 16ACH6H
|
|
[Lenovo Legion 5 Pro Keyboard]
|
|
MatchUdevType=keyboard
|
|
MatchBus=usb
|
|
MatchVendor=0x048D
|
|
MatchProduct=0xC101
|
|
AttrKeyboardIntegration=internal
|
|
|
|
[Lenovo Legion 7 Keyboard]
|
|
MatchUdevType=keyboard
|
|
MatchBus=usb
|
|
MatchVendor=0x048D
|
|
MatchProduct=0xC968
|
|
AttrKeyboardIntegration=internal
|
|
|
|
[Lenovo Legion Y740 Keyboard]
|
|
MatchUdevType=keyboard
|
|
MatchBus=usb
|
|
MatchVendor=0x048D
|
|
MatchProduct=0xC936
|
|
AttrKeyboardIntegration=internal
|
|
|
|
[Lenovo Legion Slim 7]
|
|
MatchUdevType=keyboard
|
|
MatchBus=usb
|
|
MatchVendor=0x048D
|
|
MatchProduct=0xC967
|
|
AttrKeyboardIntegration=internal
|
|
|
|
# https://gitlab.freedesktop.org/libinput/libinput/-/issues/604
|
|
[Lenovo Yoga Slim 9 14ITL5 Pressurepad]
|
|
MatchBus=i2c
|
|
MatchVendor=0x27C6
|
|
MatchProduct=0x01E8
|
|
AttrEventCode=-ABS_MT_PRESSURE;-ABS_PRESSURE;
|
|
|
|
# Duet 7i tablet switch activated by folding keyboard cover, or removing it.
|
|
# We must not disable volume rocker 'keyboard'.
|
|
[Lenovo Duet 7i]
|
|
MatchName=AT Raw Set 2 keyboard
|
|
MatchDMIModalias=dmi:*svnLENOVO:*pvrYogaDuet713IML05:*
|
|
ModelTabletModeNoSuspend=1
|
|
|
|
# Lenovo IdeaPad Duet 3 also comes with a detachable keyboard.
|
|
[Lenovo IdeaPad Duet 3]
|
|
MatchName=AT Raw Set 2 keyboard
|
|
MatchDMIModalias=dmi:*svnLENOVO:*pvrIdeaPadDuet3*:*
|
|
ModelTabletModeNoSuspend=1
|
|
|
|
# Modifies pressure range to avoid random jumps.
|
|
# https://gitlab.freedesktop.org/libinput/libinput/-/issues/407
|
|
[Lenovo Yoga 2 Pro touchpad]
|
|
MatchUdevType=touchpad
|
|
MatchName=*SynPS/2 Synaptics TouchPad
|
|
MatchDMIModalias=dmi:*svnLENOVO:*:pvrLenovoYoga2Pro*
|
|
AttrPressureRange=50:45
|