mirror of
https://github.com/systemd/systemd.git
synced 2026-11-07 13:57:10 +00:00
Only PCI was treated as a "less specific" bus that should not be assigned if USB was already assigned, so non-PCI USB controllers (under platform/DT or ACPI) would have all their devices *not* treated as USB at all, resulting in external peripherals being treated as internal ones on DT platforms. Clarify these assignments into specificity/nesting groups instead of having some arbitrary "X must be before Y" comments. Fixesa4381cae8b. (cherry picked from commitd4f1a76a2e) (cherry picked from commit5e602b3298)
60 lines
3.7 KiB
Plaintext
60 lines
3.7 KiB
Plaintext
# do not edit this file, it will be overwritten on update
|
|
|
|
ACTION=="remove", GOTO="persistent_input_end"
|
|
SUBSYSTEM!="input", GOTO="persistent_input_end"
|
|
SUBSYSTEMS=="bluetooth", ENV{ID_BUS}="bluetooth", GOTO="persistent_input_end"
|
|
# Bluetooth devices don't always have the bluetooth subsystem
|
|
ATTRS{id/bustype}=="0005", ENV{ID_BUS}="bluetooth", GOTO="persistent_input_end"
|
|
|
|
# we have to assign the most specific bus, so first check for leaf buses
|
|
SUBSYSTEMS=="i2c", ENV{ID_BUS}="i2c"
|
|
SUBSYSTEMS=="rmi4", ENV{ID_BUS}="rmi"
|
|
SUBSYSTEMS=="serio", ENV{ID_BUS}="i8042"
|
|
SUBSYSTEMS=="spi", ENV{ID_BUS}="spi"
|
|
|
|
# then only assign something less specific if ID_BUS was not set yet..
|
|
# usb has middle specificity (e.g. could have an i2c bridge on it, but is under acpi/pci/platform)
|
|
SUBSYSTEMS=="usb", ENV{ID_BUS}=="", IMPORT{builtin}="usb_id"
|
|
|
|
# pci is usually below acpi/platform
|
|
SUBSYSTEMS=="pci", ENV{ID_BUS}=="", ENV{ID_BUS}="pci"
|
|
|
|
# finally, these are the root buses
|
|
SUBSYSTEMS=="acpi", ENV{ID_BUS}=="", ENV{ID_BUS}="acpi"
|
|
SUBSYSTEMS=="platform", ENV{ID_BUS}=="", ENV{ID_BUS}="platform"
|
|
|
|
# determine class name for persistent symlinks
|
|
ENV{ID_INPUT_KEYBOARD}=="?*", ENV{.INPUT_CLASS}="kbd"
|
|
ENV{ID_INPUT_MOUSE}=="?*", ENV{.INPUT_CLASS}="mouse"
|
|
ENV{ID_INPUT_TOUCHPAD}=="?*", ENV{.INPUT_CLASS}="mouse"
|
|
ENV{ID_INPUT_TABLET}=="?*", ENV{.INPUT_CLASS}="mouse"
|
|
ENV{ID_INPUT_JOYSTICK}=="?*", ENV{.INPUT_CLASS}="joystick"
|
|
DRIVERS=="pcspkr", ENV{.INPUT_CLASS}="spkr"
|
|
ATTRS{name}=="*dvb*|*DVB*|* IR *", ENV{.INPUT_CLASS}="ir"
|
|
|
|
# fill empty serial number
|
|
ENV{.INPUT_CLASS}=="?*", ENV{ID_SERIAL}=="", ENV{ID_SERIAL}="noserial"
|
|
|
|
# by-id links
|
|
KERNEL=="mouse*|js*", ENV{ID_BUS}=="?*", ENV{.INPUT_CLASS}=="?*", ATTRS{bInterfaceNumber}=="|00", SYMLINK+="input/by-id/$env{ID_BUS}-$env{ID_SERIAL}-$env{.INPUT_CLASS}"
|
|
KERNEL=="mouse*|js*", ENV{ID_BUS}=="?*", ENV{.INPUT_CLASS}=="?*", ATTRS{bInterfaceNumber}=="?*", ATTRS{bInterfaceNumber}!="00", SYMLINK+="input/by-id/$env{ID_BUS}-$env{ID_SERIAL}-if$attr{bInterfaceNumber}-$env{.INPUT_CLASS}"
|
|
KERNEL=="event*", ENV{ID_BUS}=="?*", ENV{.INPUT_CLASS}=="?*", ATTRS{bInterfaceNumber}=="|00", SYMLINK+="input/by-id/$env{ID_BUS}-$env{ID_SERIAL}-event-$env{.INPUT_CLASS}"
|
|
KERNEL=="event*", ENV{ID_BUS}=="?*", ENV{.INPUT_CLASS}=="?*", ATTRS{bInterfaceNumber}=="?*", ATTRS{bInterfaceNumber}!="00", SYMLINK+="input/by-id/$env{ID_BUS}-$env{ID_SERIAL}-if$attr{bInterfaceNumber}-event-$env{.INPUT_CLASS}"
|
|
# allow empty class for USB devices, by appending the interface number
|
|
SUBSYSTEMS=="usb", ENV{ID_BUS}=="?*", KERNEL=="event*", ENV{.INPUT_CLASS}=="", ATTRS{bInterfaceNumber}=="?*", \
|
|
SYMLINK+="input/by-id/$env{ID_BUS}-$env{ID_SERIAL}-event-if$attr{bInterfaceNumber}"
|
|
|
|
# by-path
|
|
SUBSYSTEMS=="pci|usb|platform|acpi", IMPORT{builtin}="path_id"
|
|
ENV{.INPUT_CLASS}=="?*", KERNEL=="mouse*|js*", ENV{ID_PATH}=="?*", SYMLINK+="input/by-path/$env{ID_PATH}-$env{.INPUT_CLASS}"
|
|
ENV{.INPUT_CLASS}=="?*", KERNEL=="mouse*|js*", ENV{ID_PATH_WITH_USB_REVISION}=="?*", SYMLINK+="input/by-path/$env{ID_PATH_WITH_USB_REVISION}-$env{.INPUT_CLASS}"
|
|
ENV{.INPUT_CLASS}=="?*", KERNEL=="event*", ENV{ID_PATH}=="?*", SYMLINK+="input/by-path/$env{ID_PATH}-event-$env{.INPUT_CLASS}"
|
|
ENV{.INPUT_CLASS}=="?*", KERNEL=="event*", ENV{ID_PATH_WITH_USB_REVISION}=="?*", SYMLINK+="input/by-path/$env{ID_PATH_WITH_USB_REVISION}-event-$env{.INPUT_CLASS}"
|
|
# allow empty class for platform, usb and i2c devices; platform supports only a single interface that way
|
|
SUBSYSTEMS=="usb|platform|i2c", KERNEL=="event*", ENV{.INPUT_CLASS}=="", ENV{ID_PATH}=="?*", \
|
|
SYMLINK+="input/by-path/$env{ID_PATH}-event"
|
|
SUBSYSTEMS=="usb|platform|i2c", KERNEL=="event*", ENV{.INPUT_CLASS}=="", ENV{ID_PATH_WITH_USB_REVISION}=="?*", \
|
|
SYMLINK+="input/by-path/$env{ID_PATH_WITH_USB_REVISION}-event"
|
|
|
|
LABEL="persistent_input_end"
|