Index: sys/dev/pckbport/synaptics.c =================================================================== RCS file: /cvsroot/src/sys/dev/pckbport/synaptics.c,v retrieving revision 1.49 diff -p -u -r1.49 synaptics.c --- sys/dev/pckbport/synaptics.c 2 Jun 2019 08:55:00 -0000 1.49 +++ sys/dev/pckbport/synaptics.c 28 Jun 2019 06:25:57 -0000 @@ -1154,7 +1154,7 @@ pms_synaptics_input(void *vsc, int data) getmicrouptime(&psc->current); - if (psc->inputstate > 0) { + if (psc->inputstate != 0) { timersub(&psc->current, &psc->last, &diff); if (diff.tv_sec > 0 || diff.tv_usec >= 40000) { aprint_debug_dev(psc->sc_dev, @@ -1173,14 +1173,23 @@ pms_synaptics_input(void *vsc, int data) psc->last = psc->current; switch (psc->inputstate) { + case -5: + case -4: + case -3: + case -2: + case -1: case 0: if ((data & 0xc8) != 0x80) { aprint_debug_dev(psc->sc_dev, "pms_input: 0x%02x out of sync\n", data); + /* use negative counts to limit resync phase */ + psc->inputstate--; return; /* not in sync yet, discard input */ } + psc->inputstate = 0; /*FALLTHROUGH*/ + case -6: case 3: if ((data & 8) == 8) { aprint_debug_dev(psc->sc_dev,