aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Kondratyev <wulf@FreeBSD.org>2021-02-13 18:18:07 +0000
committerVladimir Kondratyev <wulf@FreeBSD.org>2021-02-13 18:18:07 +0000
commit812c59ed614df94380e0b1f9ff4a3d15b78ce1bf (patch)
treea029bd0028b13cc1d86684763a2760860c696656
parent032d3153877ef1767c121bbdf8e00f4f93b30a5d (diff)
downloadsrc-812c59ed614df94380e0b1f9ff4a3d15b78ce1bf.tar.gz
src-812c59ed614df94380e0b1f9ff4a3d15b78ce1bf.zip
hkbd: Fix handling of keyboard ErrorRollOver reports
Ignore fantom keyboard state reports entirelly rather than ignore RollOver states for each key separatelly. Latter results in spurious release/push pairs of events on each fantom keyboard state report. Reported by: Jan Martin Mikkelsen <janm_AT_transactionware_DOT_com> Submitted by: Jan Martin Mikkelsen (initial version) PR: 253249 MFC after: 1 week
-rw-r--r--sys/dev/hid/hkbd.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/sys/dev/hid/hkbd.c b/sys/dev/hid/hkbd.c
index 6f4b71dd49b6..89325f9b2499 100644
--- a/sys/dev/hid/hkbd.c
+++ b/sys/dev/hid/hkbd.c
@@ -715,11 +715,16 @@ hkbd_intr_callback(void *context, void *data, hid_size_t len)
uint32_t key =
hid_get_data(buf + offset, len - offset,
&sc->sc_loc_key[i]);
+ if (key == KEY_ERROR) {
+ DPRINTF("KEY_ERROR\n");
+ sc->sc_ndata = sc->sc_odata;
+ return; /* ignore */
+ }
if (modifiers & MOD_FN)
key = hkbd_apple_fn(key);
if (sc->sc_flags & HKBD_FLAG_APPLE_SWAP)
key = hkbd_apple_swap(key);
- if (key == KEY_NONE || key == KEY_ERROR || key >= HKBD_NKEYCODE)
+ if (key == KEY_NONE || key >= HKBD_NKEYCODE)
continue;
/* set key in bitmap */
sc->sc_ndata.bitmap[key / 64] |= 1ULL << (key % 64);