mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	USB HID: encapsulate quirk handling into hid-quirks.c
Move the USB_VENDOR* and USB_DEVICE* defines and the hid_blacklist[] array there from hid-core.c. Add hid-quirks.c:usbhid_lookup_any_quirks() to return quirk information to hid-core.c. Convert __u32, __u16 types to u32, u16. Signed-off-by: Paul Walmsley <paul@booyaka.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
		
							parent
							
								
									4d5a1be98d
								
							
						
					
					
						commit
						2eb5dc30eb
					
				
					 4 changed files with 489 additions and 446 deletions
				
			
		| 
						 | 
				
			
			@ -3,7 +3,7 @@
 | 
			
		|||
#
 | 
			
		||||
 | 
			
		||||
# Multipart objects.
 | 
			
		||||
usbhid-objs	:= hid-core.o
 | 
			
		||||
usbhid-objs	:= hid-core.o hid-quirks.o
 | 
			
		||||
 | 
			
		||||
# Optional parts of multipart objects.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,437 +53,6 @@ static unsigned int hid_mousepoll_interval;
 | 
			
		|||
module_param_named(mousepoll, hid_mousepoll_interval, uint, 0644);
 | 
			
		||||
MODULE_PARM_DESC(mousepoll, "Polling interval of mice");
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_A4TECH		0x09da
 | 
			
		||||
#define USB_DEVICE_ID_A4TECH_WCP32PU	0x0006
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_AASHIMA		0x06d6
 | 
			
		||||
#define USB_DEVICE_ID_AASHIMA_GAMEPAD	0x0025
 | 
			
		||||
#define USB_DEVICE_ID_AASHIMA_PREDATOR	0x0026
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_ACECAD		0x0460
 | 
			
		||||
#define USB_DEVICE_ID_ACECAD_FLAIR	0x0004
 | 
			
		||||
#define USB_DEVICE_ID_ACECAD_302	0x0008
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_AIPTEK		0x08ca
 | 
			
		||||
#define USB_DEVICE_ID_AIPTEK_01		0x0001
 | 
			
		||||
#define USB_DEVICE_ID_AIPTEK_10		0x0010
 | 
			
		||||
#define USB_DEVICE_ID_AIPTEK_20		0x0020
 | 
			
		||||
#define USB_DEVICE_ID_AIPTEK_21		0x0021
 | 
			
		||||
#define USB_DEVICE_ID_AIPTEK_22		0x0022
 | 
			
		||||
#define USB_DEVICE_ID_AIPTEK_23		0x0023
 | 
			
		||||
#define USB_DEVICE_ID_AIPTEK_24		0x0024
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_AIRCABLE		0x16CA
 | 
			
		||||
#define USB_DEVICE_ID_AIRCABLE1		0x1502
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_ALCOR		0x058f
 | 
			
		||||
#define USB_DEVICE_ID_ALCOR_USBRS232	0x9720
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_ALPS		0x0433
 | 
			
		||||
#define USB_DEVICE_ID_IBM_GAMEPAD	0x1101
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_APPLE		0x05ac
 | 
			
		||||
#define USB_DEVICE_ID_APPLE_MIGHTYMOUSE	0x0304
 | 
			
		||||
#define USB_DEVICE_ID_APPLE_FOUNTAIN_ANSI	0x020e
 | 
			
		||||
#define USB_DEVICE_ID_APPLE_FOUNTAIN_ISO	0x020f
 | 
			
		||||
#define USB_DEVICE_ID_APPLE_GEYSER_ANSI	0x0214
 | 
			
		||||
#define USB_DEVICE_ID_APPLE_GEYSER_ISO	0x0215
 | 
			
		||||
#define USB_DEVICE_ID_APPLE_GEYSER_JIS	0x0216
 | 
			
		||||
#define USB_DEVICE_ID_APPLE_GEYSER3_ANSI	0x0217
 | 
			
		||||
#define USB_DEVICE_ID_APPLE_GEYSER3_ISO	0x0218
 | 
			
		||||
#define USB_DEVICE_ID_APPLE_GEYSER3_JIS	0x0219
 | 
			
		||||
#define USB_DEVICE_ID_APPLE_GEYSER4_ANSI	0x021a
 | 
			
		||||
#define USB_DEVICE_ID_APPLE_GEYSER4_ISO	0x021b
 | 
			
		||||
#define USB_DEVICE_ID_APPLE_GEYSER4_JIS	0x021c
 | 
			
		||||
#define USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY	0x030a
 | 
			
		||||
#define USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY	0x030b
 | 
			
		||||
#define USB_DEVICE_ID_APPLE_IR		0x8240
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_ATEN		0x0557
 | 
			
		||||
#define USB_DEVICE_ID_ATEN_UC100KM	0x2004
 | 
			
		||||
#define USB_DEVICE_ID_ATEN_CS124U	0x2202
 | 
			
		||||
#define USB_DEVICE_ID_ATEN_2PORTKVM	0x2204
 | 
			
		||||
#define USB_DEVICE_ID_ATEN_4PORTKVM	0x2205
 | 
			
		||||
#define USB_DEVICE_ID_ATEN_4PORTKVMC	0x2208
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_BELKIN           0x050d
 | 
			
		||||
#define USB_DEVICE_ID_FLIP_KVM         0x3201
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_BERKSHIRE		0x0c98
 | 
			
		||||
#define USB_DEVICE_ID_BERKSHIRE_PCWD	0x1140
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_CHERRY		0x046a
 | 
			
		||||
#define USB_DEVICE_ID_CHERRY_CYMOTION	0x0023
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_CHIC		0x05fe
 | 
			
		||||
#define USB_DEVICE_ID_CHIC_GAMEPAD	0x0014
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_CIDC		0x1677
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_CODEMERCS		0x07c0
 | 
			
		||||
#define USB_DEVICE_ID_CODEMERCS_IOW_FIRST	0x1500
 | 
			
		||||
#define USB_DEVICE_ID_CODEMERCS_IOW_LAST	0x15ff
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_CYPRESS		0x04b4
 | 
			
		||||
#define USB_DEVICE_ID_CYPRESS_MOUSE	0x0001
 | 
			
		||||
#define USB_DEVICE_ID_CYPRESS_HIDCOM	0x5500
 | 
			
		||||
#define USB_DEVICE_ID_CYPRESS_ULTRAMOUSE	0x7417
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_DELL		0x413c
 | 
			
		||||
#define USB_DEVICE_ID_DELL_W7658	0x2005
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_DELORME		0x1163
 | 
			
		||||
#define USB_DEVICE_ID_DELORME_EARTHMATE 0x0100
 | 
			
		||||
#define USB_DEVICE_ID_DELORME_EM_LT20	0x0200
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_ESSENTIAL_REALITY	0x0d7f
 | 
			
		||||
