aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiri Kosina <jkosina@suse.cz>2007-05-19 10:28:04 -0400
committerJiri Kosina <jkosina@suse.cz>2007-07-09 08:13:29 -0400
commitdefd208681b721dbf2b69347cca5302d60246405 (patch)
tree4e4d3e65ba9e840ea5db3e7170051d3314284375
parentcb1d93c98c49e268918e35e45e5c407fc4dc4e9f (diff)
HID: force hid-input for Microsoft SideWinder GameVoice device
Microsoft SideWinder GameVoice driver is a trivial device with a few buttons (0x09 HID usage) and an audio connector, which just forwards the audio input into oridinary sound card present in the computer. Despite this fact, the only interface of this device reports itself as a Telephony/Headset type of HID device. This is apparently incorrect - the device itself doesn't provide any audio/telephony functionality. This is achieved in userland application which only needs to receive the button events from the HID driver. This patch establishes a new quirk which forces hid-input to claim a device it will otherwise leave untouched. Reported-by: Tomas Carnecky <tom@dbservice.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
-rw-r--r--drivers/hid/hid-input.c2
-rw-r--r--drivers/hid/usbhid/hid-quirks.c4
-rw-r--r--include/linux/hid.h1
3 files changed, 6 insertions, 1 deletions
diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
index ce6d7644e6a1..70bf54167083 100644
--- a/drivers/hid/hid-input.c
+++ b/drivers/hid/hid-input.c
@@ -997,7 +997,7 @@ int hidinput_connect(struct hid_device *hid)
997 if (IS_INPUT_APPLICATION(hid->collection[i].usage)) 997 if (IS_INPUT_APPLICATION(hid->collection[i].usage))
998 break; 998 break;
999 999
1000 if (i == hid->maxcollection) 1000 if (i == hid->maxcollection && (hid->quirks & HID_QUIRK_HIDINPUT) == 0)
1001 return -1; 1001 return -1;
1002 1002
1003 if (hid->quirks & HID_QUIRK_SKIP_OUTPUT_REPORTS) 1003 if (hid->quirks & HID_QUIRK_SKIP_OUTPUT_REPORTS)
diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
index f6c4145dc202..62a7f1e9b58c 100644
--- a/drivers/hid/usbhid/hid-quirks.c
+++ b/drivers/hid/usbhid/hid-quirks.c
@@ -209,6 +209,9 @@
209#define USB_DEVICE_ID_MGE_UPS 0xffff 209#define USB_DEVICE_ID_MGE_UPS 0xffff
210#define USB_DEVICE_ID_MGE_UPS1 0x0001 210#define USB_DEVICE_ID_MGE_UPS1 0x0001
211 211
212#define USB_VENDOR_ID_MICROSOFT 0x045e
213#define USB_DEVICE_ID_SIDEWINDER_GV 0x003b
214
212#define USB_VENDOR_ID_NEC 0x073e 215#define USB_VENDOR_ID_NEC 0x073e
213#define USB_DEVICE_ID_NEC_USB_GAME_PAD 0x0301 216#define USB_DEVICE_ID_NEC_USB_GAME_PAD 0x0301
214 217
@@ -290,6 +293,7 @@ static const struct hid_blacklist {
290 { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_DINOVO_EDGE, HID_QUIRK_DUPLICATE_USAGES }, 293 { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_DINOVO_EDGE, HID_QUIRK_DUPLICATE_USAGES },
291 294
292 { USB_VENDOR_ID_BELKIN, USB_DEVICE_ID_FLIP_KVM, HID_QUIRK_HIDDEV }, 295 { USB_VENDOR_ID_BELKIN, USB_DEVICE_ID_FLIP_KVM, HID_QUIRK_HIDDEV },
296 { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_SIDEWINDER_GV, HID_QUIRK_HIDINPUT },
293 297
294 { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_01, HID_QUIRK_IGNORE }, 298 { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_01, HID_QUIRK_IGNORE },
295 { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_10, HID_QUIRK_IGNORE }, 299 { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_10, HID_QUIRK_IGNORE },
diff --git a/include/linux/hid.h b/include/linux/hid.h
index 827ee748fd4c..6e45d1056e1b 100644
--- a/include/linux/hid.h
+++ b/include/linux/hid.h
@@ -276,6 +276,7 @@ struct hid_item {
276#define HID_QUIRK_DUPLICATE_USAGES 0x00200000 276#define HID_QUIRK_DUPLICATE_USAGES 0x00200000
277#define HID_QUIRK_RESET_LEDS 0x00400000 277#define HID_QUIRK_RESET_LEDS 0x00400000
278#define HID_QUIRK_SWAPPED_MIN_MAX 0x00800000 278#define HID_QUIRK_SWAPPED_MIN_MAX 0x00800000
279#define HID_QUIRK_HIDINPUT 0x01000000
279 280
280/* 281/*
281 * This is the global environment of the parser. This information is 282 * This is the global environment of the parser. This information is