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))