From 924244c36cdf56c6c7000f27bf9d6cbdcaa5d67e Mon Sep 17 00:00:00 2001 From: Tomoya Adachi Date: Wed, 3 Oct 2007 23:27:49 +0200 Subject: [PATCH] --- yaml --- r: 68669 b: refs/heads/master c: 08f06177f4089abeba904cc12a2a50cffa9ffce6 h: refs/heads/master i: 68667: 7a54d831062f97998772a100b1dc20254ec0307d v: v3 --- [refs] | 2 +- trunk/drivers/hid/usbhid/hid-quirks.c | 17 +++++++++++++++++ trunk/include/linux/hid.h | 1 + 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 7889b6d77cf6..3d4f0d23784a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 0ce1ac3b3ca0f44682aed210ba6062bafc2e32fa +refs/heads/master: 08f06177f4089abeba904cc12a2a50cffa9ffce6 diff --git a/trunk/drivers/hid/usbhid/hid-quirks.c b/trunk/drivers/hid/usbhid/hid-quirks.c index 91abac6a30cd..a0d6f081ee5c 100644 --- a/trunk/drivers/hid/usbhid/hid-quirks.c +++ b/trunk/drivers/hid/usbhid/hid-quirks.c @@ -624,6 +624,8 @@ static const struct hid_rdesc_blacklist { { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER, HID_QUIRK_RDESC_LOGITECH }, { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER_2, HID_QUIRK_RDESC_LOGITECH }, + { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_JIS, HID_QUIRK_RDESC_MACBOOK_JIS }, + { USB_VENDOR_ID_PETALYNX, USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE, HID_QUIRK_RDESC_PETALYNX }, { 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) printk(KERN_INFO "Fixing up Cypress report descriptor\n"); } +/* + * MacBook JIS keyboard has wrong logical maximum + */ +static void usbhid_fixup_macbook_descriptor(unsigned char *rdesc, int rsize) +{ + if (rsize >= 60 && rdesc[53] == 0x65 + && rdesc[59] == 0x65) { + printk(KERN_INFO "Fixing up MacBook JIS keyboard report descriptor\n"); + rdesc[53] = rdesc[59] = 0xe7; + } +} + static void __usbhid_fixup_report_descriptor(__u32 quirks, char *rdesc, unsigned rsize) { @@ -951,6 +965,9 @@ static void __usbhid_fixup_report_descriptor(__u32 quirks, char *rdesc, unsigned if (quirks & HID_QUIRK_RDESC_PETALYNX) usbhid_fixup_petalynx_descriptor(rdesc, rsize); + + if (quirks & HID_QUIRK_RDESC_MACBOOK_JIS) + usbhid_fixup_macbook_descriptor(rdesc, rsize); } /** diff --git a/trunk/include/linux/hid.h b/trunk/include/linux/hid.h index eb42e10e3c86..35f5384a465b 100644 --- a/trunk/include/linux/hid.h +++ b/trunk/include/linux/hid.h @@ -286,6 +286,7 @@ struct hid_item { #define HID_QUIRK_RDESC_LOGITECH 0x00000002 #define HID_QUIRK_RDESC_SWAPPED_MIN_MAX 0x00000004 #define HID_QUIRK_RDESC_PETALYNX 0x00000008 +#define HID_QUIRK_RDESC_MACBOOK_JIS 0x00000010 /* * This is the global environment of the parser. This information is