Control: tags -1 + moreinfo
Control: forwarded -1 
https://lore.kernel.org/regressions/[email protected]/

Hi,

On Tue, Sep 29, 2026 at 10:04:14PM -0300, Facundo Gomez wrote:
> Package: src:linux
> Version: 6.12.111-1
> Severity: normal
> 
> Hello,
> 
> After upgrading from linux-image-6.12.107+deb13-amd64 to
> linux-image-6.12.111+deb13-amd64, the built-in keyboard of my laptop no
> longer works at the LightDM login screen. With 6.12.107 everything works.
> 
> Hardware
> - ASUS ROG Strix G18 G814FP, BIOS G814FP.316 (05/14/2026)
> - Keyboard: ASUSTek "N-KEY Device", USB ID 0b05:19b6, handled by hid_asus
> 
> System
> - LMDE 7 (Debian 13 based), using the official Debian kernel packages
> - LightDM + slick-greeter, Cinnamon, X11
> - NVIDIA driver 610.43.03 (out-of-tree, DKMS). Note that the hid_asus
>   error below is logged at ~2.0 s, before the nvidia module loads (~4.4 s).
> 
> Symptoms with 6.12.111
> - The keyboard works in GRUB, but not at the LightDM login screen (I have
>   to use the on-screen keyboard to log in).
> - After logging in, the keyboard works normally, except Fn+F2/F3
>   (keyboard backlight brightness).
> - With 6.12.107 the keyboard works everywhere, including Fn+F2/F3.
> 
> Kernel log
> Present only in 6.12.111, right after hid_asus binds to the device:
> 
> [    2.008836] asus 0003:0B05:19B6.0003: Fixing up Asus N-Key report
> descriptor
> [    2.009349] asus 0003:0B05:19B6.0003: using HID for asus::kbd_backlight
> [    2.018672] asus 0003:0B05:19B6.0003: Asus failed to request functions:
> -75
> [    2.018684] asus 0003:0B05:19B6.0003: Failed to initialize backlight.
> 
> In 6.12.107 the same sequence appears without the last two lines. There
> are no USB disconnect/reset events for usb 3-1 in either kernel. The other
> ACPI/WMI errors (nvidia-wmi-ec-backlight AE_NOT_FOUND, unresolved BPWM/GPP
> symbols) appear in both kernels.
> 
> Workaround
> Booting 6.12.111 with modprobe.blacklist=hid_asus on the kernel command
> line makes the keyboard work at the login screen (Fn+F2/F3 still do not
> work).
> 
> Expected: keyboard works at the login screen and Fn+F2/F3 work, as in
> 6.12.107.
> 
> Please let me know if I can test anything else.

This seems to be the ame issue as reported as regression here (but for
the 6.18.y series):
https://lore.kernel.org/regressions/[email protected]/

In fact 56d1b33e644c ("HID: asus: simplify RGB init sequence") got
backported to v6.12.108, v6.18.49, and the followup commit
e82ae34af29e ("HID: asus: fortify keyboard handshake") is missing from
the 6.12.y series.

Can you please try to apply the following patch and see if the problem
is gone?

Regards,
Salvatore
>From e82ae34af29e910c96d33c8b3a90c60e27f1625e Mon Sep 17 00:00:00 2001
From: Antheas Kapenekakis <[email protected]>
Date: Thu, 22 Jan 2026 08:50:37 +0100
Subject: [PATCH] HID: asus: fortify keyboard handshake
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Handshaking with an Asus device involves sending it a feature report
with the string "ASUS Tech.Inc." and then reading it back to verify the
handshake was successful, under the feature ID the interaction will
take place.

Currently, the driver only does the first part. Add the readback to
verify the handshake was successful. As this could cause breakages,
allow the verification to fail with a dmesg error until we verify
all devices work with it (they seem to).

Since the response is more than 16 bytes, increase the buffer size
to 64 as well to avoid overflow errors. In addition, add the report
ID to prints, to help identify failed handshakes.

Reviewed-by: Benjamin Tissoires <[email protected]>
Reviewed-by: Denis Benato <[email protected]>
Acked-by: Benjamin Tissoires <[email protected]>
Signed-off-by: Antheas Kapenekakis <[email protected]>
Link: https://patch.msgid.link/[email protected]
Reviewed-by: Ilpo J??rvinen <[email protected]>
Signed-off-by: Ilpo J??rvinen <[email protected]>
---
 drivers/hid/hid-asus.c | 34 ++++++++++++++++++++++++++++++----
 1 file changed, 30 insertions(+), 4 deletions(-)

diff --git a/drivers/hid/hid-asus.c b/drivers/hid/hid-asus.c
index 2ff2170dc30a..cbf5bab9113b 100644
--- a/drivers/hid/hid-asus.c
+++ b/drivers/hid/hid-asus.c
@@ -49,7 +49,7 @@ MODULE_DESCRIPTION("Asus HID Keyboard and TouchPad");
 #define FEATURE_REPORT_ID 0x0d
 #define INPUT_REPORT_ID 0x5d
 #define FEATURE_KBD_REPORT_ID 0x5a
-#define FEATURE_KBD_REPORT_SIZE 16
+#define FEATURE_KBD_REPORT_SIZE 64
 #define FEATURE_KBD_LED_REPORT_ID1 0x5d
 #define FEATURE_KBD_LED_REPORT_ID2 0x5e
 
@@ -395,15 +395,41 @@ static int asus_kbd_set_report(struct hid_device *hdev, const u8 *buf, size_t bu
 
 static int asus_kbd_init(struct hid_device *hdev, u8 report_id)
 {
+	/*
+	 * The handshake is first sent as a set_report, then retrieved
+	 * from a get_report. They should be equal.
+	 */
 	const u8 buf[] = { report_id, 0x41, 0x53, 0x55, 0x53, 0x20, 0x54,
 		     0x65, 0x63, 0x68, 0x2e, 0x49, 0x6e, 0x63, 0x2e, 0x00 };
 	int ret;
 
 	ret = asus_kbd_set_report(hdev, buf, sizeof(buf));
-	if (ret < 0)
-		hid_err(hdev, "Asus failed to send init command: %d\n", ret);
+	if (ret < 0) {
+		hid_err(hdev, "Asus handshake %02x failed to send: %d\n",
+			report_id, ret);
+		return ret;
+	}
 
-	return ret;
+	u8 *readbuf __free(kfree) = kzalloc(FEATURE_KBD_REPORT_SIZE, GFP_KERNEL);
+	if (!readbuf)
+		return -ENOMEM;
+
+	ret = hid_hw_raw_request(hdev, report_id, readbuf,
+				 FEATURE_KBD_REPORT_SIZE, HID_FEATURE_REPORT,
+				 HID_REQ_GET_REPORT);
+	if (ret < 0) {
+		hid_warn(hdev, "Asus handshake %02x failed to receive ack: %d\n",
+			 report_id, ret);
+	} else if (memcmp(readbuf, buf, sizeof(buf)) != 0) {
+		hid_warn(hdev, "Asus handshake %02x returned invalid response: %*ph\n",
+			 report_id, FEATURE_KBD_REPORT_SIZE, readbuf);
+	}
+
+	/*
+	 * Do not return error if handshake is wrong until this is
+	 * verified to work for all devices.
+	 */
+	return 0;
 }
 
 static int asus_kbd_get_functions(struct hid_device *hdev,
-- 
2.55.0

Reply via email to