On Sun, Oct 13, 2024 at 05:36:05PM GMT, Isaac Meerleo wrote:
> Confirmed working in latest snapshot.
> Thank you!
> 

We have tested a ihidev patch in snapshots that I suspect might have been
responsible for the regression you saw. I sent an updated version of that
patch to tech@ at: https://marc.info/?l=openbsd-tech&m=172873754328565&w=2

Could you please test the diff below and see if that still causes issues
on your machines? If yes we might have to add a quirk to exclude your devices
or find a better way to solve this.

diff 502b52cbdf550ec88ed0fcdac323f77049e93d3d 
56627129dafdc9ab5465cdd1d777aa09e63460c1
commit - 502b52cbdf550ec88ed0fcdac323f77049e93d3d
commit + 56627129dafdc9ab5465cdd1d777aa09e63460c1
blob - 4e65a4bf350b37ad5567a0c8d6535bd4e3c9cdbe
blob + f6b8cc7b3436dc6c9bff99c817d4e5e2a45c3f44
--- sys/dev/i2c/ihidev.c
+++ sys/dev/i2c/ihidev.c
@@ -67,6 +67,7 @@ int   ihidev_activate(struct device *, int);
 
 int    ihidev_hid_command(struct ihidev_softc *, int, void *);
 int    ihidev_intr(void *);
+int    ihidev_poweron(struct ihidev_softc *);
 int    ihidev_reset(struct ihidev_softc *);
 int    ihidev_hid_desc_parse(struct ihidev_softc *);
 
@@ -248,7 +249,7 @@ ihidev_activate(struct device *self, int act)
                            sc->sc_dev.dv_xname);
                break;
        case DVACT_WAKEUP:
-               ihidev_reset(sc);
+               ihidev_poweron(sc);
                sc->sc_dying = 0;
                if (sc->sc_poll && timeout_initialized(&sc->sc_timer))
                        timeout_add(&sc->sc_timer, 2000);
@@ -525,7 +526,7 @@ ihidev_hid_command(struct ihidev_softc *sc, int hidcmd
 }
 
 int
-ihidev_reset(struct ihidev_softc *sc)
+ihidev_poweron(struct ihidev_softc *sc)
 {
        DPRINTF(("%s: resetting\n", sc->sc_dev.dv_xname));
 
@@ -536,6 +537,16 @@ ihidev_reset(struct ihidev_softc *sc)
 
        ihidev_sleep(sc, 100);
 
+       return 0;
+}
+
+
+int
+ihidev_reset(struct ihidev_softc *sc)
+{
+       if (ihidev_poweron(sc))
+               return (1);
+
        if (ihidev_hid_command(sc, I2C_HID_CMD_RESET, 0)) {
                printf("%s: failed to reset hardware\n", sc->sc_dev.dv_xname);
 
@@ -784,7 +795,7 @@ ihidev_open(struct ihidev *scd)
                return (0);
 
        /* power on */
-       ihidev_reset(sc);
+       ihidev_poweron(sc);
 
        if (sc->sc_poll) {
                if (!timeout_initialized(&sc->sc_timer))

Reply via email to