#define USB_DEVICE_ID_ESSENTIAL_REALITY_P5 0x0100
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_GLAB		0x06c2
 | 
			
		||||
#define USB_DEVICE_ID_4_PHIDGETSERVO_30	0x0038
 | 
			
		||||
#define USB_DEVICE_ID_1_PHIDGETSERVO_30	0x0039
 | 
			
		||||
#define USB_DEVICE_ID_0_0_4_IF_KIT	0x0040
 | 
			
		||||
#define USB_DEVICE_ID_0_16_16_IF_KIT	0x0044
 | 
			
		||||
#define USB_DEVICE_ID_8_8_8_IF_KIT	0x0045
 | 
			
		||||
#define USB_DEVICE_ID_0_8_7_IF_KIT	0x0051
 | 
			
		||||
#define USB_DEVICE_ID_0_8_8_IF_KIT	0x0053
 | 
			
		||||
#define USB_DEVICE_ID_PHIDGET_MOTORCONTROL	0x0058
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_GRIFFIN		0x077d
 | 
			
		||||
#define USB_DEVICE_ID_POWERMATE		0x0410
 | 
			
		||||
#define USB_DEVICE_ID_SOUNDKNOB		0x04AA
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_GTCO		0x078c
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_90		0x0090
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_100		0x0100
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_101		0x0101
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_103		0x0103
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_104		0x0104
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_105		0x0105
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_106		0x0106
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_107		0x0107
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_108		0x0108
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_200		0x0200
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_201		0x0201
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_202		0x0202
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_203		0x0203
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_204		0x0204
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_205		0x0205
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_206		0x0206
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_207		0x0207
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_300		0x0300
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_301		0x0301
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_302		0x0302
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_303		0x0303
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_304		0x0304
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_305		0x0305
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_306		0x0306
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_307		0x0307
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_308		0x0308
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_309		0x0309
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_400		0x0400
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_401		0x0401
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_402		0x0402
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_403		0x0403
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_404		0x0404
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_405		0x0405
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_500		0x0500
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_501		0x0501
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_502		0x0502
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_503		0x0503
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_504		0x0504
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_1000		0x1000
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_1001		0x1001
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_1002		0x1002
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_1003		0x1003
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_1004		0x1004
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_1005		0x1005
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_1006		0x1006
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_HAPP		0x078b
 | 
			
		||||
#define USB_DEVICE_ID_UGCI_DRIVING	0x0010
 | 
			
		||||
#define USB_DEVICE_ID_UGCI_FLYING	0x0020
 | 
			
		||||
#define USB_DEVICE_ID_UGCI_FIGHTING	0x0030
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_IMATION		0x0718
 | 
			
		||||
#define USB_DEVICE_ID_DISC_STAKKA	0xd000
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_KBGEAR		0x084e
 | 
			
		||||
#define USB_DEVICE_ID_KBGEAR_JAMSTUDIO	0x1001
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_LD		0x0f11
 | 
			
		||||
#define USB_DEVICE_ID_LD_CASSY		0x1000
 | 
			
		||||
#define USB_DEVICE_ID_LD_POCKETCASSY	0x1010
 | 
			
		||||
#define USB_DEVICE_ID_LD_MOBILECASSY	0x1020
 | 
			
		||||
#define USB_DEVICE_ID_LD_JWM		0x1080
 | 
			
		||||
#define USB_DEVICE_ID_LD_DMMP		0x1081
 | 
			
		||||
#define USB_DEVICE_ID_LD_UMIP		0x1090
 | 
			
		||||
#define USB_DEVICE_ID_LD_XRAY1		0x1100
 | 
			
		||||
#define USB_DEVICE_ID_LD_XRAY2		0x1101
 | 
			
		||||
#define USB_DEVICE_ID_LD_VIDEOCOM	0x1200
 | 
			
		||||
#define USB_DEVICE_ID_LD_COM3LAB	0x2000
 | 
			
		||||
#define USB_DEVICE_ID_LD_TELEPORT	0x2010
 | 
			
		||||
#define USB_DEVICE_ID_LD_NETWORKANALYSER 0x2020
 | 
			
		||||
#define USB_DEVICE_ID_LD_POWERCONTROL	0x2030
 | 
			
		||||
#define USB_DEVICE_ID_LD_MACHINETEST	0x2040
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_LOGITECH		0x046d
 | 
			
		||||
#define USB_DEVICE_ID_LOGITECH_RECEIVER	0xc101
 | 
			
		||||
#define USB_DEVICE_ID_S510_RECEIVER	0xc50c
 | 
			
		||||
#define USB_DEVICE_ID_S510_RECEIVER_2	0xc517
 | 
			
		||||
#define USB_DEVICE_ID_MX3000_RECEIVER	0xc513
 | 
			
		||||
#define USB_DEVICE_ID_DINOVO_EDGE	0xc714
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_MCC		0x09db
 | 
			
		||||
#define USB_DEVICE_ID_MCC_PMD1024LS	0x0076
 | 
			
		||||
#define USB_DEVICE_ID_MCC_PMD1208LS	0x007a
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_MGE		0x0463
 | 
			
		||||
#define USB_DEVICE_ID_MGE_UPS		0xffff
 | 
			
		||||
#define USB_DEVICE_ID_MGE_UPS1		0x0001
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_NEC		0x073e
 | 
			
		||||
#define USB_DEVICE_ID_NEC_USB_GAME_PAD	0x0301
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_ONTRAK		0x0a07
 | 
			
		||||
#define USB_DEVICE_ID_ONTRAK_ADU100	0x0064
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_PANJIT		0x134c
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_PANTHERLORD	0x0810
 | 
			
		||||
#define USB_DEVICE_ID_PANTHERLORD_TWIN_USB_JOYSTICK	0x0001
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_PLAYDOTCOM	0x0b43
 | 
			
		||||
#define USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII	0x0003
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_SAITEK		0x06a3
 | 
			
		||||
#define USB_DEVICE_ID_SAITEK_RUMBLEPAD	0xff17
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_SONY			0x054c
 | 
			
		||||
#define USB_DEVICE_ID_SONY_PS3_CONTROLLER	0x0268
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_SUN		0x0430
 | 
			
		||||
#define USB_DEVICE_ID_RARITAN_KVM_DONGLE	0xcdab
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_TOPMAX		0x0663
 | 
			
		||||
#define USB_DEVICE_ID_TOPMAX_COBRAPAD	0x0103
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_TURBOX		0x062a
 | 
			
		||||
#define USB_DEVICE_ID_TURBOX_KEYBOARD	0x0201
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_VERNIER		0x08f7
 | 
			
		||||
#define USB_DEVICE_ID_VERNIER_LABPRO	0x0001
 | 
			
		||||
