History

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid

Pull HID fixes from Jiri Kosina: - fix compat ioctl leak in uhid, by David Herrmann - fix scheduling in atomic context (causing actual lockups in real world) in hid-sony driver, by Sven Eckelmann - revert patch introducing VID/PID conflict, by Jiri Kosina - support from various new device IDs by Benjamin Tissoires and KaiChung Cheng * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid: HID: uhid: fix leak for 64/32 UHID_CREATE HID: kye: fix unresponsive keyboard HID: kye: Add report fixup for Genius Manticore Keyboard HID: multicouh: add PID VID to support 1 new Wistron optical touch device HID: appleir: force input to be set Revert "HID: wiimote: add LEGO-wiimote VID" HID: sony: Send FF commands in non-atomic context

Linus Torvalds committed 12 years ago

Commit ba33fef2 parents b7fe6bf 80897aa9 files · +72 −18Browse files

Unified · Split

9 files
  1. drivers/hid/Kconfig +1 −0
  2. drivers/hid/hid-appleir.c +3 −0
  3. drivers/hid/hid-core.c +1 −1
  4. drivers/hid/hid-ids.h +4 −1
  5. drivers/hid/hid-kye.c +13 −0
  6. drivers/hid/hid-multitouch.c +6 −0
  7. drivers/hid/hid-sony.c +42 −11
  8. drivers/hid/hid-wiimote-core.c +1 −4
  9. drivers/hid/uhid.c +1 −1
