Index | Thread | Search

From:
Kirill A. Korinsky <kirill@korins.ky>
Subject:
sys/ihidev: enforce polling for Dell Inspiron 5505 Touchpad
To:
OpenBSD tech <tech@openbsd.org>
Cc:
jmc@openbsd.org
Date:
Fri, 17 Jan 2025 17:01:11 +0100

Download raw body.

Thread
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