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);

Reply via email to