Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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

+72 -18
+1
drivers/hid/Kconfig
··· 460 460 - Stantum multitouch panels 461 461 - Touch International Panels 462 462 - Unitec Panels 463 + - Wistron optical touch panels 463 464 - XAT optical touch panels 464 465 - Xiroku optical touch panels 465 466 - Zytronic touch panels
+3
drivers/hid/hid-appleir.c
··· 297 297 298 298 appleir->hid = hid; 299 299 300 + /* force input as some remotes bypass the input registration */ 301 + hid->quirks |= HID_QUIRK_HIDINPUT_FORCE; 302 + 300 303 spin_lock_init(&appleir->lock); 301 304 setup_timer(&appleir->key_up_timer, 302 305 key_up_tick, (unsigned long) appleir);
+1 -1
drivers/hid/hid-core.c
··· 1723 1723 { HID_USB_DEVICE(USB_VENDOR_ID_KENSINGTON, USB_DEVICE_ID_KS_SLIMBLADE) }, 1724 1724 { HID_USB_DEVICE(USB_VENDOR_ID_KEYTOUCH, USB_DEVICE_ID_KEYTOUCH_IEC) }, 1725 1725 { 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) }, 1726 1727 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_GENIUS_GX_IMPERATOR) }, 1727 1728 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_ERGO_525V) }, 1728 1729 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_I405X) }, ··· 1880 1879 1881 1880 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_BT) }, 1882 1881 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO, USB_DEVICE_ID_NINTENDO_WIIMOTE) }, 1883 - { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO2, USB_DEVICE_ID_NINTENDO_WIIMOTE) }, 1884 1882 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO, USB_DEVICE_ID_NINTENDO_WIIMOTE2) }, 1885 1883 { } 1886 1884 };
+4 -1
drivers/hid/hid-ids.h
··· 489 489 #define USB_VENDOR_ID_KYE 0x0458 490 490 #define USB_DEVICE_ID_KYE_ERGO_525V 0x0087 491 491 #define USB_DEVICE_ID_GENIUS_GILA_GAMING_MOUSE 0x0138 492 + #define USB_DEVICE_ID_GENIUS_MANTICORE 0x0153 492 493 #define USB_DEVICE_ID_GENIUS_GX_IMPERATOR 0x4018 493 494 #define USB_DEVICE_ID_KYE_GPEN_560 0x5003 494 495 #define USB_DEVICE_ID_KYE_EASYPEN_I405X 0x5010 ··· 641 640 #define USB_DEVICE_ID_NEXTWINDOW_TOUCHSCREEN 0x0003 642 641 643 642 #define USB_VENDOR_ID_NINTENDO 0x057e 644 - #define USB_VENDOR_ID_NINTENDO2 0x054c 645 643 #define USB_DEVICE_ID_NINTENDO_WIIMOTE 0x0306 646 644 #define USB_DEVICE_ID_NINTENDO_WIIMOTE2 0x0330 647 645 ··· 901 901 #define USB_DEVICE_ID_SUPER_JOY_BOX_3_PRO 0x8801 902 902 #define USB_DEVICE_ID_SUPER_DUAL_BOX_PRO 0x8802 903 903 #define USB_DEVICE_ID_SUPER_JOY_BOX_5_PRO 0x8804 904 + 905 + #define USB_VENDOR_ID_WISTRON 0x0fb8 906 + #define USB_DEVICE_ID_WISTRON_OPTICAL_TOUCH 0x1109 904 907 905 908 #define USB_VENDOR_ID_X_TENSIONS 0x1ae7 906 909 #define USB_DEVICE_ID_SPEEDLINK_VAD_CEZANNE 0x9001
+13
drivers/hid/hid-kye.c
··· 341 341 case USB_DEVICE_ID_GENIUS_GX_IMPERATOR: 342 342 rdesc = kye_consumer_control_fixup(hdev, rdesc, rsize, 83, 343 343 "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"); 344 347 break; 345 348 } 346 349 return rdesc; ··· 421 418 goto enabling_err; 422 419 } 423 420 break; 421 + case USB_DEVICE_ID_GENIUS_MANTICORE: 422 + /* 423 + * The manticore keyboard needs to have all the interfaces 424 + * opened at least once to be fully functional. 425 + */ 426 + if (hid_hw_open(hdev)) 427 + hid_hw_close(hdev); 428 + break; 424 429 } 425 430 426 431 return 0; ··· 450 439 USB_DEVICE_ID_GENIUS_GILA_GAMING_MOUSE) }, 451 440 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, 452 441 USB_DEVICE_ID_GENIUS_GX_IMPERATOR) }, 442 + { HID_USB_DEVICE(USB_VENDOR_ID_KYE, 443 + USB_DEVICE_ID_GENIUS_MANTICORE) }, 453 444 { } 454 445 }; 455 446 MODULE_DEVICE_TABLE(hid, kye_devices);
+6
drivers/hid/hid-multitouch.c
··· 1335 1335 { .driver_data = MT_CLS_NSMU, 1336 1336 MT_USB_DEVICE(USB_VENDOR_ID_UNITEC, 1337 1337 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 + 1338 1344 /* XAT */ 1339 1345 { .driver_data = MT_CLS_NSMU, 1340 1346 MT_USB_DEVICE(USB_VENDOR_ID_XAT,
+42 -11
drivers/hid/hid-sony.c
··· 225 225 struct sony_sc { 226 226 unsigned long quirks; 227 227 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 + 228 235 void *extra; 229 236 }; 230 237 ··· 622 615 } 623 616 624 617 #ifdef CONFIG_SONY_FF 625 - static int sony_play_effect(struct input_dev *dev, void *data, 626 - struct ff_effect *effect) 618 + static void sony_rumble_worker(struct work_struct *work) 627 619 { 620 + struct sony_sc *sc = container_of(work, struct sony_sc, rumble_worker); 628 621 unsigned char buf[] = { 629 622 0x01, 630 623 0x00, 0xff, 0x00, 0xff, 0x00, ··· 635 628 0xff, 0x27, 0x10, 0x00, 0x32, 636 629 0x00, 0x00, 0x00, 0x00, 0x00 637 630 }; 638 - __u8 left; 639 - __u8 right; 631 + 632 + buf[3] = sc->right; 633 + buf[5] = sc->left; 634 + 635 + sc->hdev->hid_output_raw_report(sc->hdev, buf, sizeof(buf), 636 + HID_OUTPUT_REPORT); 637 + } 638 + 639 + static int sony_play_effect(struct input_dev *dev, void *data, 640 + struct ff_effect *effect) 641 + { 640 642 struct hid_device *hid = input_get_drvdata(dev); 643 + struct sony_sc *sc = hid_get_drvdata(hid); 641 644 642 645 if (effect->type != FF_RUMBLE) 643 646 return 0; 644 647 645 - left = effect->u.rumble.strong_magnitude / 256; 646 - right = effect->u.rumble.weak_magnitude ? 1 : 0; 648 + sc->left = effect->u.rumble.strong_magnitude / 256; 649 + sc->right = effect->u.rumble.weak_magnitude ? 1 : 0; 647 650 648 - buf[3] = right; 649 - buf[5] = left; 650 - 651 - return hid->hid_output_raw_report(hid, buf, sizeof(buf), 652 - HID_OUTPUT_REPORT); 651 + schedule_work(&sc->rumble_worker); 652 + return 0; 653 653 } 654 654 655 655 static int sony_init_ff(struct hid_device *hdev) ··· 664 650 struct hid_input *hidinput = list_entry(hdev->inputs.next, 665 651 struct hid_input, list); 666 652 struct input_dev *input_dev = hidinput->input; 653 + struct sony_sc *sc = hid_get_drvdata(hdev); 654 + 655 + sc->hdev = hdev; 656 + INIT_WORK(&sc->rumble_worker, sony_rumble_worker); 667 657 668 658 input_set_capability(input_dev, EV_FF, FF_RUMBLE); 669 659 return input_ff_create_memless(input_dev, NULL, sony_play_effect); 660 + } 661 + 662 + static void sony_destroy_ff(struct hid_device *hdev) 663 + { 664 + struct sony_sc *sc = hid_get_drvdata(hdev); 665 + 666 + cancel_work_sync(&sc->rumble_worker); 670 667 } 671 668 672 669 #else 673 670 static int sony_init_ff(struct hid_device *hdev) 674 671 { 675 672 return 0; 673 + } 674 + 675 + static void sony_destroy_ff(struct hid_device *hdev) 676 + { 676 677 } 677 678 #endif 678 679 ··· 756 727 757 728 if (sc->quirks & BUZZ_CONTROLLER) 758 729 buzz_remove(hdev); 730 + 731 + sony_destroy_ff(hdev); 759 732 760 733 hid_hw_stop(hdev); 761 734 }
+1 -4
drivers/hid/hid-wiimote-core.c
··· 834 834 goto done; 835 835 } 836 836 837 - if (vendor == USB_VENDOR_ID_NINTENDO || 838 - vendor == USB_VENDOR_ID_NINTENDO2) { 837 + if (vendor == USB_VENDOR_ID_NINTENDO) { 839 838 if (product == USB_DEVICE_ID_NINTENDO_WIIMOTE) { 840 839 devtype = WIIMOTE_DEV_GEN10; 841 840 goto done; ··· 1854 1855 1855 1856 static const struct hid_device_id wiimote_hid_devices[] = { 1856 1857 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO, 1857 - USB_DEVICE_ID_NINTENDO_WIIMOTE) }, 1858 - { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO2, 1859 1858 USB_DEVICE_ID_NINTENDO_WIIMOTE) }, 1860 1859 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO, 1861 1860 USB_DEVICE_ID_NINTENDO_WIIMOTE2) },
+1 -1
drivers/hid/uhid.c
··· 287 287 */ 288 288 struct uhid_create_req_compat *compat; 289 289 290 - compat = kmalloc(sizeof(*compat), GFP_KERNEL); 290 + compat = kzalloc(sizeof(*compat), GFP_KERNEL); 291 291 if (!compat) 292 292 return -ENOMEM; 293 293