diff options
| author | Poul-Henning Kamp <phk@FreeBSD.org> | 2025-11-18 19:22:01 +0000 |
|---|---|---|
| committer | Poul-Henning Kamp <phk@FreeBSD.org> | 2025-11-18 19:25:10 +0000 |
| commit | 5d53462af1d0e892da77b52b701b337119b2f5d7 (patch) | |
| tree | fd28fe9561d51312ba923260dbb9a19ca5bb5798 | |
| parent | abcb80f46c2607fc16564ca87cc25f0908f29f99 (diff) | |
iichid: The IICHID spec defines the response to the RESET command as two bytes of zeros.
Our recent changes to iichid.c has caused us to attempt to read a
full REPORT instead, and at least one keyboard hangs solid when we
do that.
This patch changes us to be spec-compliant.
Differential Revision: https://reviews.freebsd.org/D53803
MFC after: 1 day
Approved by: re(ccperciva)
| -rw-r--r-- | sys/dev/iicbus/iichid.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/sys/dev/iicbus/iichid.c b/sys/dev/iicbus/iichid.c index 5ca3f1b84e48..430066bd8f52 100644 --- a/sys/dev/iicbus/iichid.c +++ b/sys/dev/iicbus/iichid.c @@ -271,6 +271,8 @@ static int iichid_cmd_read(struct iichid_softc* sc, void *buf, iichid_size_t maxlen, iichid_size_t *actual_len) { + int error; + /* * 6.1.3 - Retrieval of Input Reports * DEVICE returns the length (2 Bytes) and the entire Input Report. @@ -280,7 +282,10 @@ iichid_cmd_read(struct iichid_softc* sc, void *buf, iichid_size_t maxlen, struct iic_msg msgs[] = { { sc->addr, IIC_M_RD, maxlen, buf }, }; - int error; + + if (!sc->reset_acked) { + msgs[0].len = 2; + } error = iicbus_transfer(sc->dev, msgs, nitems(msgs)); if (error != 0) |