#define USB_DEVICE_ID_VERNIER_GOTEMP	0x0002
 | 
			
		||||
#define USB_DEVICE_ID_VERNIER_SKIP	0x0003
 | 
			
		||||
#define USB_DEVICE_ID_VERNIER_CYCLOPS	0x0004
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_WACOM		0x056a
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_WISEGROUP		0x0925
 | 
			
		||||
#define USB_DEVICE_ID_1_PHIDGETSERVO_20	0x8101
 | 
			
		||||
#define USB_DEVICE_ID_4_PHIDGETSERVO_20	0x8104
 | 
			
		||||
#define USB_DEVICE_ID_8_8_4_IF_KIT	0x8201
 | 
			
		||||
#define USB_DEVICE_ID_QUAD_USB_JOYPAD	0x8800
 | 
			
		||||
#define USB_DEVICE_ID_DUAL_USB_JOYPAD	0x8866
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_WISEGROUP_LTD	0x6677
 | 
			
		||||
#define USB_DEVICE_ID_SMARTJOY_DUAL_PLUS 0x8802
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_YEALINK		0x6993
 | 
			
		||||
#define USB_DEVICE_ID_YEALINK_P1K_P4K_B2K	0xb001
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Alphabetically sorted blacklist by quirk type.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
static const struct hid_blacklist {
 | 
			
		||||
	__u16 idVendor;
 | 
			
		||||
	__u16 idProduct;
 | 
			
		||||
	__u32 quirks;
 | 
			
		||||
} hid_blacklist[] = {
 | 
			
		||||
 | 
			
		||||
	{ USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_WCP32PU, HID_QUIRK_2WHEEL_MOUSE_HACK_7 },
 | 
			
		||||
	{ USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_MOUSE, HID_QUIRK_2WHEEL_MOUSE_HACK_5 },
 | 
			
		||||
 | 
			
		||||
	{ USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RECEIVER, HID_QUIRK_BAD_RELATIVE_KEYS },
 | 
			
		||||
 | 
			
		||||
	{ USB_VENDOR_ID_AASHIMA, USB_DEVICE_ID_AASHIMA_GAMEPAD, HID_QUIRK_BADPAD },
 | 
			
		||||
	{ USB_VENDOR_ID_AASHIMA, USB_DEVICE_ID_AASHIMA_PREDATOR, HID_QUIRK_BADPAD },
 | 
			
		||||
	{ USB_VENDOR_ID_ALPS, USB_DEVICE_ID_IBM_GAMEPAD, HID_QUIRK_BADPAD },
 | 
			
		||||
	{ USB_VENDOR_ID_CHIC, USB_DEVICE_ID_CHIC_GAMEPAD, HID_QUIRK_BADPAD },
 | 
			
		||||
	{ USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_DRIVING, HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT },
 | 
			
		||||
	{ USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_FLYING, HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT },
 | 
			
		||||
	{ USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_FIGHTING, HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT },
 | 
			
		||||
	{ USB_VENDOR_ID_NEC, USB_DEVICE_ID_NEC_USB_GAME_PAD, HID_QUIRK_BADPAD },
 | 
			
		||||
	{ USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RUMBLEPAD, HID_QUIRK_BADPAD },
 | 
			
		||||
	{ USB_VENDOR_ID_TOPMAX, USB_DEVICE_ID_TOPMAX_COBRAPAD, HID_QUIRK_BADPAD },
 | 
			
		||||
	
 | 
			
		||||
	{ USB_VENDOR_ID_CHERRY, USB_DEVICE_ID_CHERRY_CYMOTION, HID_QUIRK_CYMOTION },
 | 
			
		||||
 | 
			
		||||
	{ USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_DINOVO_EDGE, HID_QUIRK_DUPLICATE_USAGES },
 | 
			
		||||
 | 
			
		||||
	{ USB_VENDOR_ID_BELKIN, USB_DEVICE_ID_FLIP_KVM, HID_QUIRK_HIDDEV },
 | 
			
		||||
 | 
			
		||||
	{ USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_01, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_10, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_20, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_21, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_22, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_23, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_24, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_AIRCABLE, USB_DEVICE_ID_AIRCABLE1, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_ALCOR, USB_DEVICE_ID_ALCOR_USBRS232, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IR, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_BERKSHIRE, USB_DEVICE_ID_BERKSHIRE_PCWD, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_CIDC, 0x0103, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_HIDCOM, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_ULTRAMOUSE, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_DELORME, USB_DEVICE_ID_DELORME_EARTHMATE, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_DELORME, USB_DEVICE_ID_DELORME_EM_LT20, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_ESSENTIAL_REALITY, USB_DEVICE_ID_ESSENTIAL_REALITY_P5, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GLAB, USB_DEVICE_ID_4_PHIDGETSERVO_30, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GLAB, USB_DEVICE_ID_1_PHIDGETSERVO_30, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GLAB, USB_DEVICE_ID_0_0_4_IF_KIT, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GLAB, USB_DEVICE_ID_0_16_16_IF_KIT, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GLAB, USB_DEVICE_ID_8_8_8_IF_KIT, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GLAB, USB_DEVICE_ID_0_8_7_IF_KIT, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GLAB, USB_DEVICE_ID_0_8_8_IF_KIT, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GLAB, USB_DEVICE_ID_PHIDGET_MOTORCONTROL, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GRIFFIN, USB_DEVICE_ID_POWERMATE, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GRIFFIN, USB_DEVICE_ID_SOUNDKNOB, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_90, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_100, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_101, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_103, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_104, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_105, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_106, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_107, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_108, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_200, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_201, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_202, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_203, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_204, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_205, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_206, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_207, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_300, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_301, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_302, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_303, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_304, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_305, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_306, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_307, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_308, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_309, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_400, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_401, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_402, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_403, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_404, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_405, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_500, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_501, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_502, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_503, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_504, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1000, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1001, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1002, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1003, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1004, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1005, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1006, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_IMATION, USB_DEVICE_ID_DISC_STAKKA, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_KBGEAR, USB_DEVICE_ID_KBGEAR_JAMSTUDIO, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_CASSY, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_POCKETCASSY, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MOBILECASSY, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_JWM, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_DMMP, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_UMIP, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_XRAY1, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_XRAY2, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_VIDEOCOM, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_COM3LAB, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_TELEPORT, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_NETWORKANALYSER, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_POWERCONTROL, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MACHINETEST, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_MCC, USB_DEVICE_ID_MCC_PMD1024LS, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_MCC, USB_DEVICE_ID_MCC_PMD1208LS, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_MGE, USB_DEVICE_ID_MGE_UPS, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_MGE, USB_DEVICE_ID_MGE_UPS1, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 20, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 30, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 100, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 108, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 118, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 200, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 300, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 400, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 500, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_PANJIT, 0x0001, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_PANJIT, 0x0002, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_PANJIT, 0x0003, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_PANJIT, 0x0004, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_LABPRO, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_GOTEMP, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_SKIP, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_CYCLOPS, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_4_PHIDGETSERVO_20, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_1_PHIDGETSERVO_20, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_8_8_4_IF_KIT, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_YEALINK, USB_DEVICE_ID_YEALINK_P1K_P4K_B2K, HID_QUIRK_IGNORE },
 | 
			
		||||
 | 
			
		||||
	{ USB_VENDOR_ID_ACECAD, USB_DEVICE_ID_ACECAD_FLAIR, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_ACECAD, USB_DEVICE_ID_ACECAD_302, HID_QUIRK_IGNORE },
 | 
			
		||||
 | 
			
		||||
	{ USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_MX3000_RECEIVER, HID_QUIRK_LOGITECH_DESCRIPTOR },
 | 
			
		||||
	{ USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER, HID_QUIRK_LOGITECH_DESCRIPTOR },
 | 
			
		||||
	{ USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER_2, HID_QUIRK_LOGITECH_DESCRIPTOR },
 | 
			
		||||
 | 
			
		||||
	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MIGHTYMOUSE, HID_QUIRK_MIGHTYMOUSE | HID_QUIRK_INVERT_HWHEEL },
 | 
			
		||||
 | 
			
		||||
	{ USB_VENDOR_ID_PANTHERLORD, USB_DEVICE_ID_PANTHERLORD_TWIN_USB_JOYSTICK, HID_QUIRK_MULTI_INPUT | HID_QUIRK_SKIP_OUTPUT_REPORTS },
 | 
			
		||||
	{ USB_VENDOR_ID_PLAYDOTCOM, USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII, HID_QUIRK_MULTI_INPUT },
 | 
			
		||||
 | 
			
		||||
	{ USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER, HID_QUIRK_SONY_PS3_CONTROLLER },
 | 
			
		||||
 | 
			
		||||
	{ USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_UC100KM, HID_QUIRK_NOGET },
 | 
			
		||||
	{ USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS124U, HID_QUIRK_NOGET },
 | 
			
		||||
	{ USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_2PORTKVM, HID_QUIRK_NOGET },
 | 
			
		||||
	{ USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVM, HID_QUIRK_NOGET },
 | 
			
		||||
	{ USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVMC, HID_QUIRK_NOGET },
 | 
			
		||||
	{ USB_VENDOR_ID_SUN, USB_DEVICE_ID_RARITAN_KVM_DONGLE, HID_QUIRK_NOGET },
 | 
			
		||||
	{ USB_VENDOR_ID_TURBOX, USB_DEVICE_ID_TURBOX_KEYBOARD, HID_QUIRK_NOGET },
 | 
			
		||||
	{ USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_DUAL_USB_JOYPAD, HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT },
 | 
			
		||||
	{ USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_QUAD_USB_JOYPAD, HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT },
 | 
			
		||||
 | 
			
		||||
	{ USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SMARTJOY_DUAL_PLUS, HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT },
 | 
			
		||||
 | 
			
		||||
	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ANSI, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE },
 | 
			
		||||
	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ISO, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE },
 | 
			
		||||
	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_ANSI, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE },
 | 
			
		||||
	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_ISO, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE | HID_QUIRK_POWERBOOK_ISO_KEYBOARD},
 | 
			
		||||
	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_JIS, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE },
 | 
			
		||||
	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_ANSI, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE },
 | 
			
		||||
	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_ISO, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE | HID_QUIRK_POWERBOOK_ISO_KEYBOARD},
 | 
			
		||||
	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_JIS, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE },
 | 
			
		||||
	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_ANSI, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE },
 | 
			
		||||
	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_ISO, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE | HID_QUIRK_POWERBOOK_ISO_KEYBOARD},
 | 
			
		||||
	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_JIS, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE },
 | 
			
		||||
	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE },
 | 
			
		||||
	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE },
 | 
			
		||||
 | 
			
		||||
	{ USB_VENDOR_ID_DELL, USB_DEVICE_ID_DELL_W7658, HID_QUIRK_RESET_LEDS },
 | 
			
		||||
 | 
			
		||||
	{ 0, 0 }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Input submission and I/O error handler.
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -1122,25 +691,14 @@ static struct hid_device *usb_hid_configure(struct usb_interface *intf)
 | 
			
		|||
	struct usb_device *dev = interface_to_usbdev (intf);
 | 
			
		||||
	struct hid_descriptor *hdesc;
 | 
			
		||||
	struct hid_device *hid;
 | 
			
		||||
	__u32 quirks = 0;
 | 
			
		||||
	u32 quirks = 0;
 | 
			
		||||
	unsigned rsize = 0;
 | 
			
		||||
	char *rdesc;
 | 
			
		||||
	int n, len, insize = 0;
 | 
			
		||||
	struct usbhid_device *usbhid;
 | 
			
		||||
 | 
			
		||||
	/* Ignore all Wacom devices */
 | 
			
		||||
	if (le16_to_cpu(dev->descriptor.idVendor) == USB_VENDOR_ID_WACOM)
 | 
			
		||||
		return NULL;
 | 
			
		||||
	/* ignore all Code Mercenaries IOWarrior devices */
 | 
			
		||||
	if (le16_to_cpu(dev->descriptor.idVendor) == USB_VENDOR_ID_CODEMERCS)
 | 
			
		||||
		if (le16_to_cpu(dev->descriptor.idProduct) >= USB_DEVICE_ID_CODEMERCS_IOW_FIRST &&
 | 
			
		||||
		    le16_to_cpu(dev->descriptor.idProduct) <= USB_DEVICE_ID_CODEMERCS_IOW_LAST)
 | 
			
		||||
			return NULL;
 | 
			
		||||
 | 
			
		||||
	for (n = 0; hid_blacklist[n].idVendor; n++)
 | 
			
		||||
		if ((hid_blacklist[n].idVendor == le16_to_cpu(dev->descriptor.idVendor)) &&
 | 
			
		||||
			(hid_blacklist[n].idProduct == le16_to_cpu(dev->descriptor.idProduct)))
 | 
			
		||||
				quirks = hid_blacklist[n].quirks;
 | 
			
		||||
	quirks = usbhid_lookup_quirk(le16_to_cpu(dev->descriptor.idVendor),
 | 
			
		||||
			le16_to_cpu(dev->descriptor.idProduct));
 | 
			
		||||
 | 
			
		||||
	/* Many keyboards and mice don't like to be polled for reports,
 | 
			
		||||
	 * so we will always set the HID_QUIRK_NOGET flag for them. */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										483
									
								
								drivers/hid/usbhid/hid-quirks.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										483
									
								
								drivers/hid/usbhid/hid-quirks.c
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,483 @@
 | 
			
		|||
