aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hid
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/hid')
-rw-r--r--drivers/hid/hid-input.c17
-rw-r--r--drivers/hid/usbhid/hid-core.c18
-rw-r--r--drivers/hid/usbhid/hid-quirks.c5
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 */
692static 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 },