diff options
| -rw-r--r-- | drivers/hid/usbhid/hid-quirks.c | 17 | ||||
| -rw-r--r-- | include/linux/hid.h | 1 |
2 files changed, 18 insertions, 0 deletions
diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c index 91abac6a30cd..a0d6f081ee5c 100644 --- a/drivers/hid/usbhid/hid-quirks.c +++ b/drivers/hid/usbhid/hid-quirks.c | |||
| @@ -624,6 +624,8 @@ static const struct hid_rdesc_blacklist { | |||
| 624 | { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER, HID_QUIRK_RDESC_LOGITECH }, | 624 | { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER, HID_QUIRK_RDESC_LOGITECH }, |
| 625 | { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER_2, HID_QUIRK_RDESC_LOGITECH }, | 625 | { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER_2, HID_QUIRK_RDESC_LOGITECH }, |
| 626 | 626 | ||
| 627 | { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_JIS, HID_QUIRK_RDESC_MACBOOK_JIS }, | ||
| 628 | |||
| 627 | { USB_VENDOR_ID_PETALYNX, USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE, HID_QUIRK_RDESC_PETALYNX }, | 629 | { USB_VENDOR_ID_PETALYNX, USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE, HID_QUIRK_RDESC_PETALYNX }, |
| 628 | 630 | ||
| 629 | { USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_1, HID_QUIRK_RDESC_SWAPPED_MIN_MAX }, | 631 | { USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_1, HID_QUIRK_RDESC_SWAPPED_MIN_MAX }, |
| @@ -937,6 +939,18 @@ static void usbhid_fixup_cypress_descriptor(unsigned char *rdesc, int rsize) | |||
| 937 | printk(KERN_INFO "Fixing up Cypress report descriptor\n"); | 939 | printk(KERN_INFO "Fixing up Cypress report descriptor\n"); |
| 938 | } | 940 | } |
| 939 | 941 | ||
| 942 | /* | ||
| 943 | * MacBook JIS keyboard has wrong logical maximum | ||
| 944 | */ | ||
| 945 | static void usbhid_fixup_macbook_descriptor(unsigned char *rdesc, int rsize) | ||
| 946 | { | ||
| 947 | if (rsize >= 60 && rdesc[53] == 0x65 | ||
| 948 | && rdesc[59] == 0x65) { | ||
| 949 | printk(KERN_INFO "Fixing up MacBook JIS keyboard report descriptor\n"); | ||
| 950 | rdesc[53] = rdesc[59] = 0xe7; | ||
| 951 | } | ||
| 952 | } | ||
| 953 | |||
| 940 | 954 | ||
| 941 | static void __usbhid_fixup_report_descriptor(__u32 quirks, char *rdesc, unsigned rsize) | 955 | static void __usbhid_fixup_report_descriptor(__u32 quirks, char *rdesc, unsigned rsize) |
| 942 | { | 956 | { |
| @@ -951,6 +965,9 @@ static void __usbhid_fixup_report_descriptor(__u32 quirks, char *rdesc, unsigned | |||
| 951 | 965 | ||
| 952 | if (quirks & HID_QUIRK_RDESC_PETALYNX) | 966 | if (quirks & HID_QUIRK_RDESC_PETALYNX) |
| 953 | usbhid_fixup_petalynx_descriptor(rdesc, rsize); | 967 | usbhid_fixup_petalynx_descriptor(rdesc, rsize); |
| 968 | |||
| 969 | if (quirks & HID_QUIRK_RDESC_MACBOOK_JIS) | ||
| 970 | usbhid_fixup_macbook_descriptor(rdesc, rsize); | ||
| 954 | } | 971 | } |
| 955 | 972 | ||
| 956 | /** | 973 | /** |
diff --git a/include/linux/hid.h b/include/linux/hid.h index eb42e10e3c86..35f5384a465b 100644 --- a/include/linux/hid.h +++ b/include/linux/hid.h | |||
| @@ -286,6 +286,7 @@ struct hid_item { | |||
| 286 | #define HID_QUIRK_RDESC_LOGITECH 0x00000002 | 286 | #define HID_QUIRK_RDESC_LOGITECH 0x00000002 |
| 287 | #define HID_QUIRK_RDESC_SWAPPED_MIN_MAX 0x00000004 | 287 | #define HID_QUIRK_RDESC_SWAPPED_MIN_MAX 0x00000004 |
| 288 | #define HID_QUIRK_RDESC_PETALYNX 0x00000008 | 288 | #define HID_QUIRK_RDESC_PETALYNX 0x00000008 |
| 289 | #define HID_QUIRK_RDESC_MACBOOK_JIS 0x00000010 | ||
| 289 | 290 | ||
| 290 | /* | 291 | /* |
| 291 | * This is the global environment of the parser. This information is | 292 | * This is the global environment of the parser. This information is |