/*
 | 
			
		||||
 *  USB HID quirks support for Linux
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 1999 Andreas Gal
 | 
			
		||||
 *  Copyright (c) 2000-2005 Vojtech Pavlik <vojtech@suse.cz>
 | 
			
		||||
 *  Copyright (c) 2005 Michael Haboustak <mike-@cinci.rr.com> for Concept2, Inc
 | 
			
		||||
 *  Copyright (c) 2006-2007 Jiri Kosina
 | 
			
		||||
 *  Copyright (c) 2007 Paul Walmsley
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This program is free software; you can redistribute it and/or modify it
 | 
			
		||||
 * under the terms of the GNU General Public License as published by the Free
 | 
			
		||||
 * Software Foundation; either version 2 of the License, or (at your option)
 | 
			
		||||
 * any later version.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <linux/hid.h>
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_A4TECH		0x09da
 | 
			
		||||
#define USB_DEVICE_ID_A4TECH_WCP32PU	0x0006
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_AASHIMA		0x06d6
 | 
			
		||||
#define USB_DEVICE_ID_AASHIMA_GAMEPAD	0x0025
 | 
			
		||||
#define USB_DEVICE_ID_AASHIMA_PREDATOR	0x0026
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_ACECAD		0x0460
 | 
			
		||||
#define USB_DEVICE_ID_ACECAD_FLAIR	0x0004
 | 
			
		||||
#define USB_DEVICE_ID_ACECAD_302	0x0008
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_AIPTEK		0x08ca
 | 
			
		||||
#define USB_DEVICE_ID_AIPTEK_01		0x0001
 | 
			
		||||
#define USB_DEVICE_ID_AIPTEK_10		0x0010
 | 
			
		||||
#define USB_DEVICE_ID_AIPTEK_20		0x0020
 | 
			
		||||
#define USB_DEVICE_ID_AIPTEK_21		0x0021
 | 
			
		||||
#define USB_DEVICE_ID_AIPTEK_22		0x0022
 | 
			
		||||
#define USB_DEVICE_ID_AIPTEK_23		0x0023
 | 
			
		||||
#define USB_DEVICE_ID_AIPTEK_24		0x0024
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_AIRCABLE		0x16CA
 | 
			
		||||
#define USB_DEVICE_ID_AIRCABLE1		0x1502
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_ALCOR		0x058f
 | 
			
		||||
#define USB_DEVICE_ID_ALCOR_USBRS232	0x9720
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_ALPS		0x0433
 | 
			
		||||
#define USB_DEVICE_ID_IBM_GAMEPAD	0x1101
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_APPLE		0x05ac
 | 
			
		||||
#define USB_DEVICE_ID_APPLE_MIGHTYMOUSE	0x0304
 | 
			
		||||
#define USB_DEVICE_ID_APPLE_FOUNTAIN_ANSI	0x020e
 | 
			
		||||
#define USB_DEVICE_ID_APPLE_FOUNTAIN_ISO	0x020f
 | 
			
		||||
#define USB_DEVICE_ID_APPLE_GEYSER_ANSI	0x0214
 | 
			
		||||
#define USB_DEVICE_ID_APPLE_GEYSER_ISO	0x0215
 | 
			
		||||
#define USB_DEVICE_ID_APPLE_GEYSER_JIS	0x0216
 | 
			
		||||
#define USB_DEVICE_ID_APPLE_GEYSER3_ANSI	0x0217
 | 
			
		||||
#define USB_DEVICE_ID_APPLE_GEYSER3_ISO	0x0218
 | 
			
		||||
#define USB_DEVICE_ID_APPLE_GEYSER3_JIS	0x0219
 | 
			
		||||
#define USB_DEVICE_ID_APPLE_GEYSER4_ANSI	0x021a
 | 
			
		||||
#define USB_DEVICE_ID_APPLE_GEYSER4_ISO	0x021b
 | 
			
		||||
#define USB_DEVICE_ID_APPLE_GEYSER4_JIS	0x021c
 | 
			
		||||
#define USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY	0x030a
 | 
			
		||||
#define USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY	0x030b
 | 
			
		||||
#define USB_DEVICE_ID_APPLE_IR		0x8240
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_ATEN		0x0557
 | 
			
		||||
#define USB_DEVICE_ID_ATEN_UC100KM	0x2004
 | 
			
		||||
#define USB_DEVICE_ID_ATEN_CS124U	0x2202
 | 
			
		||||
#define USB_DEVICE_ID_ATEN_2PORTKVM	0x2204
 | 
			
		||||
#define USB_DEVICE_ID_ATEN_4PORTKVM	0x2205
 | 
			
		||||
#define USB_DEVICE_ID_ATEN_4PORTKVMC	0x2208
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_BELKIN           0x050d
 | 
			
		||||
#define USB_DEVICE_ID_FLIP_KVM         0x3201
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_BERKSHIRE		0x0c98
 | 
			
		||||
#define USB_DEVICE_ID_BERKSHIRE_PCWD	0x1140
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_CHERRY		0x046a
 | 
			
		||||
#define USB_DEVICE_ID_CHERRY_CYMOTION	0x0023
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_CHIC		0x05fe
 | 
			
		||||
#define USB_DEVICE_ID_CHIC_GAMEPAD	0x0014
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_CIDC		0x1677
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_CODEMERCS		0x07c0
 | 
			
		||||
#define USB_DEVICE_ID_CODEMERCS_IOW_FIRST	0x1500
 | 
			
		||||
#define USB_DEVICE_ID_CODEMERCS_IOW_LAST	0x15ff
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_CYPRESS		0x04b4
 | 
			
		||||
#define USB_DEVICE_ID_CYPRESS_MOUSE	0x0001
 | 
			
		||||
#define USB_DEVICE_ID_CYPRESS_HIDCOM	0x5500
 | 
			
		||||
#define USB_DEVICE_ID_CYPRESS_ULTRAMOUSE	0x7417
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_DELL		0x413c
 | 
			
		||||
#define USB_DEVICE_ID_DELL_W7658	0x2005
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_DELORME		0x1163
 | 
			
		||||
#define USB_DEVICE_ID_DELORME_EARTHMATE 0x0100
 | 
			
		||||
#define USB_DEVICE_ID_DELORME_EM_LT20	0x0200
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_ESSENTIAL_REALITY	0x0d7f
 | 
			
		||||
#define USB_DEVICE_ID_ESSENTIAL_REALITY_P5 0x0100
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_GLAB		0x06c2
 | 
			
		||||
#define USB_DEVICE_ID_4_PHIDGETSERVO_30	0x0038
 | 
			
		||||
#define USB_DEVICE_ID_1_PHIDGETSERVO_30	0x0039
 | 
			
		||||
#define USB_DEVICE_ID_0_0_4_IF_KIT	0x0040
 | 
			
		||||
#define USB_DEVICE_ID_0_16_16_IF_KIT	0x0044
 | 
			
		||||
#define USB_DEVICE_ID_8_8_8_IF_KIT	0x0045
 | 
			
		||||
#define USB_DEVICE_ID_0_8_7_IF_KIT	0x0051
 | 
			
		||||
#define USB_DEVICE_ID_0_8_8_IF_KIT	0x0053
 | 
			
		||||
#define USB_DEVICE_ID_PHIDGET_MOTORCONTROL	0x0058
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_GRIFFIN		0x077d
 | 
			
		||||
#define USB_DEVICE_ID_POWERMATE		0x0410
 | 
			
		||||
#define USB_DEVICE_ID_SOUNDKNOB		0x04AA
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_GTCO		0x078c
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_90		0x0090
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_100		0x0100
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_101		0x0101
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_103		0x0103
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_104		0x0104
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_105		0x0105
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_106		0x0106
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_107		0x0107
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_108		0x0108
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_200		0x0200
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_201		0x0201
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_202		0x0202
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_203		0x0203
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_204		0x0204
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_205		0x0205
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_206		0x0206
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_207		0x0207
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_300		0x0300
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_301		0x0301
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_302		0x0302
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_303		0x0303
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_304		0x0304
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_305		0x0305
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_306		0x0306
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_307		0x0307
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_308		0x0308
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_309		0x0309
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_400		0x0400
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_401		0x0401
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_402		0x0402
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_403		0x0403
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_404		0x0404
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_405		0x0405
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_500		0x0500
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_501		0x0501
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_502		0x0502
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_503		0x0503
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_504		0x0504
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_1000		0x1000
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_1001		0x1001
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_1002		0x1002
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_1003		0x1003
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_1004		0x1004
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_1005		0x1005
 | 
			
		||||
#define USB_DEVICE_ID_GTCO_1006		0x1006
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_HAPP		0x078b
 | 
			
		||||
#define USB_DEVICE_ID_UGCI_DRIVING	0x0010
 | 
			
		||||
#define USB_DEVICE_ID_UGCI_FLYING	0x0020
 | 
			
		||||
#define USB_DEVICE_ID_UGCI_FIGHTING	0x0030
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_IMATION		0x0718
 | 
			
		||||
#define USB_DEVICE_ID_DISC_STAKKA	0xd000
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_KBGEAR		0x084e
 | 
			
		||||
#define USB_DEVICE_ID_KBGEAR_JAMSTUDIO	0x1001
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_LD		0x0f11
 | 
			
		||||
#define USB_DEVICE_ID_LD_CASSY		0x1000
 | 
			
		||||
#define USB_DEVICE_ID_LD_POCKETCASSY	0x1010
 | 
			
		||||
#define USB_DEVICE_ID_LD_MOBILECASSY	0x1020
 | 
			
		||||
#define USB_DEVICE_ID_LD_JWM		0x1080
 | 
			
		||||
#define USB_DEVICE_ID_LD_DMMP		0x1081
 | 
			
		||||
#define USB_DEVICE_ID_LD_UMIP		0x1090
 | 
			
		||||
#define USB_DEVICE_ID_LD_XRAY1		0x1100
 | 
			
		||||
#define USB_DEVICE_ID_LD_XRAY2		0x1101
 | 
			
		||||
#define USB_DEVICE_ID_LD_VIDEOCOM	0x1200
 | 
			
		||||
#define USB_DEVICE_ID_LD_COM3LAB	0x2000
 | 
			
		||||
#define USB_DEVICE_ID_LD_TELEPORT	0x2010
 | 
			
		||||
#define USB_DEVICE_ID_LD_NETWORKANALYSER 0x2020
 | 
			
		||||
#define USB_DEVICE_ID_LD_POWERCONTROL	0x2030
 | 
			
		||||
#define USB_DEVICE_ID_LD_MACHINETEST	0x2040
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_LOGITECH		0x046d
 | 
			
		||||
#define USB_DEVICE_ID_LOGITECH_RECEIVER	0xc101
 | 
			
		||||
#define USB_DEVICE_ID_S510_RECEIVER	0xc50c
 | 
			
		||||
#define USB_DEVICE_ID_S510_RECEIVER_2	0xc517
 | 
			
		||||
#define USB_DEVICE_ID_MX3000_RECEIVER	0xc513
 | 
			
		||||
#define USB_DEVICE_ID_DINOVO_EDGE	0xc714
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_MCC		0x09db
 | 
			
		||||
#define USB_DEVICE_ID_MCC_PMD1024LS	0x0076
 | 
			
		||||
#define USB_DEVICE_ID_MCC_PMD1208LS	0x007a
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_MGE		0x0463
 | 
			
		||||
#define USB_DEVICE_ID_MGE_UPS		0xffff
 | 
			
		||||
#define USB_DEVICE_ID_MGE_UPS1		0x0001
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_NEC		0x073e
 | 
			
		||||
#define USB_DEVICE_ID_NEC_USB_GAME_PAD	0x0301
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_ONTRAK		0x0a07
 | 
			
		||||
#define USB_DEVICE_ID_ONTRAK_ADU100	0x0064
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_PANJIT		0x134c
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_PANTHERLORD	0x0810
 | 
			
		||||
#define USB_DEVICE_ID_PANTHERLORD_TWIN_USB_JOYSTICK	0x0001
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_PLAYDOTCOM	0x0b43
 | 
			
		||||
#define USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII	0x0003
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_SAITEK		0x06a3
 | 
			
		||||
#define USB_DEVICE_ID_SAITEK_RUMBLEPAD	0xff17
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_SONY			0x054c
 | 
			
		||||
#define USB_DEVICE_ID_SONY_PS3_CONTROLLER	0x0268
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_SUN		0x0430
 | 
			
		||||
#define USB_DEVICE_ID_RARITAN_KVM_DONGLE	0xcdab
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_TOPMAX		0x0663
 | 
			
		||||
#define USB_DEVICE_ID_TOPMAX_COBRAPAD	0x0103
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_TURBOX		0x062a
 | 
			
		||||
#define USB_DEVICE_ID_TURBOX_KEYBOARD	0x0201
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_VERNIER		0x08f7
 | 
			
		||||
#define USB_DEVICE_ID_VERNIER_LABPRO	0x0001
 | 
			
		||||
#define USB_DEVICE_ID_VERNIER_GOTEMP	0x0002
 | 
			
		||||
#define USB_DEVICE_ID_VERNIER_SKIP	0x0003
 | 
			
		||||
#define USB_DEVICE_ID_VERNIER_CYCLOPS	0x0004
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_WACOM		0x056a
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_WISEGROUP		0x0925
 | 
			
		||||
#define USB_DEVICE_ID_1_PHIDGETSERVO_20	0x8101
 | 
			
		||||
#define USB_DEVICE_ID_4_PHIDGETSERVO_20	0x8104
 | 
			
		||||
#define USB_DEVICE_ID_8_8_4_IF_KIT	0x8201
 | 
			
		||||
#define USB_DEVICE_ID_QUAD_USB_JOYPAD	0x8800
 | 
			
		||||
#define USB_DEVICE_ID_DUAL_USB_JOYPAD	0x8866
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_WISEGROUP_LTD	0x6677
 | 
			
		||||
#define USB_DEVICE_ID_SMARTJOY_DUAL_PLUS 0x8802
 | 
			
		||||
 | 
			
		||||
#define USB_VENDOR_ID_YEALINK		0x6993
 | 
			
		||||
#define USB_DEVICE_ID_YEALINK_P1K_P4K_B2K	0xb001
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Alphabetically sorted blacklist by quirk type.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
static const struct hid_blacklist {
 | 
			
		||||
	__u16 idVendor;
 | 
			
		||||
	__u16 idProduct;
 | 
			
		||||
	__u32 quirks;
 | 
			
		||||
} hid_blacklist[] = {
 | 
			
		||||
 | 
			
		||||
	{ USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_WCP32PU, HID_QUIRK_2WHEEL_MOUSE_HACK_7 },
 | 
			
		||||
	{ USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_MOUSE, HID_QUIRK_2WHEEL_MOUSE_HACK_5 },
 | 
			
		||||
 | 
			
		||||
	{ USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RECEIVER, HID_QUIRK_BAD_RELATIVE_KEYS },
 | 
			
		||||
 | 
			
		||||
	{ USB_VENDOR_ID_AASHIMA, USB_DEVICE_ID_AASHIMA_GAMEPAD, HID_QUIRK_BADPAD },
 | 
			
		||||
	{ USB_VENDOR_ID_AASHIMA, USB_DEVICE_ID_AASHIMA_PREDATOR, HID_QUIRK_BADPAD },
 | 
			
		||||
	{ USB_VENDOR_ID_ALPS, USB_DEVICE_ID_IBM_GAMEPAD, HID_QUIRK_BADPAD },
 | 
			
		||||
	{ USB_VENDOR_ID_CHIC, USB_DEVICE_ID_CHIC_GAMEPAD, HID_QUIRK_BADPAD },
 | 
			
		||||
	{ USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_DRIVING, HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT },
 | 
			
		||||
	{ USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_FLYING, HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT },
 | 
			
		||||
	{ USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_FIGHTING, HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT },
 | 
			
		||||
	{ USB_VENDOR_ID_NEC, USB_DEVICE_ID_NEC_USB_GAME_PAD, HID_QUIRK_BADPAD },
 | 
			
		||||
	{ USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RUMBLEPAD, HID_QUIRK_BADPAD },
 | 
			
		||||
	{ USB_VENDOR_ID_TOPMAX, USB_DEVICE_ID_TOPMAX_COBRAPAD, HID_QUIRK_BADPAD },
 | 
			
		||||
	
 | 
			
		||||
	{ USB_VENDOR_ID_CHERRY, USB_DEVICE_ID_CHERRY_CYMOTION, HID_QUIRK_CYMOTION },
 | 
			
		||||
 | 
			
		||||
	{ USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_DINOVO_EDGE, HID_QUIRK_DUPLICATE_USAGES },
 | 
			
		||||
 | 
			
		||||
	{ USB_VENDOR_ID_BELKIN, USB_DEVICE_ID_FLIP_KVM, HID_QUIRK_HIDDEV },
 | 
			
		||||
 | 
			
		||||
	{ USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_01, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_10, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_20, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_21, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_22, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_23, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_24, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_AIRCABLE, USB_DEVICE_ID_AIRCABLE1, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_ALCOR, USB_DEVICE_ID_ALCOR_USBRS232, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IR, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_BERKSHIRE, USB_DEVICE_ID_BERKSHIRE_PCWD, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_CIDC, 0x0103, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_HIDCOM, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_ULTRAMOUSE, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_DELORME, USB_DEVICE_ID_DELORME_EARTHMATE, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_DELORME, USB_DEVICE_ID_DELORME_EM_LT20, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_ESSENTIAL_REALITY, USB_DEVICE_ID_ESSENTIAL_REALITY_P5, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GLAB, USB_DEVICE_ID_4_PHIDGETSERVO_30, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GLAB, USB_DEVICE_ID_1_PHIDGETSERVO_30, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GLAB, USB_DEVICE_ID_0_0_4_IF_KIT, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GLAB, USB_DEVICE_ID_0_16_16_IF_KIT, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GLAB, USB_DEVICE_ID_8_8_8_IF_KIT, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GLAB, USB_DEVICE_ID_0_8_7_IF_KIT, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GLAB, USB_DEVICE_ID_0_8_8_IF_KIT, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GLAB, USB_DEVICE_ID_PHIDGET_MOTORCONTROL, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GRIFFIN, USB_DEVICE_ID_POWERMATE, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GRIFFIN, USB_DEVICE_ID_SOUNDKNOB, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_90, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_100, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_101, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_103, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_104, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_105, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_106, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_107, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_108, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_200, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_201, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_202, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_203, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_204, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_205, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_206, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_207, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_300, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_301, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_302, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_303, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_304, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_305, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_306, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_307, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_308, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_309, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_400, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_401, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_402, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_403, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_404, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_405, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_500, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_501, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_502, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_503, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_504, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1000, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1001, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1002, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1003, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1004, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1005, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1006, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_IMATION, USB_DEVICE_ID_DISC_STAKKA, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_KBGEAR, USB_DEVICE_ID_KBGEAR_JAMSTUDIO, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_CASSY, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_POCKETCASSY, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MOBILECASSY, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_JWM, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_DMMP, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_UMIP, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_XRAY1, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_XRAY2, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_VIDEOCOM, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_COM3LAB, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_TELEPORT, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_NETWORKANALYSER, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_POWERCONTROL, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MACHINETEST, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_MCC, USB_DEVICE_ID_MCC_PMD1024LS, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_MCC, USB_DEVICE_ID_MCC_PMD1208LS, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_MGE, USB_DEVICE_ID_MGE_UPS, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_MGE, USB_DEVICE_ID_MGE_UPS1, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 20, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 30, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 100, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 108, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 118, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 200, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 300, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 400, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 500, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_PANJIT, 0x0001, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_PANJIT, 0x0002, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_PANJIT, 0x0003, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_PANJIT, 0x0004, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_LABPRO, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_GOTEMP, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_SKIP, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_CYCLOPS, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_4_PHIDGETSERVO_20, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_1_PHIDGETSERVO_20, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_8_8_4_IF_KIT, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_YEALINK, USB_DEVICE_ID_YEALINK_P1K_P4K_B2K, HID_QUIRK_IGNORE },
 | 
			
		||||
 | 
			
		||||
	{ USB_VENDOR_ID_ACECAD, USB_DEVICE_ID_ACECAD_FLAIR, HID_QUIRK_IGNORE },
 | 
			
		||||
	{ USB_VENDOR_ID_ACECAD, USB_DEVICE_ID_ACECAD_302, HID_QUIRK_IGNORE },
 | 
			
		||||
 | 
			
		||||
	{ USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_MX3000_RECEIVER, HID_QUIRK_LOGITECH_DESCRIPTOR },
 | 
			
		||||
	{ USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER, HID_QUIRK_LOGITECH_DESCRIPTOR },
 | 
			
		||||
	{ USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER_2, HID_QUIRK_LOGITECH_DESCRIPTOR },
 | 
			
		||||
 | 
			
		||||
	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MIGHTYMOUSE, HID_QUIRK_MIGHTYMOUSE | HID_QUIRK_INVERT_HWHEEL },
 | 
			
		||||
 | 
			
		||||
	{ USB_VENDOR_ID_PANTHERLORD, USB_DEVICE_ID_PANTHERLORD_TWIN_USB_JOYSTICK, HID_QUIRK_MULTI_INPUT | HID_QUIRK_SKIP_OUTPUT_REPORTS },
 | 
			
		||||
	{ USB_VENDOR_ID_PLAYDOTCOM, USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII, HID_QUIRK_MULTI_INPUT },
 | 
			
		||||
 | 
			
		||||
	{ USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER, HID_QUIRK_SONY_PS3_CONTROLLER },
 | 
			
		||||
 | 
			
		||||
	{ USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_UC100KM, HID_QUIRK_NOGET },
 | 
			
		||||
	{ USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS124U, HID_QUIRK_NOGET },
 | 
			
		||||
	{ USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_2PORTKVM, HID_QUIRK_NOGET },
 | 
			
		||||
	{ USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVM, HID_QUIRK_NOGET },
 | 
			
		||||
	{ USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVMC, HID_QUIRK_NOGET },
 | 
			
		||||
	{ USB_VENDOR_ID_SUN, USB_DEVICE_ID_RARITAN_KVM_DONGLE, HID_QUIRK_NOGET },
 | 
			
		||||
	{ USB_VENDOR_ID_TURBOX, USB_DEVICE_ID_TURBOX_KEYBOARD, HID_QUIRK_NOGET },
 | 
			
		||||
	{ USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_DUAL_USB_JOYPAD, HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT },
 | 
			
		||||
	{ USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_QUAD_USB_JOYPAD, HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT },
 | 
			
		||||
 | 
			
		||||
	{ USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SMARTJOY_DUAL_PLUS, HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT },
 | 
			
		||||
 | 
			
		||||
	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ANSI, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE },
 | 
			
		||||
	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ISO, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE },
 | 
			
		||||
	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_ANSI, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE },
 | 
			
		||||
	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_ISO, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE | HID_QUIRK_POWERBOOK_ISO_KEYBOARD},
 | 
			
		||||
	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_JIS, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE },
 | 
			
		||||
	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_ANSI, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE },
 | 
			
		||||
	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_ISO, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE | HID_QUIRK_POWERBOOK_ISO_KEYBOARD},
 | 
			
		||||
	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_JIS, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE },
 | 
			
		||||
	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_ANSI, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE },
 | 
			
		||||
	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_ISO, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE | HID_QUIRK_POWERBOOK_ISO_KEYBOARD},
 | 
			
		||||
	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_JIS, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE },
 | 
			
		||||
	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE },
 | 
			
		||||
	{ USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_IGNORE_MOUSE },
 | 
			
		||||
 | 
			
		||||
	{ USB_VENDOR_ID_DELL, USB_DEVICE_ID_DELL_W7658, HID_QUIRK_RESET_LEDS },
 | 
			
		||||
 | 
			
		||||
	{ 0, 0 }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * usbhid_lookup_quirk: return any quirks associated with a USB HID device
 | 
			
		||||
 * @idVendor: the 16-bit USB vendor ID, in native byteorder
 | 
			
		||||
 * @idProduct: the 16-bit USB product ID, in native byteorder
 | 
			
		||||
 *
 | 
			
		||||
 * Description:
 | 
			
		||||
 *     Given a USB vendor ID and product ID, return any quirks associated
 | 
			
		||||
 *     with that device.
 | 
			
		||||
 *
 | 
			
		||||
 * Returns: a u32 quirks value.
 | 
			
		||||
 */
 | 
			
		||||
