aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Kondratyev <wulf@FreeBSD.org>2021-11-30 21:29:50 +0000
committerVladimir Kondratyev <wulf@FreeBSD.org>2021-11-30 21:29:50 +0000
commitc508b0818b245ea136d6538d68868cb3541f8f8f (patch)
tree8227020e41a911fd8f7b61682f47b27d0e233dee
parentd893d9e94d71b6bd0a401ebf3d61b13bf89bb315 (diff)
downloadsrc-c508b0818b245ea136d6538d68868cb3541f8f8f.tar.gz
src-c508b0818b245ea136d6538d68868cb3541f8f8f.zip
iichid(4): Perform acknowledgement of I2C device interrupt after RESET command
in sampling mode to workaround firmware bug. This fixes reboot or poweroff on frame.work laptops after first touch. Reported by: many PR: 259230 MFC after: 1 week Tested by: kevans, markj
-rw-r--r--sys/dev/iicbus/iichid.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/sys/dev/iicbus/iichid.c b/sys/dev/iicbus/iichid.c
index d95ffb8add88..a36ed9bb8538 100644
--- a/sys/dev/iicbus/iichid.c
+++ b/sys/dev/iicbus/iichid.c
@@ -1134,6 +1134,11 @@ iichid_attach(device_t dev)
&sc->sampling_hysteresis, 0,
"number of missing samples before enabling of slow mode");
hid_add_dynamic_quirk(&sc->hw, HQ_IICHID_SAMPLING);
+
+ if (sc->sampling_rate_slow >= 0) {
+ pause("iichid", (hz + 999) / 1000);
+ (void)iichid_cmd_read(sc, NULL, 0, NULL);
+ }
#endif /* IICHID_SAMPLING */
child = device_add_child(dev, "hidbus", -1);