From: Kirill A. Korinsky Subject: Re: sys/ihidev: enforce polling for Dell Inspiron 5505 Touchpad To: Jason McIntyre Cc: tech@openbsd.org, jmc@openbsd.org Date: Fri, 17 Jan 2025 18:04:09 +0100 On Fri, 17 Jan 2025 17:45:46 +0100, Jason McIntyre wrote: > > [1 ] > 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. > Probably a wrong wording on my side, thanks to make it clear. I mean that it seems that your touchpad / mouse had changes internal thinking that it should works in polling mode after some time. > jmc > > On 17 January 2025 16:01:11 GMT, "Kirill A. Korinsky" 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 > > > [2 ] -- wbr, Kirill