u32 usbhid_lookup_quirk(const u16 idVendor, const u16 idProduct)
 | 
			
		||||
{
 | 
			
		||||
	u32 quirks = 0;
 | 
			
		||||
	int n = 0;
 | 
			
		||||
 | 
			
		||||
	/* Ignore all Wacom devices */
 | 
			
		||||
	if (idVendor == USB_VENDOR_ID_WACOM)
 | 
			
		||||
		return HID_QUIRK_IGNORE;
 | 
			
		||||
 | 
			
		||||
	/* ignore all Code Mercenaries IOWarrior devices */
 | 
			
		||||
	if (idVendor == USB_VENDOR_ID_CODEMERCS)
 | 
			
		||||
		if (idProduct >= USB_DEVICE_ID_CODEMERCS_IOW_FIRST &&
 | 
			
		||||
				idProduct <= USB_DEVICE_ID_CODEMERCS_IOW_LAST)
 | 
			
		||||
			return HID_QUIRK_IGNORE;
 | 
			
		||||
 | 
			
		||||
	for (; hid_blacklist[n].idVendor; n++)
 | 
			
		||||
		if (hid_blacklist[n].idVendor == idVendor &&
 | 
			
		||||
				hid_blacklist[n].idProduct == idProduct)
 | 
			
		||||
			quirks = hid_blacklist[n].quirks;
 | 
			
		||||
 | 
			
		||||
	return quirks;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -495,6 +495,8 @@ void hid_output_report(struct hid_report *report, __u8 *data);
 | 
			
		|||
void hid_free_device(struct hid_device *device);
 | 
			
		||||
struct hid_device *hid_parse_report(__u8 *start, unsigned size);
 | 
			
		||||
 | 
			
		||||
u32 usbhid_lookup_quirk(const u16 idVendor, const u16 idProduct);
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_HID_FF
 | 
			
		||||
int hid_ff_init(struct hid_device *hid);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue