|
@@ -779,16 +779,6 @@ static int hid_scan_report(struct hid_device *hid)
|
|
|
(hid->group == HID_GROUP_MULTITOUCH))
|
|
|
hid->group = HID_GROUP_MULTITOUCH_WIN_8;
|
|
|
|
|
|
- /*
|
|
|
- * Vendor specific handlings
|
|
|
- */
|
|
|
- if ((hid->vendor == USB_VENDOR_ID_SYNAPTICS) &&
|
|
|
- (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;
|
|
|
-
|
|
|
/*
|
|
|
* Vendor specific handlings
|
|
|
*/
|
|
@@ -796,6 +786,13 @@ static int hid_scan_report(struct hid_device *hid)
|
|
|
case USB_VENDOR_ID_WACOM:
|
|
|
hid->group = HID_GROUP_WACOM;
|
|
|
break;
|
|
|
+ case USB_VENDOR_ID_SYNAPTICS:
|
|
|
+ if ((hid->group == HID_GROUP_GENERIC) &&
|
|
|
+ (hid->bus != BUS_USB || hid->type == HID_TYPE_USBMOUSE))
|
|
|
+ /* hid-rmi should only bind to the mouse interface of
|
|
|
+ * composite USB devices */
|
|
|
+ hid->group = HID_GROUP_RMI;
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
vfree(parser);
|
|
@@ -1910,6 +1907,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
|
|
|
{ HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_PS1000) },
|
|
|
{ HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RAT7) },
|
|
|
{ HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_MMO7) },
|
|
|
+ { HID_USB_DEVICE(USB_VENDOR_ID_MADCATZ, USB_DEVICE_ID_MADCATZ_RAT9) },
|
|
|
#endif
|
|
|
{ HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_IR_REMOTE) },
|
|
|
{ HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_WIRELESS_KBD_MOUSE) },
|
|
@@ -2539,7 +2537,8 @@ int hid_add_device(struct hid_device *hdev)
|
|
|
* Scan generic devices for group information
|
|
|
*/
|
|
|
if (hid_ignore_special_drivers ||
|
|
|
- !hid_match_id(hdev, hid_have_special_driver)) {
|
|
|
+ (!hdev->group &&
|
|
|
+ !hid_match_id(hdev, hid_have_special_driver))) {
|
|
|
ret = hid_scan_report(hdev);
|
|
|
if (ret)
|
|
|
hid_warn(hdev, "bad device descriptor (%d)\n", ret);
|