HID: Use hid blacklist in usbmouse/usbkbd
authorPascal Terjan <pterjan@mandriva.com>
Mon, 26 Nov 2007 13:03:52 +0000 (14:03 +0100)
committerJiri Kosina <jkosina@suse.cz>
Mon, 28 Jan 2008 13:51:21 +0000 (14:51 +0100)
This fixes wacom tablets not working if usbmouse is loaded.

Signed-off-by: Pascal Terjan <pterjan@mandriva.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/usbhid/hid-quirks.c
drivers/hid/usbhid/usbkbd.c
drivers/hid/usbhid/usbmouse.c

index dcb102d874140cd496111a8020cceb89df5087c8..23c8993a9845c6eb359235f08617a37be9255a6d 100644 (file)
@@ -911,6 +911,8 @@ u32 usbhid_lookup_quirk(const u16 idVendor, const u16 idProduct)
        return quirks;
 }
 
+EXPORT_SYMBOL_GPL(usbhid_lookup_quirk);
+
 /*
  * Cherry Cymotion keyboard have an invalid HID report descriptor,
  * that needs fixing before we can parse it.
index 775a1ef28a297fc3035f484845917b55ba6c5b29..a31ccb4fca0938e86dbbae48d8bda09b30b9147a 100644 (file)
@@ -235,6 +235,12 @@ static int usb_kbd_probe(struct usb_interface *iface,
        if (!usb_endpoint_is_int_in(endpoint))
                return -ENODEV;
 
+       if (usbhid_lookup_quirk(le16_to_cpu(dev->descriptor.idVendor),
+                               le16_to_cpu(dev->descriptor.idProduct))
+                       & HID_QUIRK_IGNORE) {
+               return -ENODEV;
+       }
+
        pipe = usb_rcvintpipe(dev, endpoint->bEndpointAddress);
        maxp = usb_maxpacket(dev, pipe, usb_pipeout(pipe));
 
index f8ad6910d3d920ccec4f8cf66dcd6b737cbf958f..8ff1b3fe8d6d823405c0a1f60d1f2c96184c5204 100644 (file)
@@ -131,6 +131,12 @@ static int usb_mouse_probe(struct usb_interface *intf, const struct usb_device_i
        if (!usb_endpoint_is_int_in(endpoint))
                return -ENODEV;
 
+       if (usbhid_lookup_quirk(le16_to_cpu(dev->descriptor.idVendor),
+                               le16_to_cpu(dev->descriptor.idProduct))
+                       & (HID_QUIRK_IGNORE|HID_QUIRK_IGNORE_MOUSE)) {
+               return -ENODEV;
+       }
+
        pipe = usb_rcvintpipe(dev, endpoint->bEndpointAddress);
        maxp = usb_maxpacket(dev, pipe, usb_pipeout(pipe));