HID: rmi: only bind the hid-rmi driver to the mouse interface of composite USB devices
authorAndrew Duggan <aduggan@synaptics.com>
Thu, 17 Jul 2014 23:14:45 +0000 (16:14 -0700)
committerJiri Kosina <jkosina@suse.cz>
Tue, 29 Jul 2014 09:28:49 +0000 (11:28 +0200)
On composite HID devices there may be multiple HID devices on separate interfaces, but hid-rmi
should only bind to the mouse interface. One example is the Dell Venue 11 Pro's keyboard dock
which contains a composite USB device with a HID touchpad and HID keyboard on separate intefaces.
Since the USB Vendor ID is Synaptic's, hid-core is currently trying to bind hid-rmi to all\of
the HID devices. This patch ensures that hid-rmi only binds to the mouse interface.

related bug:
https://bugzilla.kernel.org/show_bug.cgi?id=80091

Signed-off-by: Andrew Duggan <aduggan@synaptics.com>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-core.c

index 8ed66fd1ea87616416310884de0793d32ffabb6d..f10e768b4caf3059e6ed0536b77fc07564940b42 100644 (file)
@@ -783,7 +783,9 @@ static int hid_scan_report(struct hid_device *hid)
        * Vendor specific handlings
        */
        if ((hid->vendor == USB_VENDOR_ID_SYNAPTICS) &&
-           (hid->group == HID_GROUP_GENERIC))
+           (hid->group == HID_GROUP_GENERIC) &&
+           /* only bind to the mouse interface of composite USB devices */
+           (hid->bus != BUS_USB || hid->type == HID_TYPE_USBMOUSE))
                /* hid-rmi should take care of them, not hid-generic */
                hid->group = HID_GROUP_RMI;