diff options
| author | Jiri Kosina <jkosina@suse.cz> | 2011-10-25 03:59:04 -0400 |
|---|---|---|
| committer | Jiri Kosina <jkosina@suse.cz> | 2011-10-25 03:59:04 -0400 |
| commit | b3aec7b686329e6bb65aa08c7f9458f7fd512f06 (patch) | |
| tree | 67ae55567b5747f32ddd76dd63621bd2ca756a88 | |
| parent | f6f12427844516bc8e9cf84f43aca7bbbaa48157 (diff) | |
| parent | 1bcc20675a1ac1ba47eaa201e02a89b0508e17b2 (diff) | |
Merge branch 'upstream' into for-linus
Conflicts:
drivers/hid/hid-core.c
drivers/hid/hid-ids.h
| -rw-r--r-- | drivers/hid/Kconfig | 13 | ||||
| -rw-r--r-- | drivers/hid/Makefile | 1 | ||||
| -rw-r--r-- | drivers/hid/hid-apple.c | 15 | ||||
| -rw-r--r-- | drivers/hid/hid-core.c | 68 | ||||
| -rw-r--r-- | drivers/hid/hid-debug.c | 5 | ||||
| -rw-r--r-- | drivers/hid/hid-ids.h | 12 | ||||
| -rw-r--r-- | drivers/hid/hid-primax.c | 117 | ||||
| -rw-r--r-- | drivers/hid/hid-prodikeys.c | 8 | ||||
| -rw-r--r-- | drivers/hid/hid-sjoy.c | 75 | ||||
| -rw-r--r-- | drivers/hid/hid-zydacron.c | 4 | ||||
| -rw-r--r-- | drivers/hid/hidraw.c | 3 | ||||
| -rw-r--r-- | drivers/hid/usbhid/hid-quirks.c | 2 | ||||
| -rw-r--r-- | include/linux/hid.h | 2 |
13 files changed, 272 insertions, 53 deletions
diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig index 2b006bfa0935..22a4a051f221 100644 --- a/drivers/hid/Kconfig +++ b/drivers/hid/Kconfig | |||
| @@ -459,6 +459,13 @@ config HID_PICOLCD_LEDS | |||
| 459 | ---help--- | 459 | ---help--- |
| 460 | Provide access to PicoLCD's GPO pins via leds class. | 460 | Provide access to PicoLCD's GPO pins via leds class. |
| 461 | 461 | ||
| 462 | config HID_PRIMAX | ||
| 463 | tristate "Primax non-fully HID-compliant devices" | ||
| 464 | depends on USB_HID | ||
| 465 | ---help--- | ||
| 466 | Support for Primax devices that are not fully compliant with the | ||
| 467 | HID standard. | ||
| 468 | |||
| 462 | config HID_QUANTA | 469 | config HID_QUANTA |
| 463 | tristate "Quanta Optical Touch panels" | 470 | tristate "Quanta Optical Touch panels" |
| 464 | depends on USB_HID | 471 | depends on USB_HID |
| @@ -557,7 +564,11 @@ config HID_SMARTJOYPLUS | |||
| 557 | tristate "SmartJoy PLUS PS2/USB adapter support" | 564 | tristate "SmartJoy PLUS PS2/USB adapter support" |
| 558 | depends on USB_HID | 565 | depends on USB_HID |
| 559 | ---help--- | 566 | ---help--- |
| 560 | Support for SmartJoy PLUS PS2/USB adapter. | 567 | Support for SmartJoy PLUS PS2/USB adapter, Super Dual Box, |
| 568 | Super Joy Box 3 Pro, Super Dual Box Pro, and Super Joy Box 5 Pro. | ||
| 569 | |||
| 570 | Note that DDR (Dance Dance Revolution) mode is not supported, nor | ||
| 571 | is pressure sensitive buttons on the pro models. | ||
| 561 | 572 | ||
| 562 | config SMARTJOYPLUS_FF | 573 | config SMARTJOYPLUS_FF |
| 563 | bool "SmartJoy PLUS PS2/USB adapter force feedback support" | 574 | bool "SmartJoy PLUS PS2/USB adapter force feedback support" |
diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile index b7ddabb0b34c..1e0d2a638b28 100644 --- a/drivers/hid/Makefile +++ b/drivers/hid/Makefile | |||
| @@ -55,6 +55,7 @@ obj-$(CONFIG_HID_QUANTA) += hid-quanta.o | |||
| 55 | obj-$(CONFIG_HID_PANTHERLORD) += hid-pl.o | 55 | obj-$(CONFIG_HID_PANTHERLORD) += hid-pl.o |
| 56 | obj-$(CONFIG_HID_PETALYNX) += hid-petalynx.o | 56 | obj-$(CONFIG_HID_PETALYNX) += hid-petalynx.o |
| 57 | obj-$(CONFIG_HID_PICOLCD) += hid-picolcd.o | 57 | obj-$(CONFIG_HID_PICOLCD) += hid-picolcd.o |
| 58 | obj-$(CONFIG_HID_PRIMAX) += hid-primax.o | ||
| 58 | obj-$(CONFIG_HID_ROCCAT) += hid-roccat.o | 59 | obj-$(CONFIG_HID_ROCCAT) += hid-roccat.o |
| 59 | obj-$(CONFIG_HID_ROCCAT_COMMON) += hid-roccat-common.o | 60 | obj-$(CONFIG_HID_ROCCAT_COMMON) += hid-roccat-common.o |
| 60 | obj-$(CONFIG_HID_ROCCAT_ARVO) += hid-roccat-arvo.o | 61 | obj-$(CONFIG_HID_ROCCAT_ARVO) += hid-roccat-arvo.o |
diff --git a/drivers/hid/hid-apple.c b/drivers/hid/hid-apple.c index 18b3bc646bf3..9bc7b03269df 100644 --- a/drivers/hid/hid-apple.c +++ b/drivers/hid/hid-apple.c | |||
| @@ -183,6 +183,9 @@ static int hidinput_apple_event(struct hid_device *hid, struct input_dev *input, | |||
| 183 | if (hid->product >= USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI && | 183 | if (hid->product >= USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI && |
| 184 | hid->product <= USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS) | 184 | hid->product <= USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS) |
| 185 | table = macbookair_fn_keys; | 185 | table = macbookair_fn_keys; |
| 186 | else if (hid->product >= USB_DEVICE_ID_APPLE_WELLSPRING6_ANSI && | ||
| 187 | hid->product <= USB_DEVICE_ID_APPLE_WELLSPRING6_JIS) | ||
| 188 | table = macbookair_fn_keys; | ||
| 186 | else if (hid->product < 0x21d || hid->product >= 0x300) | 189 | else if (hid->product < 0x21d || hid->product >= 0x300) |
| 187 | table = powerbook_fn_keys; | 190 | table = powerbook_fn_keys; |
| 188 | else | 191 | else |
| @@ -493,6 +496,18 @@ static const struct hid_device_id apple_devices[] = { | |||
| 493 | .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD }, | 496 | .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD }, |
| 494 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_JIS), | 497 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_JIS), |
| 495 | .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, | 498 | .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, |
| 499 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6_ANSI), | ||
| 500 | .driver_data = APPLE_HAS_FN }, | ||
| 501 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6_ISO), | ||
| 502 | .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD }, | ||
| 503 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6_JIS), | ||
| 504 | .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, | ||
| 505 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ANSI), | ||
| 506 | .driver_data = APPLE_HAS_FN }, | ||
| 507 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ISO), | ||
| 508 | .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD }, | ||
| 509 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_JIS), | ||
| 510 | .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, | ||
| 496 | { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI), | 511 | { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI), |
| 497 | .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN }, | 512 | .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN }, |
| 498 | { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO), | 513 | { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO), |
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index c5606724b77a..91adcc5bad28 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c | |||
| @@ -29,6 +29,7 @@ | |||
| 29 | #include <linux/wait.h> | 29 | #include <linux/wait.h> |
| 30 | #include <linux/vmalloc.h> | 30 | #include <linux/vmalloc.h> |
| 31 | #include <linux/sched.h> | 31 | #include <linux/sched.h> |
| 32 | #include <linux/semaphore.h> | ||
| 32 | 33 | ||
| 33 | #include <linux/hid.h> | 34 | #include <linux/hid.h> |
| 34 | #include <linux/hiddev.h> | 35 | #include <linux/hiddev.h> |
| @@ -1085,16 +1086,25 @@ int hid_input_report(struct hid_device *hid, int type, u8 *data, int size, int i | |||
| 1085 | struct hid_report *report; | 1086 | struct hid_report *report; |
| 1086 | char *buf; | 1087 | char *buf; |
| 1087 | unsigned int i; | 1088 | unsigned int i; |
| 1088 | int ret; | 1089 | int ret = 0; |
| 1089 | 1090 | ||
| 1090 | if (!hid || !hid->driver) | 1091 | if (!hid) |
| 1091 | return -ENODEV; | 1092 | return -ENODEV; |
| 1093 | |||
| 1094 | if (down_trylock(&hid->driver_lock)) | ||
| 1095 | return -EBUSY; | ||
| 1096 | |||
| 1097 | if (!hid->driver) { | ||
| 1098 | ret = -ENODEV; | ||
| 1099 | goto unlock; | ||
| 1100 | } | ||
| 1092 | report_enum = hid->report_enum + type; | 1101 | report_enum = hid->report_enum + type; |
| 1093 | hdrv = hid->driver; | 1102 | hdrv = hid->driver; |
| 1094 | 1103 | ||
| 1095 | if (!size) { | 1104 | if (!size) { |
| 1096 | dbg_hid("empty report\n"); | 1105 | dbg_hid("empty report\n"); |
| 1097 | return -1; | 1106 | ret = -1; |
| 1107 | goto unlock; | ||
| 1098 | } | 1108 | } |
| 1099 | 1109 | ||
| 1100 | buf = kmalloc(sizeof(char) * HID_DEBUG_BUFSIZE, GFP_ATOMIC); | 1110 | buf = kmalloc(sizeof(char) * HID_DEBUG_BUFSIZE, GFP_ATOMIC); |
| @@ -1118,18 +1128,24 @@ int hid_input_report(struct hid_device *hid, int type, u8 *data, int size, int i | |||
| 1118 | nomem: | 1128 | nomem: |
| 1119 | report = hid_get_report(report_enum, data); | 1129 | report = hid_get_report(report_enum, data); |
| 1120 | 1130 | ||
| 1121 | if (!report) | 1131 | if (!report) { |
| 1122 | return -1; | 1132 | ret = -1; |
| 1133 | goto unlock; | ||
| 1134 | } | ||
| 1123 | 1135 | ||
| 1124 | if (hdrv && hdrv->raw_event && hid_match_report(hid, report)) { | 1136 | if (hdrv && hdrv->raw_event && hid_match_report(hid, report)) { |
| 1125 | ret = hdrv->raw_event(hid, report, data, size); | 1137 | ret = hdrv->raw_event(hid, report, data, size); |
| 1126 | if (ret != 0) | 1138 | if (ret != 0) { |
| 1127 | return ret < 0 ? ret : 0; | 1139 | ret = ret < 0 ? ret : 0; |
| 1140 | goto unlock; | ||
| 1141 | } | ||
| 1128 | } | 1142 | } |
| 1129 | 1143 | ||
| 1130 | hid_report_raw_event(hid, type, data, size, interrupt); | 1144 | hid_report_raw_event(hid, type, data, size, interrupt); |
| 1131 | 1145 | ||
| 1132 | return 0; | 1146 | unlock: |
| 1147 | up(&hid->driver_lock); | ||
| 1148 | return ret; | ||
| 1133 | } | 1149 | } |
| 1134 | EXPORT_SYMBOL_GPL(hid_input_report); | 1150 | EXPORT_SYMBOL_GPL(hid_input_report); |
| 1135 | 1151 | ||
| @@ -1349,6 +1365,12 @@ static const struct hid_device_id hid_have_special_driver[] = { | |||
| 1349 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_REVB_ANSI) }, | 1365 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_REVB_ANSI) }, |
| 1350 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_REVB_ISO) }, | 1366 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_REVB_ISO) }, |
| 1351 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_REVB_JIS) }, | 1367 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_REVB_JIS) }, |
| 1368 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6_ANSI) }, | ||
| 1369 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6_ISO) }, | ||
| 1370 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6_JIS) }, | ||
| 1371 | { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ANSI) }, | ||
