diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/hid/hid-input.c | 17 | ||||
-rw-r--r-- | drivers/hid/usbhid/hid-core.c | 18 | ||||
-rw-r--r-- | drivers/hid/usbhid/hid-quirks.c | 5 |
3 files changed, 38 insertions, 2 deletions
diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c index 6cb884638fda..1b8b33341408 100644 --- a/drivers/hid/hid-input.c +++ b/drivers/hid/hid-input.c | |||
@@ -566,6 +566,11 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel | |||
566 | case 0x0e5: map_key_clear(KEY_BASSBOOST); break; | 566 | case 0x0e5: map_key_clear(KEY_BASSBOOST); break; |
567 | case 0x0e9: map_key_clear(KEY_VOLUMEUP); break; | 567 | case 0x0e9: map_key_clear(KEY_VOLUMEUP); break; |
568 | case 0x0ea: map_key_clear(KEY_VOLUMEDOWN); break; | 568 | case 0x0ea: map_key_clear(KEY_VOLUMEDOWN); break; |
569 | |||
570 | /* reserved in HUT 1.12. Reported on Petalynx remote */ | ||
571 | case 0x0f6: map_key_clear(KEY_NEXT); break; | ||
572 | case 0x0fa: map_key_clear(KEY_BACK); break; | ||
573 | |||
569 | case 0x183: map_key_clear(KEY_CONFIG); break; | 574 | case 0x183: map_key_clear(KEY_CONFIG); break; |
570 | case 0x184: map_key_clear(KEY_WORDPROCESSOR); break; | 575 | case 0x184: map_key_clear(KEY_WORDPROCESSOR); break; |
571 | case 0x185: map_key_clear(KEY_EDITOR); break; | 576 | case 0x185: map_key_clear(KEY_EDITOR); break; |
@@ -727,10 +732,10 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel | |||
727 | } | 732 | } |
728 | break; | 733 | break; |
729 | 734 | ||
730 | case HID_UP_LOGIVENDOR: /* Reported on Logitech Ultra X Media Remote */ | 735 | case HID_UP_LOGIVENDOR: |
731 | |||
732 | set_bit(EV_REP, input->evbit); | 736 | set_bit(EV_REP, input->evbit); |
733 | switch(usage->hid & HID_USAGE) { | 737 | switch(usage->hid & HID_USAGE) { |
738 | /* Reported on Logitech Ultra X Media Remote */ | ||
734 | case 0x004: map_key_clear(KEY_AGAIN); break; | 739 | case 0x004: map_key_clear(KEY_AGAIN); break; |
735 | case 0x00d: map_key_clear(KEY_HOME); break; | 740 | case 0x00d: map_key_clear(KEY_HOME); break; |
736 | case 0x024: map_key_clear(KEY_SHUFFLE); break; | 741 | case 0x024: map_key_clear(KEY_SHUFFLE); break; |
@@ -748,6 +753,14 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel | |||
748 | case 0x04d: map_key_clear(KEY_SUBTITLE); break; | 753 | case 0x04d: map_key_clear(KEY_SUBTITLE); break; |
749 | case 0x051: map_key_clear(KEY_RED); break; | 754 | case 0x051: map_key_clear(KEY_RED); break; |
750 | case 0x052: map_key_clear(KEY_CLOSE); break; | 755 | case 0x052: map_key_clear(KEY_CLOSE); break; |
756 | |||
757 | /* Reported on Petalynx Maxter remote */ | ||
758 | case 0x05a: map_key_clear(KEY_TEXT); break; | ||
759 | case 0x05b: map_key_clear(KEY_RED); break; | ||
760 | case 0x05c: map_key_clear(KEY_GREEN); break; | ||
761 | case 0x05d: map_key_clear(KEY_YELLOW); break; | ||
762 | case 0x05e: map_key_clear(KEY_BLUE); break; | ||
763 | |||
751 | default: goto ignore; | 764 | default: goto ignore; |
752 | } | 765 | } |
753 | break; | 766 | break; |
diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c index 093abb5c9879..ef7b881aab3a 100644 --- a/drivers/hid/usbhid/hid-core.c +++ b/drivers/hid/usbhid/hid-core.c | |||
@@ -688,6 +688,21 @@ static void hid_fixup_logitech_descriptor(unsigned char *rdesc, int rsize) | |||
688 | } | 688 | } |
689 | } | 689 | } |
690 | 690 | ||
691 | /* Petalynx Maxter Remote has maximum for consumer page set too low */ | ||
692 | static void hid_fixup_petalynx_descriptor(unsigned char *rdesc, int rsize) | ||
693 | { | ||
694 | if (rsize >= 60 && rdesc[39] == 0x2a | ||
695 | && rdesc[40] == 0xf5 | ||
696 | && rdesc[41] == 0x00 | ||
697 | && rdesc[59] == 0x26 | ||
698 | && rdesc[60] == 0xf9 | ||
699 | && rdesc[61] == 0x00) { | ||
700 | info("Fixing up Petalynx Maxter Remote report descriptor"); | ||
701 | rdesc[60] = 0xfa; | ||
702 | rdesc[40] = 0xfa; | ||
703 | } | ||
704 | } | ||
705 | |||
691 | /* | 706 | /* |
692 | * Some USB barcode readers from cypress have usage min and usage max in | 707 | * Some USB barcode readers from cypress have usage min and usage max in |
693 | * the wrong order | 708 | * the wrong order |
@@ -781,6 +796,9 @@ static struct hid_device *usb_hid_configure(struct usb_interface *intf) | |||
781 | if (quirks & HID_QUIRK_SWAPPED_MIN_MAX) | 796 | if (quirks & HID_QUIRK_SWAPPED_MIN_MAX) |
782 | hid_fixup_cypress_descriptor(rdesc, rsize); | 797 | hid_fixup_cypress_descriptor(rdesc, rsize); |
783 | 798 | ||
799 | if (quirks & HID_QUIRK_PETALYNX_DESCRIPTOR) | ||
800 | hid_fixup_petalynx_descriptor(rdesc, rsize); | ||
801 | |||
784 | #ifdef CONFIG_HID_DEBUG | 802 | #ifdef CONFIG_HID_DEBUG |
785 | printk(KERN_DEBUG __FILE__ ": report descriptor (size %u, read %d) = ", rsize, n); | 803 | printk(KERN_DEBUG __FILE__ ": report descriptor (size %u, read %d) = ", rsize, n); |
786 | for (n = 0; n < rsize; n++) | 804 | for (n = 0; n < rsize; n++) |
diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c index a320c24ea6e8..ad8a4ac8e43c 100644 --- a/drivers/hid/usbhid/hid-quirks.c +++ b/drivers/hid/usbhid/hid-quirks.c | |||
@@ -226,6 +226,9 @@ | |||
226 | #define USB_VENDOR_ID_PANTHERLORD 0x0810 | 226 | #define USB_VENDOR_ID_PANTHERLORD 0x0810 |
227 | #define USB_DEVICE_ID_PANTHERLORD_TWIN_USB_JOYSTICK 0x0001 | 227 | #define USB_DEVICE_ID_PANTHERLORD_TWIN_USB_JOYSTICK 0x0001 |
228 | 228 | ||
229 | #define USB_VENDOR_ID_PETALYNX 0x18b1 | ||
230 | #define USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE 0x0037 | ||
231 | |||
229 | #define USB_VENDOR_ID_PLAYDOTCOM 0x0b43 | 232 | #define USB_VENDOR_ID_PLAYDOTCOM 0x0b43 |
230 | #define USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII 0x0003 | 233 | #define USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII 0x0003 |
231 | 234 | ||
@@ -426,6 +429,8 @@ static const struct hid_blacklist { | |||
426 | { USB_VENDOR_ID_PANTHERLORD, USB_DEVICE_ID_PANTHERLORD_TWIN_USB_JOYSTICK, HID_QUIRK_MULTI_INPUT | HID_QUIRK_SKIP_OUTPUT_REPORTS }, | 429 | { USB_VENDOR_ID_PANTHERLORD, USB_DEVICE_ID_PANTHERLORD_TWIN_USB_JOYSTICK, HID_QUIRK_MULTI_INPUT | HID_QUIRK_SKIP_OUTPUT_REPORTS }, |
427 | { USB_VENDOR_ID_PLAYDOTCOM, USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII, HID_QUIRK_MULTI_INPUT }, | 430 | { USB_VENDOR_ID_PLAYDOTCOM, USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII, HID_QUIRK_MULTI_INPUT }, |
428 | 431 | ||
432 | { USB_VENDOR_ID_PETALYNX, USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE, HID_QUIRK_PETALYNX_DESCRIPTOR | HID_QUIRK_NOGET }, | ||
433 | |||
429 | { USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER, HID_QUIRK_SONY_PS3_CONTROLLER }, | 434 | { USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER, HID_QUIRK_SONY_PS3_CONTROLLER }, |
430 | 435 | ||
431 | { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_UC100KM, HID_QUIRK_NOGET }, | 436 | { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_UC100KM, HID_QUIRK_NOGET }, |