The branch main has been updated by wulf: URL: https://cgit.FreeBSD.org/src/commit/?id=e3201cec8381c0582374f93991eff4a71bb95e9b
commit e3201cec8381c0582374f93991eff4a71bb95e9b Author: Robert Wahlberg <[email protected]> AuthorDate: 2025-12-01 20:42:15 +0000 Commit: Vladimir Kondratyev <[email protected]> CommitDate: 2025-12-01 20:42:15 +0000 psm: Fix three finger tap on elantech v4 touchpads Fix an issue where a three finger tap would generate additional events when fingers moved slightly during the tap. Signed-off-by: Robert Wahlberg <[email protected]> Pull Request: https://github.com/freebsd/freebsd-src/pull/1792 Reviewed by: wulf MFC after: 1 month --- sys/dev/atkbdc/psm.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sys/dev/atkbdc/psm.c b/sys/dev/atkbdc/psm.c index 137758b104d3..d36396df0fa0 100644 --- a/sys/dev/atkbdc/psm.c +++ b/sys/dev/atkbdc/psm.c @@ -4666,6 +4666,13 @@ proc_elantech(struct psm_softc *sc, packetbuf_t *pb, mousestatus_t *ms, mask = sc->elanaction.mask; nfingers = bitcount(mask); + /* The motion packet can only update two fingers at a time. + * Copy the previous state to get all active fingers. */ + for (id = 0; id < ELANTECH_MAX_FINGERS; id++) + if (sc->elanaction.mask & (1 << id)) + f[id] = sc->elanaction.fingers[id]; + + /* Update finger positions from the new packet */ scale = (pb->ipacket[0] & 0x10) ? 5 : 1; for (i = 0; i <= 3; i += 3) { id = ((pb->ipacket[i] & 0xe0) >> 5) - 1;
