diff options
| -rw-r--r-- | drivers/hid/hid-core.c | 4 | ||||
| -rw-r--r-- | drivers/hid/usbhid/hid-core.c | 1 | ||||
| -rw-r--r-- | include/linux/hid.h | 2 | 
3 files changed, 6 insertions, 1 deletions
| diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index 8617aa97a9c8..468c6c2d4ad5 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c @@ -1168,6 +1168,8 @@ int hid_connect(struct hid_device *hdev, unsigned int connect_mask)  	unsigned int i;  	int len; +	if (hdev->quirks & HID_QUIRK_HIDDEV_FORCE) +		connect_mask |= (HID_CONNECT_HIDDEV_FORCE | HID_CONNECT_HIDDEV);  	if (hdev->bus != BUS_USB)  		connect_mask &= ~HID_CONNECT_HIDDEV;  	if (hid_hiddev(hdev)) @@ -1757,7 +1759,7 @@ int hid_add_device(struct hid_device *hdev)  	/* we need to kill them here, otherwise they will stay allocated to  	 * wait for coming driver */ -	if (hid_ignore(hdev)) +	if (!(hdev->quirks & HID_QUIRK_NO_IGNORE) && hid_ignore(hdev))  		return -ENODEV;  	/* XXX hack, any other cleaner solution after the driver core diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c index 9cd61a52e9e3..245aef0de8f2 100644 --- a/drivers/hid/usbhid/hid-core.c +++ b/drivers/hid/usbhid/hid-core.c @@ -1143,6 +1143,7 @@ static int usbhid_probe(struct usb_interface *intf, const struct usb_device_id *  	hid->vendor = le16_to_cpu(dev->descriptor.idVendor);  	hid->product = le16_to_cpu(dev->descriptor.idProduct);  	hid->name[0] = 0; +	hid->quirks = usbhid_lookup_quirk(hid->vendor, hid->product);  	if (intf->cur_altsetting->desc.bInterfaceProtocol ==  			USB_INTERFACE_PROTOCOL_MOUSE)  		hid->type = HID_TYPE_USBMOUSE; diff --git a/include/linux/hid.h b/include/linux/hid.h index b1344ec4b7fc..f1f2b6f0d1c4 100644 --- a/include/linux/hid.h +++ b/include/linux/hid.h @@ -308,11 +308,13 @@ struct hid_item {  #define HID_QUIRK_NOTOUCH			0x00000002  #define HID_QUIRK_IGNORE			0x00000004  #define HID_QUIRK_NOGET				0x00000008 +#define HID_QUIRK_HIDDEV_FORCE			0x00000010  #define HID_QUIRK_BADPAD			0x00000020  #define HID_QUIRK_MULTI_INPUT			0x00000040  #define HID_QUIRK_SKIP_OUTPUT_REPORTS		0x00010000  #define HID_QUIRK_FULLSPEED_INTERVAL		0x10000000  #define HID_QUIRK_NO_INIT_REPORTS		0x20000000 +#define HID_QUIRK_NO_IGNORE			0x40000000  /*   * This is the global environment of the parser. This information is | 
