From: Viktor Sharha <vsharha07@gmail.com>
To: Jiri Kosina <jikos@kernel.org>, Benjamin Tissoires <bentiss@kernel.org>
Cc: linux-input@vger.kernel.org, linux-kernel@vger.kernel.org,
Viktor Sharha <vsharha07@gmail.com>
Subject: [PATCH] HID: quirks: add ALWAYS_POLL quirk for Keychron Link receiver
Date: Wed, 28 Oct 2026 23:29:45 +0000 [thread overview]
Message-ID: <20261028232945.20169-1-vsharha07@gmail.com> (raw)
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
reply other threads:[~2026-10-28 23:30 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261028232945.20169-1-vsharha07@gmail.com \
--to=vsharha07@gmail.com \
--cc=bentiss@kernel.org \
--cc=jikos@kernel.org \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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®