• Peter Hurley's avatar
    Fix device matching for recent kernels · 9f310687
    Peter Hurley authored
    In recent kernels, hiddev* devices now have class "usbmisc", rather
    than "usb" (see http://www.spinics.net/lists/linux-usb/msg62276.html).
    This change translates into a change in SUBSYSTEM matching for hiddev*
    devices. This fix addresses this for recent kernels while retaining
    existing behavior. For reference, here is an attribute-walk for a
    CyberPower CPS 1500C on kernel 3.7.0:
    
    [Ubuntu bug #1091702: udev rules fail to match hid devices with new kernels]
    
    udevadm info --attribute-walk --path=/devices/pci0000:00/0000:00:1d.2/usb4/4-1/4-1:1.0/usbmisc/hiddev0
    
    Udevadm info starts with the device specified by the devpath and then
    walks up the chain of parent devices. It prints for every device
    found, all possible attributes in the udev rules key format.
    A rule to match, can be composed by the attributes of the device
    and the attributes from one single parent device.
    
      looking at device '/devices/pci0000:00/0000:00:1d.2/usb4/4-1/4-1:1.0/usbmisc/hiddev0':
        KERNEL=="hiddev0"
        SUBSYSTEM=="usbmisc"
        DRIVER==""
    
      looking at parent device '/devices/pci0000:00/0000:00:1d.2/usb4/4-1/4-1:1.0':
        KERNELS=="4-1:1.0"
        SUBSYSTEMS=="usb"
        DRIVERS=="usbhid"
        ATTRS{bInterfaceClass}=="03"
        ATTRS{bInterfaceSubClass}=="00"
        ATTRS{bInterfaceProtocol}=="00"
        ATTRS{bNumEndpoints}=="01"
        ATTRS{supports_autosuspend}=="1"
        ATTRS{bAlternateSetting}==" 0"
        ATTRS{bInterfaceNumber}=="00"
    
      looking at parent device '/devices/pci0000:00/0000:00:1d.2/usb4/4-1':
        KERNELS=="4-1"
        SUBSYSTEMS=="usb"
        DRIVERS=="usb"
        ATTRS{bDeviceSubClass}=="00"
        ATTRS{bDeviceProtocol}=="00"
        ATTRS{devpath}=="1"
        ATTRS{idVendor}=="0764"
        ATTRS{speed}=="1.5"
        ATTRS{bNumInterfaces}==" 1"
        ATTRS{bConfigurationValue}=="1"
        ATTRS{bMaxPacketSize0}=="8"
        ATTRS{busnum}=="4"
        ATTRS{devnum}=="2"
        ATTRS{configuration}==""
        ATTRS{bMaxPower}==" 50mA"
        ATTRS{authorized}=="1"
        ATTRS{bmAttributes}=="c0"
        ATTRS{bNumConfigurations}=="1"
        ATTRS{maxchild}=="0"
        ATTRS{bcdDevice}=="0001"
        ATTRS{avoid_reset_quirk}=="0"
        ATTRS{quirks}=="0x0"
        ATTRS{version}==" 1.10"
        ATTRS{urbnum}=="36"
        ATTRS{ltm_capable}=="no"
        ATTRS{manufacturer}=="CPS"
        ATTRS{removable}=="unknown"
        ATTRS{idProduct}=="0501"
        ATTRS{bDeviceClass}=="00"
        ATTRS{product}==" CP 1500C"
    
      looking at parent device '/devices/pci0000:00/0000:00:1d.2/usb4':
        KERNELS=="usb4"
        SUBSYSTEMS=="usb"
        DRIVERS=="usb"
        ATTRS{bDeviceSubClass}=="00"
        ATTRS{bDeviceProtocol}=="00"
        ATTRS{devpath}=="0"
        ATTRS{idVendor}=="1d6b"
        ATTRS{speed}=="12"
        ATTRS{bNumInterfaces}==" 1"
        ATTRS{bConfigurationValue}=="1"
        ATTRS{bMaxPacketSize0}=="64"
        ATTRS{authorized_default}=="1"
        ATTRS{busnum}=="4"
        ATTRS{devnum}=="1"
        ATTRS{configuration}==""
        ATTRS{bMaxPower}=="  0mA"
        ATTRS{authorized}=="1"
        ATTRS{bmAttributes}=="e0"
        ATTRS{bNumConfigurations}=="1"
        ATTRS{maxchild}=="2"
        ATTRS{bcdDevice}=="0307"
        ATTRS{avoid_reset_quirk}=="0"
        ATTRS{quirks}=="0x0"
        ATTRS{serial}=="0000:00:1d.2"
        ATTRS{version}==" 1.10"
        ATTRS{urbnum}=="50"
        ATTRS{ltm_capable}=="no"
        ATTRS{manufacturer}=="Linux 3.7.0-030700-generic uhci_hcd"
        ATTRS{removable}=="unknown"
        ATTRS{idProduct}=="0001"
        ATTRS{bDeviceClass}=="09"
        ATTRS{product}=="UHCI Host Controller"
    
      looking at parent device '/devices/pci0000:00/0000:00:1d.2':
        KERNELS=="0000:00:1d.2"
        SUBSYSTEMS=="pci"
        DRIVERS=="uhci_hcd"
        ATTRS{irq}=="18"
        ATTRS{subsystem_vendor}=="0x1028"
        ATTRS{broken_parity_status}=="0"
        ATTRS{class}=="0x0c0300"
        ATTRS{consistent_dma_mask_bits}=="32"
        ATTRS{dma_mask_bits}=="32"
        ATTRS{local_cpus}=="00000000,00000000,00000000,00000000,00000000,00000000,00000000,000000ff"
        ATTRS{device}=="0x268a"
        ATTRS{msi_bus}==""
        ATTRS{local_cpulist}=="0-7"
        ATTRS{vendor}=="0x8086"
        ATTRS{subsystem_device}=="0x021e"
        ATTRS{numa_node}=="-1"
        ATTRS{d3cold_allowed}=="0"
    
      looking at parent device '/devices/pci0000:00':
        KERNELS=="pci0000:00"
        SUBSYSTEMS==""
        DRIVERS==""
    Signed-off-by: default avatarPeter Hurley <peter@hurleysoftware.com>
    Signed-off-by: Richard Hughes's avatarRichard Hughes <richard@hughsie.com>
    9f310687
95-upower-hid.rules 6.02 KB