Index | Thread | Search

From:
Jason McIntyre <jmc@kerhand.co.uk>
Subject:
Re: sys/ihidev: enforce polling for Dell Inspiron 5505 Touchpad
To:
tech@openbsd.org, "Kirill A. Korinsky" <kirill@korins.ky>, OpenBSD tech <tech@openbsd.org>
Cc:
jmc@openbsd.org
Date:
Fri, 17 Jan 2025 16:45:46 +0000

Download raw body.

Thread
hi.

i think there's a misunderstanding: it is not changing mode while running. i run it with a kernel  change to enforce polling, because of the mouse freeze issue.

jmc

On 17 January 2025 16:01:11 GMT, "Kirill A. Korinsky" <kirill@korins.ky> wrote:
>tech@,
>
>Here a diff which introduced a new qurik to enforce polling on some
>devices. The first device is Dell Inspiron 5505 Touchpad. jmc@ had
>reported that his touchpad on that machine may started at non-polling
>mode, but changing the mode in flight.
>
>Tested on HONOR MagicBook Art 14 Touchpad, without regression.
>
>Tests? Ok?
>
>Index: sys/dev/i2c/ihidev.c
>===================================================================
>RCS file: /home/cvs/src/sys/dev/i2c/ihidev.c,v
>diff -u -p -r1.39 ihidev.c
>--- sys/dev/i2c/ihidev.c	13 Jan 2025 15:33:34 -0000	1.39
>+++ sys/dev/i2c/ihidev.c	17 Jan 2025 15:45:29 -0000
>@@ -77,6 +77,7 @@ int	ihidev_print(void *aux, const char *
> int	ihidev_submatch(struct device *parent, void *cf, void *aux);
>
> #define IHIDEV_QUIRK_RE_POWER_ON	0x1
>+#define IHIDEV_QUIRK_ONLY_POLLING	0x2
>
> const struct ihidev_quirks {
> 	uint16_t		ihq_vid;
>@@ -85,6 +86,8 @@ const struct ihidev_quirks {
> } ihidev_devs[] = {
> 	/* HONOR MagicBook Art 14 Touchpad (QTEC0002) */
> 	{ 0x35cc, 0x0104, IHIDEV_QUIRK_RE_POWER_ON },
>+	/* Dell Inspiron 5505 Touchpad (DELL0A1E) */
>+	{ 0x4f3, 0x3147, IHIDEV_QUIRK_ONLY_POLLING },
> };
>
> const struct cfattach ihidev_ca = {
>@@ -171,7 +174,7 @@ ihidev_attach(struct device *parent, str
> 	}
> 	sc->sc_ibuf = malloc(sc->sc_isize, M_DEVBUF, M_WAITOK | M_ZERO);
>
>-	if (ia->ia_intr) {
>+	if (ia->ia_intr && !(sc->sc_quirks & IHIDEV_QUIRK_ONLY_POLLING)) {
> 		printf(" %s", iic_intr_string(sc->sc_tag, ia->ia_intr));
>
> 		sc->sc_ih = iic_intr_establish(sc->sc_tag, ia->ia_intr,
>
>--
>wbr, Kirill
>