Since the BT device is off the bus, trying to query it from the udev database fails. We need to send the parent's DEVPATH (unfortunately by pulling in from the $env) and then go from there. === modified file 'extras/hid2hci/70-hid2hci.rules' --- extras/hid2hci/70-hid2hci.rules 2009-07-24 16:06:22 +0000 +++ extras/hid2hci/70-hid2hci.rules 2009-07-27 21:03:40 +0000 @@ -20,8 +20,8 @@ # Unfortunately the only event seen is the BT device disappearing, so the mouse # device needs to be chased down on the USB bus. ATTR{bDeviceClass}=="e0", ATTR{bDeviceSubClass}=="01", ATTR{bDeviceProtocol}=="01", \ - ATTR{idVendor}=="413c", ATTR{bmAttributes}=="e0", \ - ENV{REMOVE_CMD}="hid2hci --method=dell --devpath=%p --find-sibling-intf=03:01:02" + ATTR{idVendor}=="413c", ATTR{bmAttributes}=="e0", IMPORT{parent}="DEVPATH", \ + ENV{REMOVE_CMD}="hid2hci --method=dell --devpath=$env{DEVPATH} --find-sibling-intf=03:01:02" # CSR devices ATTR{idVendor}=="0a12|0458|05ac", ATTR{idProduct}=="1000", RUN+="hid2hci --method=csr --devpath=%p" === modified file 'extras/hid2hci/hid2hci.c' --- extras/hid2hci/hid2hci.c 2009-07-27 20:45:34 +0000 +++ extras/hid2hci/hid2hci.c 2009-07-27 21:03:40 +0000 @@ -210,11 +210,6 @@ return usb_open(dev); } - /* find matching sibling of the current usb_device, they share the same hub */ - udev_parent = udev_device_get_parent_with_subsystem_devtype(udev_dev, "usb", "usb_device"); - if (udev_parent == NULL) - return NULL; - enumerate = udev_enumerate_new(udev); if (enumerate == NULL) return NULL; @@ -222,7 +217,7 @@ udev_enumerate_add_match_subsystem(enumerate, "usb"); /* match all childs of the parent */ - util_strscpyl(str, sizeof(str), udev_device_get_sysname(udev_parent), "*", NULL); + util_strscpyl(str, sizeof(str), udev_device_get_sysname(udev_dev), "*", NULL); udev_enumerate_add_match_sysname(enumerate, str); /* match the specified interface */