aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hid/usbhid
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/hid/usbhid')
-rw-r--r--drivers/hid/usbhid/hid-quirks.c2
-rw-r--r--drivers/hid/usbhid/usbkbd.c6
-rw-r--r--drivers/hid/usbhid/usbmouse.c6
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
914EXPORT_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