svn commit: r328190 - head/sys/dev/atkbdc
Jean-Sébastien Pédron
dumbbell at FreeBSD.org
Sat Jan 20 11:02:20 UTC 2018
Author: dumbbell
Date: Sat Jan 20 11:02:18 2018
New Revision: 328190
URL: https://svnweb.freebsd.org/changeset/base/328190
Log:
psm: Skip sync check when `PSM_CONFIG_NOCHECKSYNC` is set
In psmprobe(), we set the initial `syncmask` to the vendor default value
if the `PSM_CONFIG_NOCHECKSYNC` bit is unset. However, we currently only
set it for the Elantech touchpad later in psmattach(), thus `syncmask`
is always configured.
Now, we check `PSM_CONFIG_NOCHECKSYNC` and skip sync check if it is set.
This fixes Elantech touchpad support for units which have `hascrc` set.
To clarify that, when we log the `syncmask` and `syncbits` fields, also
mention if they are actually used.
Finally, when we set `PSM_CONFIG_NOCHECKSYNC`, clear `PSM_NEED_SYNCBITS`
flag.
PR: 225338
MFC after: 1 week
Modified:
head/sys/dev/atkbdc/psm.c
Modified: head/sys/dev/atkbdc/psm.c
==============================================================================
--- head/sys/dev/atkbdc/psm.c Sat Jan 20 03:50:56 2018 (r328189)
+++ head/sys/dev/atkbdc/psm.c Sat Jan 20 11:02:18 2018 (r328190)
@@ -1947,8 +1947,10 @@ psmattach(device_t dev)
/* Elantech trackpad`s sync bit differs from touchpad`s one */
if (sc->hw.model == MOUSE_MODEL_ELANTECH &&
- (sc->elanhw.hascrc || sc->elanhw.hastrackpoint))
+ (sc->elanhw.hascrc || sc->elanhw.hastrackpoint)) {
sc->config |= PSM_CONFIG_NOCHECKSYNC;
+ sc->flags &= ~PSM_NEED_SYNCBITS;
+ }
if (!verbose)
printf("psm%d: model %s, device ID %d\n",
@@ -1959,8 +1961,9 @@ psmattach(device_t dev)
sc->hw.hwid >> 8, sc->hw.buttons);
printf("psm%d: config:%08x, flags:%08x, packet size:%d\n",
unit, sc->config, sc->flags, sc->mode.packetsize);
- printf("psm%d: syncmask:%02x, syncbits:%02x\n",
- unit, sc->mode.syncmask[0], sc->mode.syncmask[1]);
+ printf("psm%d: syncmask:%02x, syncbits:%02x%s\n",
+ unit, sc->mode.syncmask[0], sc->mode.syncmask[1],
+ sc->config & PSM_CONFIG_NOCHECKSYNC ? " (sync not checked)" : "");
}
if (bootverbose)
@@ -2976,7 +2979,8 @@ psmintr(void *arg)
VLOG(2, (LOG_DEBUG,
"psmintr: Sync bytes now %04x,%04x\n",
sc->mode.syncmask[0], sc->mode.syncmask[0]));
- } else if ((c & sc->mode.syncmask[0]) != sc->mode.syncmask[1]) {
+ } else if ((sc->config & PSM_CONFIG_NOCHECKSYNC) == 0 &&
+ (c & sc->mode.syncmask[0]) != sc->mode.syncmask[1]) {
VLOG(3, (LOG_DEBUG, "psmintr: out of sync "
"(%04x != %04x) %d cmds since last error.\n",
c & sc->mode.syncmask[0], sc->mode.syncmask[1],
More information about the svn-src-head
mailing list