Module Name: src Committed By: jmcneill Date: Mon Apr 27 22:31:47 UTC 2020
Modified Files: src/sys/dev/pckbport: synaptics.c synapticsvar.h Log Message: Extended buttons are reported separate from touchpad buttons, so track button press / release state separate from touch events. To generate a diff of this commit: cvs rdiff -u -r1.64 -r1.65 src/sys/dev/pckbport/synaptics.c cvs rdiff -u -r1.9 -r1.10 src/sys/dev/pckbport/synapticsvar.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/pckbport/synaptics.c diff -u src/sys/dev/pckbport/synaptics.c:1.64 src/sys/dev/pckbport/synaptics.c:1.65 --- src/sys/dev/pckbport/synaptics.c:1.64 Tue Mar 31 19:08:19 2020 +++ src/sys/dev/pckbport/synaptics.c Mon Apr 27 22:31:47 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: synaptics.c,v 1.64 2020/03/31 19:08:19 nia Exp $ */ +/* $NetBSD: synaptics.c,v 1.65 2020/04/27 22:31:47 jmcneill Exp $ */ /* * Copyright (c) 2005, Steve C. Woodford @@ -48,7 +48,7 @@ #include "opt_pms.h" #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: synaptics.c,v 1.64 2020/03/31 19:08:19 nia Exp $"); +__KERNEL_RCSID(0, "$NetBSD: synaptics.c,v 1.65 2020/04/27 22:31:47 jmcneill Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -1010,19 +1010,29 @@ pms_synaptics_parse(struct pms_softc *ps psc->packet[3], psc->packet[4], psc->packet[5]); if ((psc->packet[4] & SYN_1BUTMASK) != 0) - sp.sp_left = PMS_LBUTMASK; + sc->ext_left = PMS_LBUTMASK; + else + sc->ext_left = 0; if ((psc->packet[4] & SYN_3BUTMASK) != 0) - sp.sp_middle = PMS_MBUTMASK; + sc->ext_middle = PMS_MBUTMASK; + else + sc->ext_middle = 0; if ((psc->packet[5] & SYN_2BUTMASK) != 0) - sp.sp_right = PMS_RBUTMASK; + sc->ext_right = PMS_RBUTMASK; + else + sc->ext_right = 0; if ((psc->packet[5] & SYN_4BUTMASK) != 0) - sp.sp_up = 1; + sc->ext_up = 1; + else + sc->ext_up = 0; if ((psc->packet[4] & SYN_5BUTMASK) != 0) - sp.sp_down = 1; + sc->ext_down = 1; + else + sc->ext_down = 0; } else { /* Left/Right button handling. */ sp.sp_left = psc->packet[0] & PMS_LBUTMASK; @@ -1102,6 +1112,13 @@ pms_synaptics_parse(struct pms_softc *ps sp.sp_middle = 0; } + /* Overlay extended button state */ + sp.sp_left |= sc->ext_left; + sp.sp_right |= sc->ext_right; + sp.sp_middle |= sc->ext_middle; + sp.sp_up |= sc->ext_up; + sp.sp_down |= sc->ext_down; + switch (synaptics_up_down_emul) { case 1: /* Do middle button emulation using up/down buttons */ Index: src/sys/dev/pckbport/synapticsvar.h diff -u src/sys/dev/pckbport/synapticsvar.h:1.9 src/sys/dev/pckbport/synapticsvar.h:1.10 --- src/sys/dev/pckbport/synapticsvar.h:1.9 Sun Jun 2 08:55:00 2019 +++ src/sys/dev/pckbport/synapticsvar.h Mon Apr 27 22:31:47 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: synapticsvar.h,v 1.9 2019/06/02 08:55:00 blymn Exp $ */ +/* $NetBSD: synapticsvar.h,v 1.10 2020/04/27 22:31:47 jmcneill Exp $ */ /* * Copyright (c) 2005, Steve C. Woodford @@ -89,6 +89,12 @@ struct synaptics_softc { int history_x[SYN_MAX_FINGERS][SYN_HIST_SIZE]; int history_y[SYN_MAX_FINGERS][SYN_HIST_SIZE]; int history_z[SYN_MAX_FINGERS][SYN_HIST_SIZE]; + + char ext_left; + char ext_right; + char ext_middle; + char ext_up; + char ext_down; }; int pms_synaptics_probe_init(void *vsc);