mirror of
https://github.com/systemd/systemd.git
synced 2026-06-24 08:47:49 +00:00
usb hubs tend to expose removable attribute as unknown. This makes some
problems like a hub for external usb ports in pogo pins is unknown and
also soldered hubs in laptops for keyboard+touchpad.
Let's set internal when the device removable attribute is fixed and
external when removable, but when it's unknown lets check the parent
ports (not the host devpath!=0) attribute to decide.
This makes us to missdetect pogo ping connected external usb hubs but
let us to correctly detect laptop internal keyboards and touchpads that
are wired through hubs instead directly.
This behaviour is more desirable, as actually there are a bunch of
laptops with this setup.
Fixes: a4381cae8b.
28 lines
1.6 KiB
Plaintext
28 lines
1.6 KiB
Plaintext
# do not edit this file, it will be overwritten on update
|
|
|
|
# ID_INTEGRATION variable tells us if a device is internal (inherent part of the system) or external otherwise.
|
|
# This must be loaded after 60-persistent-*.rules to have ID_BUS.
|
|
|
|
ACTION=="remove", GOTO="integration_end"
|
|
ENV{ID_BUS}=="", GOTO="integration_end"
|
|
|
|
# ACPI, platform, PS/2, I2C, RMI, SPI and PCI devices: Internal by default.
|
|
ENV{ID_BUS}=="acpi|platform|i8042|i2c|rmi|spi|pci", ENV{ID_INTEGRATION}="internal", GOTO="libinput_integration_compat"
|
|
|
|
# Bluetooth devices: External by default.
|
|
ENV{ID_BUS}=="bluetooth", ENV{ID_INTEGRATION}="external", GOTO="libinput_integration_compat"
|
|
|
|
# USB devices: Internal if it's connected to a fixed port, external to a removable and if it's unknown we use the main parent device attribute.
|
|
ENV{ID_BUS}!="usb", GOTO="usb_integration_end"
|
|
DRIVERS=="usb", ATTRS{maxchild}=="0", ATTRS{removable}=="fixed", ENV{ID_INTEGRATION}="internal", GOTO="libinput_integration_compat"
|
|
DRIVERS=="usb", ATTRS{maxchild}=="0", ATTRS{removable}=="removable", ENV{ID_INTEGRATION}="external", GOTO="libinput_integration_compat"
|
|
DRIVERS=="usb", ATTRS{devpath}!="0", ATTRS{removable}=="fixed", ENV{ID_INTEGRATION}="internal", GOTO="libinput_integration_compat"
|
|
DRIVERS=="usb", ATTRS{devpath}!="0", ATTRS{removable}=="removable|unknown", ENV{ID_INTEGRATION}="external", GOTO="libinput_integration_compat"
|
|
LABEL="usb_integration_end"
|
|
|
|
# libinput compatibility, must be loaded before 70-touchpad.rules to allow hwdb quirks to override.
|
|
LABEL="libinput_integration_compat"
|
|
ENV{ID_INPUT_TOUCHPAD}=="1", ENV{ID_INPUT_TOUCHPAD_INTEGRATION}="$env{ID_INTEGRATION}"
|
|
|
|
LABEL="integration_end"
|