Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a45d82d19a6c2a717bcc33cff243199b77fa0082
Commit:     a45d82d19a6c2a717bcc33cff243199b77fa0082
Parent:     81e1a875505f2963f4d22f7e7ade39d764755f9b
Author:     Michel Daenzer <[EMAIL PROTECTED]>
AuthorDate: Wed Oct 24 16:30:37 2007 +0200
Committer:  Jiri Kosina <[EMAIL PROTECTED]>
CommitDate: Mon Jan 28 14:51:19 2008 +0100

    HID: Add support for Apple aluminum USB keyboards.
    
    Reuse the existing quirks for Apple laptop USB keyboards.
    
    Signed-off-by: Michel Daenzer <[EMAIL PROTECTED]>
    Signed-off-by: Jiri Kosina <[EMAIL PROTECTED]>
---
 drivers/hid/hid-input.c         |   24 +++++++++++++++++++++++-
 drivers/hid/usbhid/Kconfig      |    5 +++--
 drivers/hid/usbhid/hid-quirks.c |    6 ++++++
 3 files changed, 32 insertions(+), 3 deletions(-)

diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
index 85803f1..8c4c908 100644
--- a/drivers/hid/hid-input.c
+++ b/drivers/hid/hid-input.c
@@ -101,6 +101,22 @@ struct hidinput_key_translation {
 
 #define APPLE_FLAG_FKEY 0x01
 
+static struct hidinput_key_translation apple_fn_keys[] = {
+       { KEY_F1,       KEY_BRIGHTNESSDOWN,     APPLE_FLAG_FKEY },
+       { KEY_F2,       KEY_BRIGHTNESSUP,       APPLE_FLAG_FKEY },
+       { KEY_F3,       KEY_CYCLEWINDOWS,       APPLE_FLAG_FKEY }, /* Exposé */
+       { KEY_F4,       KEY_FN_F4,              APPLE_FLAG_FKEY }, /* Dashboard 
*/
+       { KEY_F5,       KEY_FN_F5 },
+       { KEY_F6,       KEY_FN_F6 },
+       { KEY_F7,       KEY_BACK,               APPLE_FLAG_FKEY },
+       { KEY_F8,       KEY_PLAYPAUSE,          APPLE_FLAG_FKEY },
+       { KEY_F9,       KEY_FORWARD,            APPLE_FLAG_FKEY },
+       { KEY_F10,      KEY_MUTE,               APPLE_FLAG_FKEY },
+       { KEY_F11,      KEY_VOLUMEDOWN,         APPLE_FLAG_FKEY },
+       { KEY_F12,      KEY_VOLUMEUP,           APPLE_FLAG_FKEY },
+       { }
+};
+
 static struct hidinput_key_translation powerbook_fn_keys[] = {
        { KEY_BACKSPACE, KEY_DELETE },
        { KEY_F1,       KEY_BRIGHTNESSDOWN,     APPLE_FLAG_FKEY },
@@ -178,7 +194,10 @@ static int hidinput_apple_event(struct hid_device *hid, 
struct input_dev *input,
        if (hid_apple_fnmode) {
                int do_translate;
 
-               trans = find_translation(powerbook_fn_keys, usage->code);
+               trans = find_translation((hid->product < 0x220 ||
+                                         hid->product >= 0x300) ?
+                                        powerbook_fn_keys : apple_fn_keys,
+                                        usage->code);
                if (trans) {
                        if (test_bit(usage->code, hid->apple_pressed_fn))
                                do_translate = 1;
@@ -236,6 +255,9 @@ static void hidinput_apple_setup(struct input_dev *input)
        set_bit(KEY_NUMLOCK, input->keybit);
 
        /* Enable all needed keys */
+       for (trans = apple_fn_keys; trans->from; trans++)
+               set_bit(trans->to, input->keybit);
+
        for (trans = powerbook_fn_keys; trans->from; trans++)
                set_bit(trans->to, input->keybit);
 
diff --git a/drivers/hid/usbhid/Kconfig b/drivers/hid/usbhid/Kconfig
index c557d70..7160fa6 100644
--- a/drivers/hid/usbhid/Kconfig
+++ b/drivers/hid/usbhid/Kconfig
@@ -25,12 +25,13 @@ comment "Input core support is needed for USB HID input 
layer or HIDBP support"
        depends on USB_HID && INPUT=n
 
 config USB_HIDINPUT_POWERBOOK
-       bool "Enable support for iBook/PowerBook/MacBook/MacBookPro special 
keys"
+       bool "Enable support for Apple laptop/aluminum USB special keys"
        default n
        depends on USB_HID
        help
          Say Y here if you want support for the special keys (Fn, Numlock) on
-         Apple iBooks, PowerBooks, MacBooks and MacBook Pros.
+         Apple iBooks, PowerBooks, MacBooks, MacBook Pros and aluminum USB
+         keyboards.
 
          If unsure, say N.
 
diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
index 127f24a..3304b0a 100644
--- a/drivers/hid/usbhid/hid-quirks.c
+++ b/drivers/hid/usbhid/hid-quirks.c
@@ -59,6 +59,9 @@
 #define USB_DEVICE_ID_APPLE_GEYSER4_ANSI       0x021a
 #define USB_DEVICE_ID_APPLE_GEYSER4_ISO        0x021b
 #define USB_DEVICE_ID_APPLE_GEYSER4_JIS        0x021c
+#define USB_DEVICE_ID_APPLE_ALU_ANSI   0x0220
+#define USB_DEVICE_ID_APPLE_ALU_ISO    0x0221
+#define USB_DEVICE_ID_APPLE_ALU_JIS    0x0222
 #define USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY   0x030a
 #define USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY    0x030b
 #define USB_DEVICE_ID_APPLE_IRCONTROL4 0x8242
@@ -551,6 +554,9 @@ static const struct hid_blacklist {
        { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_ANSI, 
HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE },
        { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_ISO, 
HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE | HID_QUIRK_APPLE_ISO_KEYBOARD},
        { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_JIS, 
HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE },
+       { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_ANSI, 
HID_QUIRK_APPLE_HAS_FN },
+       { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_ISO, 
HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_APPLE_ISO_KEYBOARD },
+       { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_JIS, 
HID_QUIRK_APPLE_HAS_FN },
        { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY, 
HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE },
        { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY, 
HID_QUIRK_APPLE_HAS_FN | HID_QUIRK_IGNORE_MOUSE },
 
-
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