summarylogtreecommitdiffstats
path: root/0002-HID-apple-Properly-handle-function-keys-on-Keychron-.patch
diff options
context:
space:
mode:
Diffstat (limited to '0002-HID-apple-Properly-handle-function-keys-on-Keychron-.patch')
-rw-r--r--0002-HID-apple-Properly-handle-function-keys-on-Keychron-.patch107
1 files changed, 0 insertions, 107 deletions
diff --git a/0002-HID-apple-Properly-handle-function-keys-on-Keychron-.patch b/0002-HID-apple-Properly-handle-function-keys-on-Keychron-.patch
deleted file mode 100644
index 3fa5fe6ec37b..000000000000
--- a/0002-HID-apple-Properly-handle-function-keys-on-Keychron-.patch
+++ /dev/null
@@ -1,107 +0,0 @@
-From 759410cbc43568775113a7d1c6bff1286a0d2a91 Mon Sep 17 00:00:00 2001
-From: Bryan Cain <bryancain3@gmail.com>
-Date: Thu, 5 May 2022 13:12:21 -0600
-Subject: [PATCH 2/3] HID: apple: Properly handle function keys on Keychron
- keyboards
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Keychron's C-series and K-series of keyboards copy the vendor and
-product IDs of an Apple keyboard, but only behave like that device when
-set to "Mac" mode. In "Windows" mode, the Fn key doesn't generate a
-scancode, so it's impossible to use the F1-F12 keys when fnmode is set
-to its default value of 1.
-
-To fix this, make fnmode default to the new value of 3, which behaves
-like fnmode=2 for Keychron keyboards and like fnmode=1 for actual Apple
-keyboards. This way, Keychron devices are fully usable in both "Windows"
-and "Mac" modes, while behavior is unchanged for everything else.
-
-Signed-off-by: Bryan Cain <bryancain3@gmail.com>
-Reviewed-by: Hans de Goede <hdegoede@redhat.com>
-Tested-by: José Expósito <jose.exposito89@gmail.com>
-Signed-off-by: Jiri Kosina <jkosina@suse.cz>
----
- drivers/hid/hid-apple.c | 22 ++++++++++++++++++----
- 1 file changed, 18 insertions(+), 4 deletions(-)
-
-diff --git a/drivers/hid/hid-apple.c b/drivers/hid/hid-apple.c
-index 0cf35caee9fa..42a568902f49 100644
---- a/drivers/hid/hid-apple.c
-+++ b/drivers/hid/hid-apple.c
-@@ -21,6 +21,7 @@
- #include <linux/module.h>
- #include <linux/slab.h>
- #include <linux/timer.h>
-+#include <linux/string.h>
-
- #include "hid-ids.h"
-
-@@ -35,16 +36,17 @@
- #define APPLE_NUMLOCK_EMULATION BIT(8)
- #define APPLE_RDESC_BATTERY BIT(9)
- #define APPLE_BACKLIGHT_CTL BIT(10)
-+#define APPLE_IS_KEYCHRON BIT(11)
-
- #define APPLE_FLAG_FKEY 0x01
-
- #define HID_COUNTRY_INTERNATIONAL_ISO 13
- #define APPLE_BATTERY_TIMEOUT_MS 60000
-
--static unsigned int fnmode = 1;
-+static unsigned int fnmode = 3;
- module_param(fnmode, uint, 0644);
- MODULE_PARM_DESC(fnmode, "Mode of fn key on Apple keyboards (0 = disabled, "
-- "[1] = fkeyslast, 2 = fkeysfirst)");
-+ "1 = fkeyslast, 2 = fkeysfirst, [3] = auto)");
-
- static int iso_layout = -1;
- module_param(iso_layout, int, 0644);
-@@ -349,6 +351,7 @@ static int hidinput_apple_event(struct hid_device *hid, struct input_dev *input,
- const struct apple_key_translation *trans, *table;
- bool do_translate;
- u16 code = 0;
-+ unsigned int real_fnmode;
-
- u16 fn_keycode = (swap_fn_leftctrl) ? (KEY_LEFTCTRL) : (KEY_FN);
-
-@@ -359,7 +362,13 @@ static int hidinput_apple_event(struct hid_device *hid, struct input_dev *input,
- return 1;
- }
-
-- if (fnmode) {
-+ if (fnmode == 3) {
-+ real_fnmode = (asc->quirks & APPLE_IS_KEYCHRON) ? 2 : 1;
-+ } else {
-+ real_fnmode = fnmode;
-+ }
-+
-+ if (real_fnmode) {
- if (hid->product == USB_DEVICE_ID_APPLE_ALU_WIRELESS_ANSI ||
- hid->product == USB_DEVICE_ID_APPLE_ALU_WIRELESS_ISO ||
- hid->product == USB_DEVICE_ID_APPLE_ALU_WIRELESS_JIS ||
-@@ -406,7 +415,7 @@ static int hidinput_apple_event(struct hid_device *hid, struct input_dev *input,
-
- if (!code) {
- if (trans->flags & APPLE_FLAG_FKEY) {
-- switch (fnmode) {
-+ switch (real_fnmode) {
- case 1:
- do_translate = !asc->fn_on;
- break;
-@@ -660,6 +669,11 @@ static int apple_input_configured(struct hid_device *hdev,
- asc->quirks &= ~APPLE_HAS_FN;
- }
-
-+ if (strncmp(hdev->name, "Keychron", 8) == 0) {
-+ hid_info(hdev, "Keychron keyboard detected; function keys will default to fnmode=2 behavior\n");
-+ asc->quirks |= APPLE_IS_KEYCHRON;
-+ }
-+
- return 0;
- }
-
---
-2.36.1
-