Module Name: src Committed By: jmcneill Date: Tue Dec 5 18:04:21 UTC 2017
Modified Files: src/sys/dev/pckbport: synaptics.c Log Message: Add hw.synaptics.movement_enable sysctl. Default value is 1, but if set to 0 disables movement events from the touchpad. While here, fixup a few sysctl nodenum comparisons in pms_sysctl_synaptics_verify to compare against node numbers instead of values. To generate a diff of this commit: cvs rdiff -u -r1.35 -r1.36 src/sys/dev/pckbport/synaptics.c 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.35 src/sys/dev/pckbport/synaptics.c:1.36 --- src/sys/dev/pckbport/synaptics.c:1.35 Tue Nov 7 12:39:07 2017 +++ src/sys/dev/pckbport/synaptics.c Tue Dec 5 18:04:21 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: synaptics.c,v 1.35 2017/11/07 12:39:07 ryoon Exp $ */ +/* $NetBSD: synaptics.c,v 1.36 2017/12/05 18:04:21 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.35 2017/11/07 12:39:07 ryoon Exp $"); +__KERNEL_RCSID(0, "$NetBSD: synaptics.c,v 1.36 2017/12/05 18:04:21 jmcneill Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -118,6 +118,7 @@ static int synaptics_scale_y = 16; static int synaptics_max_speed_x = 32; static int synaptics_max_speed_y = 32; static int synaptics_movement_threshold = 4; +static int synaptics_movement_enable = 1; /* Sysctl nodes. */ static int synaptics_button_boundary_nodenum; @@ -140,6 +141,7 @@ static int synaptics_scale_y_nodenum; static int synaptics_max_speed_x_nodenum; static int synaptics_max_speed_y_nodenum; static int synaptics_movement_threshold_nodenum; +static int synaptics_movement_enable_nodenum; static int synaptics_poll_cmd(struct pms_softc *psc, ...) @@ -714,6 +716,18 @@ pms_sysctl_synaptics(struct sysctllog ** if ((rc = sysctl_createv(clog, 0, NULL, &node, CTLFLAG_PERMANENT | CTLFLAG_READWRITE, + CTLTYPE_INT, "movement_enable", + SYSCTL_DESCR("Enable movement reporting"), + pms_sysctl_synaptics_verify, 0, + &synaptics_movement_enable, + 0, CTL_HW, root_num, CTL_CREATE, + CTL_EOL)) != 0) + goto err; + + synaptics_movement_enable_nodenum = node->sysctl_num; + + if ((rc = sysctl_createv(clog, 0, NULL, &node, + CTLFLAG_PERMANENT | CTLFLAG_READWRITE, CTLTYPE_INT, "button_boundary", SYSCTL_DESCR("Top edge of button area"), pms_sysctl_synaptics_verify, 0, @@ -808,16 +822,20 @@ pms_sysctl_synaptics_verify(SYSCTLFN_ARG if (t < 0 || t > (SYNAPTICS_EDGE_MAX / 4)) return (EINVAL); } else - if (node.sysctl_num == synaptics_button_boundary) { + if (node.sysctl_num == synaptics_button_boundary_nodenum) { if (t < 0 || t < SYNAPTICS_EDGE_BOTTOM || t > SYNAPTICS_EDGE_TOP) return (EINVAL); } else - if (node.sysctl_num == synaptics_button2 || - node.sysctl_num == synaptics_button3) { + if (node.sysctl_num == synaptics_button2_nodenum || + node.sysctl_num == synaptics_button3_nodenum) { if (t < SYNAPTICS_EDGE_LEFT || t > SYNAPTICS_EDGE_RIGHT) return (EINVAL); } else + if (node.sysctl_num == synaptics_movement_enable_nodenum) { + if (t < 0 || t > 1) + return (EINVAL); + } else return (EINVAL); *(int *)rnode->sysctl_data = t; @@ -1558,7 +1576,7 @@ pms_synaptics_process_packet(struct pms_ * Do movement processing IFF we have a single finger and no palm or * a secondary finger and no palm. */ - if (palm == 0) { + if (palm == 0 && synaptics_movement_enable) { if (fingers == 1) { synaptics_movement(sc, sp, sp->sp_finger, &dx, &dy); } else {