patches/pms.c.diff

25 lines
939 B
Diff

Index: sys/dev/pckbc/pms.c
===================================================================
RCS file: /home/cvs/src/sys/dev/pckbc/pms.c,v
retrieving revision 1.96
diff -u -p -u -p -r1.96 pms.c
--- sys/dev/pckbc/pms.c 6 Apr 2022 18:59:30 -0000 1.96
+++ sys/dev/pckbc/pms.c 16 Jul 2022 11:11:06 -0000
@@ -2610,6 +2610,16 @@ pms_proc_elantech_v4(struct pms_softc *s
case ELANTECH_PKT_TRACKPOINT:
if (sc->sc_dev_enable & PMS_DEV_SECONDARY) {
+ /*
+ * This firmware misreport coordinates for trackpoint
+ * occasionally. Discard packets outside of [-127, 127] range
+ * to prevent cursor jumps.
+ */
+ if (sc->packet[4] == 0x80 || sc->packet[5] == 0x80 ||
+ sc->packet[1] >> 7 == sc->packet[4] >> 7 ||
+ sc->packet[2] >> 7 == sc->packet[5] >> 7)
+ return;
+
x = sc->packet[4] - 0x100 + (sc->packet[1] << 1);
y = sc->packet[5] - 0x100 + (sc->packet[2] << 1);
buttons = butmap[sc->packet[0] & 7];