Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=08f06177f4089abeba904cc12a2a50cffa9ffce6
Commit:     08f06177f4089abeba904cc12a2a50cffa9ffce6
Parent:     0ce1ac3b3ca0f44682aed210ba6062bafc2e32fa
Author:     Tomoya Adachi <[EMAIL PROTECTED]>
AuthorDate: Wed Oct 3 23:27:49 2007 +0200
Committer:  Jiri Kosina <[EMAIL PROTECTED]>
CommitDate: Sun Oct 14 13:40:01 2007 +0200

    USBHID: report descriptor fix for MacBook JIS keyboard
    
    This patch fixes the problem, that Japanese MacBook doesn't recognize some 
keys
    like '\'(yen, or backslash), '|'(pipe), and '_'(underscore).
    
    It is due to that MacBook JIS keyboard (jp106) sends wrong report 
descriptor.
    It saids "logical maximum = 0x65", so Keyboard.0089 is mapped to 
Key.Unknown,
    while it should be accepted as Key.Yen.
    
    Signed-off-by: Tomoya Adachi <[EMAIL PROTECTED]>
    Signed-off-by: Jiri Kosina <[EMAIL PROTECTED]>
---
 drivers/hid/usbhid/hid-quirks.c |   17 +++++++++++++++++
 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 91abac6..a0d6f08 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 {
        { 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/include/linux/hid.h b/include/linux/hid.h
index eb42e10..35f5384 100644
--- a/include/linux/hid.h
+++ b/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
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to