u8 flags;
 };
 
+static const struct apple_key_translation apple2021_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_SEARCH,         APPLE_FLAG_FKEY },
+       { KEY_F5,       KEY_MICMUTE,        APPLE_FLAG_FKEY },
+       { KEY_F6,       KEY_SLEEP,          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 macbookair_fn_keys[] = {
        { KEY_BACKSPACE, KEY_DELETE },
        { KEY_ENTER,    KEY_INSERT },
        }
 
        if (fnmode) {
-               if (hid->product >= USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI &&
+               if (hid->product == USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2021)
+                       table = apple2021_fn_keys;
+               else if (hid->product >= USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI &&
                                hid->product <= USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS)
                        table = macbookair_fn_keys;
                else if (hid->product < 0x21d || hid->product >= 0x300)
        for (trans = apple_iso_keyboard; trans->from; trans++)
                set_bit(trans->to, input->keybit);
 
+       for (trans = apple2021_fn_keys; trans->from; trans++)
+               set_bit(trans->to, input->keybit);
+
        if (swap_fn_leftctrl) {
                for (trans = swapped_fn_leftctrl_keys; trans->from; trans++)
                        set_bit(trans->to, input->keybit);