APPLIED (hirsute/5.11): [PATCH 1/1][SRU][G][H][OEM-5.10] UBUNTU: SAUCE: Input: i8042 - add dmi quirk
Andrea Righi
andrea.righi at canonical.com
Mon Mar 15 16:00:11 UTC 2021
Applied to hirsute/5.11.
Thanks,
-Andrea
On Mon, Mar 15, 2021 at 04:05:40PM +0800, AceLan Kao wrote:
> From: "Chia-Lin Kao (AceLan)" <acelan.kao at canonical.com>
>
> BugLink: https://bugs.launchpad.net/bugs/1919123
>
> On some platforms, the EC doesn't support the register reading sequence
> for sentelic[1], and then make the EC can't respond commands for a while
> when probing. It leads to the keyboard non-responsive for around 10
> seconds while waking up from s2idle.
>
> [ 44.304488] i8042: [9804] d4 -> i8042 (command)
> [ 44.304634] i8042: [9804] f3 -> i8042 (parameter)
> [ 44.304787] i8042: [9804] fa <- i8042 (interrupt, 1, 12)
> [ 44.304855] i8042: [9804] d4 -> i8042 (command)
> [ 44.304938] i8042: [9804] 66 -> i8042 (parameter)
> [ 44.337698] i8042: [9813] d4 -> i8042 (command)
> [ 44.905695] i8042: [9942] 88 -> i8042 (parameter)
> [ 45.497478] i8042: [10102] d4 -> i8042 (command)
> [ 46.098041] i8042: [10253] f3 -> i8042 (parameter)
> [ 46.098070] i8042: [10253] fe <- i8042 (interrupt, 1, 12)
> [ 46.718154] i8042: [10386] d4 -> i8042 (command)
> [ 47.309915] i8042: [10386] f4 -> i8042 (parameter)
> [ 47.918961] i8042: [10556] d4 -> i8042 (command)
> [ 48.402624] i8042: [10556] f6 -> i8042 (parameter)
>
> A DMI quirk to mark this platform doesn't have aux device could avoid those
> commands to be sent. And the system could still using i2c interface to
> communicate with the touchpad.
>
> 1. https://www.kernel.org/doc/html/v5.11/input/devices/sentelic.html#programming-sequence-for-register-reading-writing
>
> Signed-off-by: Chia-Lin Kao (AceLan) <acelan.kao at canonical.com>
> (cherry picked from https://lkml.org/lkml/2021/3/15/126)
> Signed-off-by: Chia-Lin Kao (AceLan) <acelan.kao at canonical.com>
> ---
> drivers/input/serio/i8042.c | 21 +++++++++++++++++++++
> 1 file changed, 21 insertions(+)
>
> diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
> index dbe1810e6242..3d778c9616dc 100644
> --- a/drivers/input/serio/i8042.c
> +++ b/drivers/input/serio/i8042.c
> @@ -22,6 +22,7 @@
> #include <linux/slab.h>
> #include <linux/suspend.h>
> #include <linux/property.h>
> +#include <linux/dmi.h>
>
> #include <asm/io.h>
>
> @@ -174,6 +175,24 @@ static irqreturn_t i8042_interrupt(int irq, void *dev_id);
> static bool (*i8042_platform_filter)(unsigned char data, unsigned char str,
> struct serio *serio);
>
> +static int __init i8042_set_noaux(const struct dmi_system_id *dmi)
> +{
> + i8042_noaux = true;
> + return 1;
> +}
> +
> +static const struct dmi_system_id i8042_quirks[] __initconst = {
> + {
> + .callback = i8042_set_noaux,
> + .ident = "Dell laptop",
> + .matches = {
> + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
> + DMI_MATCH(DMI_PRODUCT_NAME, "Precision 5550"),
> + },
> + },
> + {},
> +};
> +
> void i8042_lock_chip(void)
> {
> mutex_lock(&i8042_mutex);
> @@ -1559,6 +1578,8 @@ static int __init i8042_probe(struct platform_device *dev)
> i8042_dritek_enable();
> #endif
>
> + dmi_check_system(i8042_quirks);
> +
> if (!i8042_noaux) {
> error = i8042_setup_aux();
> if (error && error != -ENODEV && error != -EBUSY)
> --
> 2.25.1
>
>
> --
> kernel-team mailing list
> kernel-team at lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team
More information about the kernel-team
mailing list