mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] HID: quirks: add ALWAYS_POLL quirk for Keychron Link receiver
@ 2026-10-28 23:29 Viktor Sharha
  0 siblings, 0 replies; only message in thread
From: Viktor Sharha @ 2026-10-28 23:29 UTC (permalink / raw)
  To: Jiri Kosina, Benjamin Tissoires; +Cc: linux-input, linux-kernel, Viktor Sharha

The Keychron Link 2.4 GHz receiver (3434:d030) exposes a joystick on an
interface of its own. Keychron's Hall-effect keyboards, such as the
K4 HE, send a burst of joystick reports on that interface every time
the user switches actuation profile, even when no profile uses the
joystick.

Desktop environments do not open joystick devices, so usbhid does not
poll that interface and the reports are never read. The receiver then
stops delivering keyboard input on its other interfaces until the host
re-enumerates it or the keyboard is switched to wired mode and back. A
key held during the switch also keeps auto-repeating, because its
release never arrives.

Holding the joystick device open, or booting with
usbhid.quirks=0x3434:0xd030:0x00000400, avoids the problem. Windows is
not affected, as it polls every HID interface.

Link: https://github.com/Keychron/qmk_firmware/issues/532
Signed-off-by: Viktor Sharha <vsharha07@gmail.com>
---
 drivers/hid/hid-ids.h    | 3 +++
 drivers/hid/hid-quirks.c | 2 ++
 2 files changed, 5 insertions(+)

diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index 91319aa65..856181478 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -802,6 +802,9 @@
 #define USB_VENDOR_ID_KENSINGTON	0x047d
 #define USB_DEVICE_ID_KS_SLIMBLADE	0x2041
 
+#define USB_VENDOR_ID_KEYCHRON		0x3434
+#define USB_DEVICE_ID_KEYCHRON_LINK	0xd030
+
 #define USB_VENDOR_ID_KWORLD		0x1b80
 #define USB_DEVICE_ID_KWORLD_RADIO_FM700	0xd700
 
diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c
index 793db001a..d56516aad 100644
--- a/drivers/hid/hid-quirks.c
+++ b/drivers/hid/hid-quirks.c
@@ -116,6 +116,8 @@ static const struct hid_device_id hid_quirks[] = {
 	{ HID_USB_DEVICE(USB_VENDOR_ID_INNOMEDIA, USB_DEVICE_ID_INNEX_GENESIS_ATARI), HID_QUIRK_MULTI_INPUT },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_JESS, USB_DEVICE_ID_AULA_MINI_60_HE_PRO),
 		HID_QUIRK_ALWAYS_POLL },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_KEYCHRON, USB_DEVICE_ID_KEYCHRON_LINK),
+		HID_QUIRK_ALWAYS_POLL },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_PIXART_USB_OPTICAL_MOUSE_ID2), HID_QUIRK_ALWAYS_POLL },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M406), HID_QUIRK_MULTI_INPUT },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M506), HID_QUIRK_MULTI_INPUT },
-- 
2.56.0


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2026-10-28 23:30 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-10-28 23:29 [PATCH] HID: quirks: add ALWAYS_POLL quirk for Keychron Link receiver Viktor Sharha

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®