From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
To: Hans de Goede <hdegoede@redhat.com>
Cc: linux-input@vger.kernel.org, Shang Ye <yesh25@mail2.sysu.edu.cn>,
gurevitch <mail@gurevit.ch>, Egor Ignatov <egori@altlinux.org>,
Anton Zhilyaev <anton@cpp.in>
Subject: Re: [PATCH v2] Input: atkbd - Skip ATKBD_CMD_GETID in translated mode
Date: Fri, 24 Nov 2023 20:30:20 -0800 [thread overview]
Message-ID: <ZWF4XDFDBTEvIOrV@google.com> (raw)
In-Reply-To: <20231115174625.7462-1-hdegoede@redhat.com>
Hi Hans,
On Wed, Nov 15, 2023 at 06:46:25PM +0100, Hans de Goede wrote:
> There have been multiple reports of keyboard issues on recent laptop models
> which can be worked around by setting i8042.dumbkbd, with the downside
> being this breaks the capslock LED.
>
> It seems that these issues are caused by recent laptops getting confused by
> ATKBD_CMD_GETID. Rather then adding and endless growing list of quirks for
> this, just skip ATKBD_CMD_GETID alltogether on laptops in translated mode.
>
> The main goal of sending ATKBD_CMD_GETID is to skip binding to ps/2
> mice/touchpads and those are never used in translated mode.
>
> Examples of laptop models which benefit from skipping ATKBD_CMD_GETID:
>
> * "HP Laptop 15s-fq2xxx", "HP laptop 15s-fq4xxx" and "HP Laptop 15-dy2xxx"
> models the kbd stops working for the first 2 - 5 minutes after boot
> (waiting for EC watchdog reset?)
>
> * On "HP Spectre x360 13-aw2xxx" atkbd fails to probe the keyboard
>
> * At least 9 different Lenovo models have issues with ATKBD_CMD_GETID, see:
> https://github.com/yescallop/atkbd-nogetid
>
> This has been tested on:
>
> 1. A MSI B550M PRO-VDH WIFI desktop, where the i8042 controller is not
> in translated mode when no keyboard is plugged in and with a ps/2 kbd
> a "AT Translated Set 2 keyboard" /dev/input/event# node shows up
>
> 2. A Lenovo ThinkPad X1 Yoga gen 8 (always has a translated set 2 keyboard)
>
> Reported-by: Shang Ye <yesh25@mail2.sysu.edu.cn>
> Closes: https://lore.kernel.org/linux-input/886D6167733841AE+20231017135318.11142-1-yesh25@mail2.sysu.edu.cn/
> Closes: https://github.com/yescallop/atkbd-nogetid
> Reported-by: gurevitch <mail@gurevit.ch>
> Closes: https://lore.kernel.org/linux-input/2iAJTwqZV6lQs26cTb38RNYqxvsink6SRmrZ5h0cBUSuf9NT0tZTsf9fEAbbto2maavHJEOP8GA1evlKa6xjKOsaskDhtJWxjcnrgPigzVo=@gurevit.ch/
> Reported-by: Egor Ignatov <egori@altlinux.org>
> Closes: https://lore.kernel.org/all/20210609073333.8425-1-egori@altlinux.org/
> Reported-by: Anton Zhilyaev <anton@cpp.in>
> Closes: https://lore.kernel.org/linux-input/20210201160336.16008-1-anton@cpp.in/
> Closes: https://bugzilla.redhat.com/show_bug.cgi?id=2086156
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> ---
> Note this supersedes my previous atkbd series:
> https://lore.kernel.org/linux-input/20231005201544.26983-1-hdegoede@redhat.com/
> ---
> Changes in v2:
> - Add DMI check for laptop chassis types and only skip ATKBD_CMD_GETID
> on laptops with the i8042 in translated mode
> ---
> drivers/input/keyboard/atkbd.c | 61 +++++++++++++++++++++++++++++++---
> 1 file changed, 57 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
> index c92e544c792d..5667f1e80839 100644
> --- a/drivers/input/keyboard/atkbd.c
> +++ b/drivers/input/keyboard/atkbd.c
> @@ -765,6 +765,59 @@ static void atkbd_deactivate(struct atkbd *atkbd)
> ps2dev->serio->phys);
> }
>
> +#ifdef CONFIG_X86
> +static const struct dmi_system_id atkbd_dmi_laptop_table[] = {
> + {
> + .matches = {
> + DMI_EXACT_MATCH(DMI_CHASSIS_TYPE, "8"), /* Portable */
> + },
> + },
> + {
> + .matches = {
> + DMI_EXACT_MATCH(DMI_CHASSIS_TYPE, "9"), /* Laptop */
> + },
> + },
> + {
> + .matches = {
> + DMI_EXACT_MATCH(DMI_CHASSIS_TYPE, "10"), /* Notebook */
> + },
> + },
> + {
> + .matches = {
> + DMI_EXACT_MATCH(DMI_CHASSIS_TYPE, "14"), /* Sub-Notebook */
> + },
> + },
> + {
> + .matches = {
> + DMI_EXACT_MATCH(DMI_CHASSIS_TYPE, "31"), /* Convertible */
> + },
> + },
> + {
> + .matches = {
> + DMI_EXACT_MATCH(DMI_CHASSIS_TYPE, "32"), /* Detachable */
> + },
> + },
> + { }
> +};
Thank you for making the changes, however I wonder if we should
open-code check for the chassis type, as DMI can be quite bloated and
here we are dealing with exactly one field. Something like this:
diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
index 5667f1e80839..786f00f6b7fd 100644
--- a/drivers/input/keyboard/atkbd.c
+++ b/drivers/input/keyboard/atkbd.c
@@ -766,39 +766,24 @@ static void atkbd_deactivate(struct atkbd *atkbd)
}
#ifdef CONFIG_X86
-static const struct dmi_system_id atkbd_dmi_laptop_table[] = {
- {
- .matches = {
- DMI_EXACT_MATCH(DMI_CHASSIS_TYPE, "8"), /* Portable */
- },
- },
- {
- .matches = {
- DMI_EXACT_MATCH(DMI_CHASSIS_TYPE, "9"), /* Laptop */
- },
- },
- {
- .matches = {
- DMI_EXACT_MATCH(DMI_CHASSIS_TYPE, "10"), /* Notebook */
- },
- },
- {
- .matches = {
- DMI_EXACT_MATCH(DMI_CHASSIS_TYPE, "14"), /* Sub-Notebook */
- },
- },
- {
- .matches = {
- DMI_EXACT_MATCH(DMI_CHASSIS_TYPE, "31"), /* Convertible */
- },
- },
- {
- .matches = {
- DMI_EXACT_MATCH(DMI_CHASSIS_TYPE, "32"), /* Detachable */
- },
- },
- { }
-};
+static bool atkbd_is_portable_device(void)
+{
+ static const char * const chassis_types[] = {
+ "8", /* Portable */
+ "9", /* Laptop */
+ "10", /* Notebook */
+ "14", /* Sub-Notebook */
+ "31", /* Convertible */
+ "32", /* Detachable */
+ };
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE(chassis_types); i++)
+ if (dmi_match(DMI_CHASSIS_TYPE, chassis_types[i]))
+ return true;
+
+ return false;
+}
/*
* On many modern laptops ATKBD_CMD_GETID may cause problems, on these laptops
@@ -812,7 +797,7 @@ static const struct dmi_system_id atkbd_dmi_laptop_table[] = {
*/
static bool atkbd_skip_getid(struct atkbd *atkbd)
{
- return atkbd->translated && dmi_check_system(atkbd_dmi_laptop_table);
+ return atkbd->translated && atkbd_is_portable_device();
}
#else
static inline bool atkbd_skip_getid(struct atkbd *atkbd) { return false; }
It gives me slightly smaller output:
dtor@dtor-ws:~/kernel/work (master *)$ size drivers/input/keyboard/atkbd.o.old
text data bss dec hex filename
28407 1512 37 29956 7504 drivers/input/keyboard/atkbd.o.old
dtor@dtor-ws:~/kernel/work (master *)$ size drivers/input/keyboard/atkbd.o
text data bss dec hex filename
26107 1512 37 27656 6c08 drivers/input/keyboard/atkbd.o
Please let me know if this works for you and I can combine on my end.
Thanks.
--
Dmitry
next prev parent reply other threads:[~2023-11-25 4:30 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-15 17:46 [PATCH v2] Input: atkbd - Skip ATKBD_CMD_GETID in translated mode Hans de Goede
2023-11-25 4:30 ` Dmitry Torokhov [this message]
2023-11-25 13:43 ` Hans de Goede
2024-01-16 0:21 ` Barnabás Pőcze
2024-01-16 9:34 ` Hans de Goede
2024-01-16 13:32 ` Barnabás Pőcze
2024-01-16 14:43 ` Hans de Goede
2024-01-16 19:05 ` Dmitry Torokhov
2024-01-16 19:33 ` Hans de Goede
2024-01-16 19:50 ` Dmitry Torokhov
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=ZWF4XDFDBTEvIOrV@google.com \
--to=dmitry.torokhov@gmail.com \
--cc=anton@cpp.in \
--cc=egori@altlinux.org \
--cc=hdegoede@redhat.com \
--cc=linux-input@vger.kernel.org \
--cc=mail@gurevit.ch \
--cc=yesh25@mail2.sysu.edu.cn \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.