diff options
-rw-r--r-- | drivers/hid/usbhid/hid-quirks.c | 2 | ||||
-rw-r--r-- | drivers/hid/usbhid/usbkbd.c | 6 | ||||
-rw-r--r-- | drivers/hid/usbhid/usbmouse.c | 6 |
3 files changed, 14 insertions, 0 deletions
diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c index dcb102d87414..23c8993a9845 100644 --- a/drivers/hid/usbhid/hid-quirks.c +++ b/drivers/hid/usbhid/hid-quirks.c | |||
@@ -911,6 +911,8 @@ u32 usbhid_lookup_quirk(const u16 idVendor, const u16 idProduct) | |||
911 | return quirks; | 911 | return quirks; |
912 | } | 912 | } |
913 | 913 | ||
914 | EXPORT_SYMBOL_GPL(usbhid_lookup_quirk); | ||
915 | |||
914 | /* | 916 | /* |
915 | * Cherry Cymotion keyboard have an invalid HID report descriptor, | 917 | * Cherry Cymotion keyboard have an invalid HID report descriptor, |
916 | * that needs fixing before we can parse it. | 918 | * that needs fixing before we can parse it. |
diff --git a/drivers/hid/usbhid/usbkbd.c b/drivers/hid/usbhid/usbkbd.c index 775a1ef28a29..a31ccb4fca09 100644 --- a/drivers/hid/usbhid/usbkbd.c +++ b/drivers/hid/usbhid/usbkbd.c | |||
@@ -235,6 +235,12 @@ static int usb_kbd_probe(struct usb_interface *iface, | |||
235 | if (!usb_endpoint_is_int_in(endpoint)) | 235 | if (!usb_endpoint_is_int_in(endpoint)) |
236 | return -ENODEV; | 236 | return -ENODEV; |
237 | 237 | ||
238 | if (usbhid_lookup_quirk(le16_to_cpu(dev->descriptor.idVendor), | ||
239 | le16_to_cpu(dev->descriptor.idProduct)) | ||
240 | & HID_QUIRK_IGNORE) { | ||
241 | return -ENODEV; | ||
242 | } | ||
243 | |||
238 | pipe = usb_rcvintpipe(dev, endpoint->bEndpointAddress); | 244 | pipe = usb_rcvintpipe(dev, endpoint->bEndpointAddress); |
239 | maxp = usb_maxpacket(dev, pipe, usb_pipeout(pipe)); | 245 | maxp = usb_maxpacket(dev, pipe, usb_pipeout(pipe)); |
240 | 246 | ||
diff --git a/drivers/hid/usbhid/usbmouse.c b/drivers/hid/usbhid/usbmouse.c index f8ad6910d3d9..8ff1b3fe8d6d 100644 --- a/drivers/hid/usbhid/usbmouse.c +++ b/drivers/hid/usbhid/usbmouse.c | |||
@@ -131,6 +131,12 @@ static int usb_mouse_probe(struct usb_interface *intf, const struct usb_device_i | |||
131 | if (!usb_endpoint_is_int_in(endpoint)) | 131 | if (!usb_endpoint_is_int_in(endpoint)) |
132 | return -ENODEV; | 132 | return -ENODEV; |
133 | 133 | ||
134 | if (usbhid_lookup_quirk(le16_to_cpu(dev->descriptor.idVendor), | ||
135 | le16_to_cpu(dev->descriptor.idProduct)) | ||
136 | & (HID_QUIRK_IGNORE|HID_QUIRK_IGNORE_MOUSE)) { | ||
137 | return -ENODEV; | ||
138 | } | ||
139 | |||
134 | pipe = usb_rcvintpipe(dev, endpoint->bEndpointAddress); | 140 | pipe = usb_rcvintpipe(dev, endpoint->bEndpointAddress); |
135 | maxp = usb_maxpacket(dev, pipe, usb_pipeout(pipe)); | 141 | maxp = usb_maxpacket(dev, pipe, usb_pipeout(pipe)); |
136 | 142 | ||