diff options
author | Jiri Kosina <jkosina@suse.cz> | 2007-06-18 07:30:11 -0400 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2007-07-09 08:13:33 -0400 |
commit | 92d9e6e607eb7f8f1d2a43935f45cf300cf6fdf8 (patch) | |
tree | 52a583569ad4262ea354941e604f464770ee7756 /drivers/hid/usbhid | |
parent | 5fce620c0c7caa9e8d9588e8dcc66c52c456851a (diff) |
HID: support for Petalynx Maxter remote control
Petalynx Maxter remote control [1] 0x18b1/0x0037 emits 0xfa and 0xfc from
consumer page (reserved in HUT 1.12) for back and more keys. It also emits
a few usages from LOGIVENDOR page, which need adding.
Also, this device has broken report descriptor - the reported maximum is too
low - it doesn't contain the range for 'back' and 'more' keys, so we need to
bump it up before the report descriptor is being parsed.
Besides all this, it also requires NOGET quirk.
This patch does so.
[1] http://www.elmak.pl/index.php?option=com_phpshop&page=shop.browse&category_id=14&ext=opis&lang=en
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Diffstat (limited to 'drivers/hid/usbhid')
-rw-r--r-- | drivers/hid/usbhid/hid-core.c | 18 | ||||
-rw-r--r-- | drivers/hid/usbhid/hid-quirks.c | 5 |
2 files changed, 23 insertions, 0 deletions
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 }, |