diff --git a/rules.d/65-integration.rules b/rules.d/65-integration.rules index 5d78c94c387..d9e8af71b1a 100644 --- a/rules.d/65-integration.rules +++ b/rules.d/65-integration.rules @@ -12,13 +12,16 @@ ENV{ID_BUS}=="acpi|platform|i8042|i2c|rmi|spi|pci", ENV{ID_INTEGRATION}="interna # 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" +# USB devices +ENV{ID_BUS}!="usb", GOTO="libinput_integration_compat" +# Do not set integration for the USB root device. +SUBSYSTEM=="usb", ATTR{devpath}=="0", GOTO="libinput_integration_compat" +# Assume the device is external if any parent USB device is removable. +DRIVERS=="usb", ATTRS{removable}=="removable", ENV{ID_INTEGRATION}="external", GOTO="libinput_integration_compat" +# If no parent device is removable, check for fixed parent devices to assume it is internal. +DRIVERS=="usb", ATTRS{removable}=="fixed", ENV{ID_INTEGRATION}="internal", GOTO="libinput_integration_compat" +# Fallback: if all devices in the USB chain are unknown, assume it is external. +ENV{ID_INTEGRATION}="external", GOTO="libinput_integration_compat" # libinput compatibility, must be loaded before 70-touchpad.rules to allow hwdb quirks to override. LABEL="libinput_integration_compat"