Author: dumbbell
Date: Sat Jan 27 16:36:06 2018
New Revision: 328481
URL: https://svnweb.freebsd.org/changeset/base/328481

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 of:               r328190

Modified:
  stable/11/sys/dev/atkbdc/psm.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/dev/atkbdc/psm.c
==============================================================================
--- stable/11/sys/dev/atkbdc/psm.c      Sat Jan 27 16:34:00 2018        
(r328480)
+++ stable/11/sys/dev/atkbdc/psm.c      Sat Jan 27 16:36:06 2018        
(r328481)
@@ -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],
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to