HID: apple: Magic Keyboard 2015 FN key mapping
authorJosé Expósito <jose.exposito89@gmail.com>
Tue, 8 Feb 2022 18:37:04 +0000 (19:37 +0100)
committerJiri Kosina <jkosina@suse.cz>
Wed, 16 Feb 2022 15:49:45 +0000 (16:49 +0100)
The Magic Keyboard 2015 function key mapping was not present and the
default mapping was used.
While this worked for most keys, the F5 and F6 keys were sending
KEY_KBDILLUMDOWN and KEY_KBDILLUMUP; however, the keyboard is not
backlited.

Add a custom translation table for the keyboard leaving F5 and F6
unassigned to mimic the default behavior on macOS.

Signed-off-by: José Expósito <jose.exposito89@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-apple.c

index 8097765f9df6d58b180f5e3ad41bb7aa215a1729..2ce404b46adf5404a65d71784f9d526b4818f385 100644 (file)
@@ -97,6 +97,26 @@ static const struct apple_key_translation magic_keyboard_alu_fn_keys[] = {
        { }
 };
 
+static const struct apple_key_translation magic_keyboard_2015_fn_keys[] = {
+       { KEY_BACKSPACE, KEY_DELETE },
+       { KEY_ENTER,    KEY_INSERT },
+       { KEY_F1,       KEY_BRIGHTNESSDOWN, APPLE_FLAG_FKEY },
+       { KEY_F2,       KEY_BRIGHTNESSUP,   APPLE_FLAG_FKEY },
+       { KEY_F3,       KEY_SCALE,          APPLE_FLAG_FKEY },
+       { KEY_F4,       KEY_DASHBOARD,      APPLE_FLAG_FKEY },
+       { KEY_F7,       KEY_PREVIOUSSONG,   APPLE_FLAG_FKEY },
+       { KEY_F8,       KEY_PLAYPAUSE,      APPLE_FLAG_FKEY },
+       { KEY_F9,       KEY_NEXTSONG,       APPLE_FLAG_FKEY },
+       { KEY_F10,      KEY_MUTE,           APPLE_FLAG_FKEY },
+       { KEY_F11,      KEY_VOLUMEDOWN,     APPLE_FLAG_FKEY },
+       { KEY_F12,      KEY_VOLUMEUP,       APPLE_FLAG_FKEY },
+       { KEY_UP,       KEY_PAGEUP },
+       { KEY_DOWN,     KEY_PAGEDOWN },
+       { KEY_LEFT,     KEY_HOME },
+       { KEY_RIGHT,    KEY_END },
+       { }
+};
+
 static const struct apple_key_translation apple2021_fn_keys[] = {
        { KEY_BACKSPACE, KEY_DELETE },
        { KEY_ENTER,    KEY_INSERT },
@@ -282,6 +302,9 @@ static int hidinput_apple_event(struct hid_device *hid, struct input_dev *input,
                    hid->product == USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ISO ||
                    hid->product == USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_JIS)
                        table = magic_keyboard_alu_fn_keys;
+               else if (hid->product == USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2015 ||
+                        hid->product == USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_NUMPAD_2015)
+                       table = magic_keyboard_2015_fn_keys;
                else if (hid->product == USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2021 ||
                         hid->product == USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_FINGERPRINT_2021 ||
                         hid->product == USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_NUMPAD_2021)
@@ -500,6 +523,7 @@ static void apple_setup_input(struct input_dev *input)
        apple_setup_key_translation(input, powerbook_numlock_keys);
        apple_setup_key_translation(input, apple_iso_keyboard);
        apple_setup_key_translation(input, magic_keyboard_alu_fn_keys);
+       apple_setup_key_translation(input, magic_keyboard_2015_fn_keys);
        apple_setup_key_translation(input, apple2021_fn_keys);
 
        if (swap_fn_leftctrl)