Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/dev/pckbport Modify driver to use bits(3) to extract cap...



details:   https://anonhg.NetBSD.org/src/rev/54cb601c6a69
branches:  trunk
changeset: 998571:54cb601c6a69
user:      blymn <blymn%NetBSD.org@localhost>
date:      Mon Apr 22 00:53:59 2019 +0000

description:
Modify driver to use bits(3) to extract capabilities.  Thanks to
Anon Ymous for the fix.

diffstat:

 sys/dev/pckbport/synaptics.c    |  19 +++++++++++--------
 sys/dev/pckbport/synapticsreg.h |  27 +++++++++++++++++++++++++--
 2 files changed, 36 insertions(+), 10 deletions(-)

diffs (114 lines):

diff -r 30b902447ef2 -r 54cb601c6a69 sys/dev/pckbport/synaptics.c
--- a/sys/dev/pckbport/synaptics.c      Sun Apr 21 22:32:12 2019 +0000
+++ b/sys/dev/pckbport/synaptics.c      Mon Apr 22 00:53:59 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: synaptics.c,v 1.47 2019/04/21 02:40:35 blymn Exp $     */
+/*     $NetBSD: synaptics.c,v 1.48 2019/04/22 00:53:59 blymn 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.47 2019/04/21 02:40:35 blymn Exp $");
+__KERNEL_RCSID(0, "$NetBSD: synaptics.c,v 1.48 2019/04/22 00:53:59 blymn Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -302,20 +302,23 @@
  * 1   0x20    report min              query 0x0f gives min coord reported
  */
                if (res == 0) {
-                       u_char clickpad_type = (resp[0] & 0x10);
-                       clickpad_type |=       (resp[1] & 0x01);
+                       uint val = SYN_CCAP_VALUE(resp);
 
                        aprint_debug_dev(psc->sc_dev, "%s: Continued "
                            "Capabilities 0x%02x 0x%02x 0x%02x.\n", __func__,
                            resp[0], resp[1], resp[2]);
-                       switch (clickpad_type) {
-                       case 0x10:
+                       switch (SYN_CCAP_CLICKPAD_TYPE(val)) {
+                       case 0: /* not a clickpad */
+                               break;
+                       case 1:
                                sc->flags |= SYN_FLAG_HAS_ONE_BUTTON_CLICKPAD;
                                break;
-                       case 0x01:
+                       case 2:
                                sc->flags |= SYN_FLAG_HAS_TWO_BUTTON_CLICKPAD;
                                break;
+                       case 3: /* reserved */
                        default:
+                               /* unreached */
                                break;
                        }
                }
@@ -395,7 +398,7 @@
                goto doreset;
        }
 
-       sc->caps = (resp[0] << 8) | resp[2];
+       sc->caps = SYNAPTICS_CAP_VALUE(resp);
 
        if (sc->caps & SYNAPTICS_CAP_MBUTTON)
                sc->flags |= SYN_FLAG_HAS_MIDDLE_BUTTON;
diff -r 30b902447ef2 -r 54cb601c6a69 sys/dev/pckbport/synapticsreg.h
--- a/sys/dev/pckbport/synapticsreg.h   Sun Apr 21 22:32:12 2019 +0000
+++ b/sys/dev/pckbport/synapticsreg.h   Mon Apr 22 00:53:59 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: synapticsreg.h,v 1.10 2018/07/14 00:47:33 maya Exp $   */
+/*     $NetBSD: synapticsreg.h,v 1.11 2019/04/22 00:53:59 blymn Exp $  */
 
 /*
  * Copyright (c) 2005, Steve C. Woodford
@@ -56,16 +56,39 @@
 #define        SYNAPTICS_MAGIC_BYTE            0x47
 
 /* Capability bits. */
+/* (byte[0] << 8) | byte[2] */
+#define SYNAPTICS_CAP_VALUE(b) (((b)[0] << 8) | (b)[2])
 #define        SYNAPTICS_CAP_EXTENDED          (1 << 15)
 #define        SYNAPTICS_CAP_EXTNUM            (1 << 14 | 1 << 13 | 1 << 12)
 #define        SYNAPTICS_CAP_MBUTTON           (1 << 10)
 #define        SYNAPTICS_CAP_PASSTHROUGH       (1 << 7)
+#define        SYNAPTICS_CAP_LOWPOWER          (1 << 6)
 #define        SYNAPTICS_CAP_MULTIFINGERREPORT (1 << 5)
 #define        SYNAPTICS_CAP_SLEEP             (1 << 4)
 #define        SYNAPTICS_CAP_4BUTTON           (1 << 3)
 #define        SYNAPTICS_CAP_MULTIDETECT       (1 << 1)
 #define        SYNAPTICS_CAP_PALMDETECT        (1 << 0)
 
+/* Continued Capability bits */
+/* (byte[0] << 8) | byte[1] */
+#define SYN_CCAP_VALUE(b)      (((b)[0] << 8) | (b)[1])
+#define SYN_CCAP_COVERED_PAD           __BIT(15)
+#define SYN_CCAP_MULTIFINGER_MODE      __BITS(13,14)
+#define SYN_CCAP_CLICKPAD_BIT_0                __BIT(12) /* one-button clickpad */
+#define SYN_CCAP_HAS_ADV_GESTURE_MODE  __BIT(11)
+#define SYN_CCAP_CLEARPAD              __BIT(10)
+#define SYN_CCAP_REPORT_MAX            __BIT(9)
+#define SYN_CCAP_ADJ_THRESHOLD         __BIT(8)
+#define SYN_CCAP_REPORT_MIN            __BIT(5)
+#define SYN_CCAP_UNIFORM_CLICKPAD      __BIT(4)
+#define SYN_CCAP_IMAGE_SENSOR          __BIT(3)  /* reports V */
+#define SYN_CCAP_REDUCED_FILTERING     __BIT(2)
+#define SYN_CCAP_DELUX_LED_CONTROLS    __BIT(1)
+#define SYN_CCAP_CLICKPAD_BIT_1                __BIT(0)  /* two-button clickpad */
+#define SYN_CCAP_CLICKPAD_TYPE(v)      \
+       ((__SHIFTOUT((v), SYN_CCAP_CLICKPAD_BIT_1) << 1) | \
+         __SHIFTOUT((v), SYN_CCAP_CLICKPAD_BIT_0))
+
 /* Mode bits. */
 #define        SYNAPTICS_MODE_ABSOLUTE         (1 << 7)
 #define        SYNAPTICS_MODE_RATE             (1 << 6)
@@ -73,7 +96,7 @@
 #define        SYNAPTICS_MODE_EXTENDED_W       (1 << 2) /* double meaning */
 #define        SYNAPTICS_MODE_GEST             (1 << 2)
 #define        SYNAPTICS_MODE_4BYTE_CLIENT     (1 << 1)
-#define        SYNAPTICS_MODE_W                (1)
+#define        SYNAPTICS_MODE_W                (1 << 0)
 
 /* Extended mode button masks. */
 #define        SYN_1BUTMASK                    0x1



Home | Main Index | Thread Index | Old Index