Add HID_QUIRK_HIDDEV_FORCE and HID_QUIRK_NO_IGNORE
PATCH 1/1 Add HID_QUIRK_HIDDEV_FORCE and HID_QUIRK_NO_IGNORE
Add two quirks to make it possible for usbhid module options to override whether a device is ignored (HID_QUIRK_NO_IGNORE) and whether to connect a hiddev device (HID_QUIRK_HIDDEV_FORCE).
Passing HID_QUIRK_NO_IGNORE for your device means that it will not be ignored by the HID layer, even if present in a blacklist.
HID_QUIRK_HIDDEV_FORCE will force the creation of a hiddev for that device, making it accessible from user-space.
Tested with an Apple IR Receiver, switching it from using appleir to using lirc's macmini driver.
--- drivers/hid/hid-core.c | 4 +++- drivers/hid/usbhid/hid-core.c | 1 + include/linux/hid.h | 2 ++ 3 files changed, 6 insertions(+), 1 deletions(-)
drivers/hid/hid-core.c +3 -1
@@ -1172,6 +1172,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))
@@ -1761,7 +1763,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
drivers/hid/usbhid/hid-core.c +1 -0
@@ -1140,6 +1140,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 ;
include/linux/hid.h +2 -0
@@ -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
Signature · 1 line
1.6.6.1
Jiri Kosina
AppliedQuoted 4 lines · Bastien Nocera
Add two quirks to make it possible for usbhid module options to override whether a device is ignored (
HID_QUIRK_NO_IGNORE) and whether to connect a hiddev device (HID_QUIRK_HIDDEV_FORCE).
Quoted 8 lines
Passing
HID_QUIRK_NO_IGNOREfor your device means that it will not be ignored by the HID layer, even if present in a blacklist.
HID_QUIRK_HIDDEV_FORCEwill force the creation of a hiddev for that device, making it accessible from user-space.Tested with an Apple IR Receiver, switching it from using appleir to using lirc's macmini driver.
Applied, thanks.
Signature · 2 lines
Jiri Kosina SUSE Labs, Novell Inc.