drivers/hid/Kconfig+1−0
@@ -460,6 +460,7 @@ config HID_MULTITOUCH · 459 unmodified lines
460460 - Stantum multitouch panels
461461 - Touch International Panels
462462 - Unitec Panels
463+ - Wistron optical touch panels
463464 - XAT optical touch panels
464465 - Xiroku optical touch panels
465466 - Zytronic touch panels
drivers/hid/hid-appleir.c+3−0
@@ -297,6 +297,9 @@ static int appleir_probe(struct hid_device *hid, const struct hid_device_id *id) · 296 unmodified lines
297297
298298 appleir->hid = hid;
299299
300+ /* force input as some remotes bypass the input registration */
301+ hid->quirks |= HID_QUIRK_HIDINPUT_FORCE;
302+
300303 spin_lock_init(&appleir->lock);
301304 setup_timer(&appleir->key_up_timer,
302305 key_up_tick, (unsigned long) appleir);
drivers/hid/hid-core.c+1−1
@@ -1723,6 +1723,7 @@ static const struct hid_device_id hid_have_special_driver[] = { · 1722 unmodified lines
17231723 { HID_USB_DEVICE(USB_VENDOR_ID_KENSINGTON, USB_DEVICE_ID_KS_SLIMBLADE) },
17241724 { HID_USB_DEVICE(USB_VENDOR_ID_KEYTOUCH, USB_DEVICE_ID_KEYTOUCH_IEC) },
17251725 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_GENIUS_GILA_GAMING_MOUSE) },
1726+ { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_GENIUS_MANTICORE) },
17261727 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_GENIUS_GX_IMPERATOR) },
17271728 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_ERGO_525V) },
17281729 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_I405X) },
@@ -1879,7 +1880,6 @@ static const struct hid_device_id hid_have_special_driver[] = { · 150 unmodified lines
18791880
18801881 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_BT) },
18811882 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO, USB_DEVICE_ID_NINTENDO_WIIMOTE) },
1882− { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO2, USB_DEVICE_ID_NINTENDO_WIIMOTE) },
18831883 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO, USB_DEVICE_ID_NINTENDO_WIIMOTE2) },
18841884 { }
18851885 };
drivers/hid/hid-ids.h+4−1
@@ -489,6 +489,7 @@ · 488 unmodified lines
489489 #define USB_VENDOR_ID_KYE 0x0458
490490 #define USB_DEVICE_ID_KYE_ERGO_525V 0x0087
491491 #define USB_DEVICE_ID_GENIUS_GILA_GAMING_MOUSE 0x0138
492+#define USB_DEVICE_ID_GENIUS_MANTICORE 0x0153
492493 #define USB_DEVICE_ID_GENIUS_GX_IMPERATOR 0x4018
493494 #define USB_DEVICE_ID_KYE_GPEN_560 0x5003
494495 #define USB_DEVICE_ID_KYE_EASYPEN_I405X 0x5010
@@ -640,7 +641,6 @@ · 145 unmodified lines
640641 #define USB_DEVICE_ID_NEXTWINDOW_TOUCHSCREEN 0x0003
641642
642643 #define USB_VENDOR_ID_NINTENDO 0x057e
643−#define USB_VENDOR_ID_NINTENDO2 0x054c
644644 #define USB_DEVICE_ID_NINTENDO_WIIMOTE 0x0306
645645 #define USB_DEVICE_ID_NINTENDO_WIIMOTE2 0x0330
646646
@@ -902,6 +902,9 @@ · 255 unmodified lines
902902 #define USB_DEVICE_ID_SUPER_DUAL_BOX_PRO 0x8802
903903 #define USB_DEVICE_ID_SUPER_JOY_BOX_5_PRO 0x8804
904904
905+#define USB_VENDOR_ID_WISTRON 0x0fb8
906+#define USB_DEVICE_ID_WISTRON_OPTICAL_TOUCH 0x1109
907+
905908 #define USB_VENDOR_ID_X_TENSIONS 0x1ae7
906909 #define USB_DEVICE_ID_SPEEDLINK_VAD_CEZANNE 0x9001
907910
drivers/hid/hid-kye.c+13−0
@@ -341,6 +341,9 @@ static __u8 *kye_report_fixup(struct hid_device *hdev, __u8 *rdesc, · 340 unmodified lines
341341 case USB_DEVICE_ID_GENIUS_GX_IMPERATOR:
342342 rdesc = kye_consumer_control_fixup(hdev, rdesc, rsize, 83,
343343 "Genius Gx Imperator Keyboard");
344+ case USB_DEVICE_ID_GENIUS_MANTICORE:
345+ rdesc = kye_consumer_control_fixup(hdev, rdesc, rsize, 104,
346+ "Genius Manticore Keyboard");
344347 break;
345348 }
346349 return rdesc;
@@ -418,6 +421,14 @@ static int kye_probe(struct hid_device *hdev, const struct hid_device_id *id) · 71 unmodified lines
418421 goto enabling_err;
419422 }
420423 break;
424+ case USB_DEVICE_ID_GENIUS_MANTICORE:
425+ /*
426+ * The manticore keyboard needs to have all the interfaces
427+ * opened at least once to be fully functional.
428+ */
429+ if (hid_hw_open(hdev))
430+ hid_hw_close(hdev);
431+ break;
421432 }
422433
423434 return 0;
@@ -439,6 +450,8 @@ static const struct hid_device_id kye_devices[] = { · 15 unmodified lines
439450 USB_DEVICE_ID_GENIUS_GILA_GAMING_MOUSE) },
440451 { HID_USB_DEVICE(USB_VENDOR_ID_KYE,
441452 USB_DEVICE_ID_GENIUS_GX_IMPERATOR) },
453+ { HID_USB_DEVICE(USB_VENDOR_ID_KYE,
454+ USB_DEVICE_ID_GENIUS_MANTICORE) },
442455 { }
443456 };
444457 MODULE_DEVICE_TABLE(hid, kye_devices);
drivers/hid/hid-multitouch.c+6−0
@@ -1335,6 +1335,12 @@ static const struct hid_device_id mt_devices[] = { · 1334 unmodified lines
13351335 { .driver_data = MT_CLS_NSMU,
13361336 MT_USB_DEVICE(USB_VENDOR_ID_UNITEC,
13371337 USB_DEVICE_ID_UNITEC_USB_TOUCH_0A19) },
1338+
1339+ /* Wistron panels */
1340+ { .driver_data = MT_CLS_NSMU,
1341+ MT_USB_DEVICE(USB_VENDOR_ID_WISTRON,
1342+ USB_DEVICE_ID_WISTRON_OPTICAL_TOUCH) },
1343+
13381344 /* XAT */
13391345 { .driver_data = MT_CLS_NSMU,
13401346 MT_USB_DEVICE(USB_VENDOR_ID_XAT,
drivers/hid/hid-sony.c+42−11
@@ -225,6 +225,13 @@ static const unsigned int buzz_keymap[] = { · 224 unmodified lines
225225 struct sony_sc {
226226 unsigned long quirks;
227227
228+#ifdef CONFIG_SONY_FF
229+ struct work_struct rumble_worker;
230+ struct hid_device *hdev;
231+ __u8 left;
232+ __u8 right;
233+#endif
234+
228235 void *extra;
229236 };
230237
@@ -615,9 +622,9 @@ static void buzz_remove(struct hid_device *hdev) · 384 unmodified lines
615622 }
616623
617624 #ifdef CONFIG_SONY_FF
618−static int sony_play_effect(struct input_dev *dev, void *data,
619− struct ff_effect *effect)
625+static void sony_rumble_worker(struct work_struct *work)
620626 {
627+ struct sony_sc *sc = container_of(work, struct sony_sc, rumble_worker);
621628 unsigned char buf[] = {
622629 0x01,
623630 0x00, 0xff, 0x00, 0xff, 0x00,
@@ -628,21 +635,28 @@ static int sony_play_effect(struct input_dev *dev, void *data, · 4 unmodified lines
628635 0xff, 0x27, 0x10, 0x00, 0x32,
629636 0x00, 0x00, 0x00, 0x00, 0x00
630637 };
631− __u8 left;
632− __u8 right;
638+
639+ buf[3] = sc->right;
640+ buf[5] = sc->left;
641+
642+ sc->hdev->hid_output_raw_report(sc->hdev, buf, sizeof(buf),
643+ HID_OUTPUT_REPORT);
644+}
645+
646+static int sony_play_effect(struct input_dev *dev, void *data,
647+ struct ff_effect *effect)
648+{
633649 struct hid_device *hid = input_get_drvdata(dev);
650+ struct sony_sc *sc = hid_get_drvdata(hid);
634651
635652 if (effect->type != FF_RUMBLE)
636653 return 0;
637654
638− left = effect->u.rumble.strong_magnitude / 256;
639− right = effect->u.rumble.weak_magnitude ? 1 : 0;
640−
641− buf[3] = right;
642− buf[5] = left;
655+ sc->left = effect->u.rumble.strong_magnitude / 256;
656+ sc->right = effect->u.rumble.weak_magnitude ? 1 : 0;
643657
644− return hid->hid_output_raw_report(hid, buf, sizeof(buf),
645− HID_OUTPUT_REPORT);
658+ schedule_work(&sc->rumble_worker);
659+ return 0;
646660 }
647661
648662 static int sony_init_ff(struct hid_device *hdev)
@@ -650,16 +664,31 @@ static int sony_init_ff(struct hid_device *hdev) · 1 unmodified line
650664 struct hid_input *hidinput = list_entry(hdev->inputs.next,
651665 struct hid_input, list);
652666 struct input_dev *input_dev = hidinput->input;
667+ struct sony_sc *sc = hid_get_drvdata(hdev);
668+
669+ sc->hdev = hdev;
670+ INIT_WORK(&sc->rumble_worker, sony_rumble_worker);
653671
654672 input_set_capability(input_dev, EV_FF, FF_RUMBLE);
655673 return input_ff_create_memless(input_dev, NULL, sony_play_effect);
656674 }
657675
676+static void sony_destroy_ff(struct hid_device *hdev)
677+{
678+ struct sony_sc *sc = hid_get_drvdata(hdev);
679+
680+ cancel_work_sync(&sc->rumble_worker);
681+}
682+
658683 #else
659684 static int sony_init_ff(struct hid_device *hdev)
660685 {
661686 return 0;
662687 }
688+
689+static void sony_destroy_ff(struct hid_device *hdev)
690+{
691+}
663692 #endif
664693
665694 static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id)
@@ -728,6 +757,8 @@ static void sony_remove(struct hid_device *hdev) · 62 unmodified lines
728757 if (sc->quirks & BUZZ_CONTROLLER)
729758 buzz_remove(hdev);
730759
760+ sony_destroy_ff(hdev);
761+
731762 hid_hw_stop(hdev);
732763 }
733764
drivers/hid/hid-wiimote-core.c+1−4
@@ -834,8 +834,7 @@ static void wiimote_init_set_type(struct wiimote_data *wdata, · 833 unmodified lines
834834 goto done;
835835 }
836836
837− if (vendor == USB_VENDOR_ID_NINTENDO ||
838− vendor == USB_VENDOR_ID_NINTENDO2) {
837+ if (vendor == USB_VENDOR_ID_NINTENDO) {
839838 if (product == USB_DEVICE_ID_NINTENDO_WIIMOTE) {
840839 devtype = WIIMOTE_DEV_GEN10;
841840 goto done;
@@ -1856,8 +1855,6 @@ static void wiimote_hid_remove(struct hid_device *hdev) · 1014 unmodified lines
18561855 static const struct hid_device_id wiimote_hid_devices[] = {
18571856 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO,
18581857 USB_DEVICE_ID_NINTENDO_WIIMOTE) },
1859− { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO2,
1860− USB_DEVICE_ID_NINTENDO_WIIMOTE) },
18611858 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO,
18621859 USB_DEVICE_ID_NINTENDO_WIIMOTE2) },
18631860 { }
drivers/hid/uhid.c+1−1
@@ -287,7 +287,7 @@ static int uhid_event_from_user(const char __user *buffer, size_t len, · 286 unmodified lines
287287 */
288288 struct uhid_create_req_compat *compat;
289289
290− compat = kmalloc(sizeof(*compat), GFP_KERNEL);
290+ compat = kzalloc(sizeof(*compat), GFP_KERNEL);
291291 if (!compat)
292292 return -ENOMEM;
293293