[PATCH 06/11] HID: asus: introduce small delay on Asus Z13 RGB init

Antheas Kapenekakis posted 11 patches 9 months ago
[PATCH 06/11] HID: asus: introduce small delay on Asus Z13 RGB init
Posted by Antheas Kapenekakis 9 months ago
The folio keyboard of the Z13 can get stuck in its BIOS mode, where the
touchpad behaves like a mouse and the keyboard start button is not
reliable if we perform the initialization too quickly. This mostly
happens during boot, and can be verified to be caused by hid-asus
through simple blacklisting. A small delay fixes it.

Signed-off-by: Antheas Kapenekakis <lkml@antheas.dev>
---
 drivers/hid/hid-asus.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/hid/hid-asus.c b/drivers/hid/hid-asus.c
index 85ae75478b796..5b75ee83ae290 100644
--- a/drivers/hid/hid-asus.c
+++ b/drivers/hid/hid-asus.c
@@ -571,6 +571,10 @@ static int asus_kbd_register_leds(struct hid_device *hdev)
 	unsigned char kbd_func;
 	int ret;
 
+	/* Wait a bit before init to prevent locking the keyboard */
+	if (dmi_match(DMI_PRODUCT_FAMILY, "ROG Flow Z13"))
+		msleep(500);
+
 	ret = asus_kbd_init(hdev);
 	if (ret < 0)
 		return ret;
-- 
2.48.1
Re: [PATCH 06/11] HID: asus: introduce small delay on Asus Z13 RGB init
Posted by Luke D. Jones 9 months ago
On 20/03/25 08:13, Antheas Kapenekakis wrote:
> The folio keyboard of the Z13 can get stuck in its BIOS mode, where the
> touchpad behaves like a mouse and the keyboard start button is not
> reliable if we perform the initialization too quickly. This mostly
> happens during boot, and can be verified to be caused by hid-asus
> through simple blacklisting. A small delay fixes it.
> 
> Signed-off-by: Antheas Kapenekakis <lkml@antheas.dev>
> ---
>   drivers/hid/hid-asus.c | 4 ++++
>   1 file changed, 4 insertions(+)
> 
> diff --git a/drivers/hid/hid-asus.c b/drivers/hid/hid-asus.c
> index 85ae75478b796..5b75ee83ae290 100644
> --- a/drivers/hid/hid-asus.c
> +++ b/drivers/hid/hid-asus.c
> @@ -571,6 +571,10 @@ static int asus_kbd_register_leds(struct hid_device *hdev)
>   	unsigned char kbd_func;
>   	int ret;
>   
> +	/* Wait a bit before init to prevent locking the keyboard */
> +	if (dmi_match(DMI_PRODUCT_FAMILY, "ROG Flow Z13"))
> +		msleep(500);
> +
>   	ret = asus_kbd_init(hdev);
>   	if (ret < 0)
>   		return ret;

See my comment on patch 1 about trying a loop with the init 
request/response as a hopeful way to test readiness.

Cheers,
Luke.