summaryrefslogtreecommitdiff
path: root/sys/dev/pckbc
diff options
context:
space:
mode:
authorAlexandr Shadchin <shadchin@cvs.openbsd.org>2014-08-29 20:09:10 +0000
committerAlexandr Shadchin <shadchin@cvs.openbsd.org>2014-08-29 20:09:10 +0000
commit342a7265a0c2a8d693857da2f9bf58103777bff2 (patch)
tree3403c32cf27ee376aa249a4fe55715810e40d853 /sys/dev/pckbc
parentce239eeea37b9aaf34ca8e344fbab952b408f4a8 (diff)
Fix checking sync for old synaptics touchpad (ver 5.9)
From Thierry Deval <thierry at deval dot be> ok mpi@
Diffstat (limited to 'sys/dev/pckbc')
-rw-r--r--sys/dev/pckbc/pms.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/sys/dev/pckbc/pms.c b/sys/dev/pckbc/pms.c
index c0df81b23ae..79a5404443f 100644
--- a/sys/dev/pckbc/pms.c
+++ b/sys/dev/pckbc/pms.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: pms.c,v 1.53 2014/08/19 12:24:04 mpi Exp $ */
+/* $OpenBSD: pms.c,v 1.54 2014/08/29 20:09:09 shadchin Exp $ */
/* $NetBSD: psm.c,v 1.11 2000/06/05 22:20:57 sommerfeld Exp $ */
/*-
@@ -78,6 +78,12 @@ struct synaptics_softc {
int mode;
+ int mask;
+#define SYNAPTICS_MASK_NEWABS_STRICT 0xc8
+#define SYNAPTICS_MASK_NEWABS_RELAXED 0xc0
+#define SYNAPTICS_VALID_NEWABS_FIRST 0x80
+#define SYNAPTICS_VALID_NEWABS_NEXT 0xc0
+
int res_x, res_y;
int min_x, min_y;
int max_x, max_y;
@@ -935,6 +941,12 @@ synaptics_get_hwinfo(struct pms_softc *sc)
return (-1);
}
+ if ((SYNAPTICS_ID_MAJOR(syn->identify) == 5) &&
+ (SYNAPTICS_ID_MINOR(syn->identify) == 9))
+ syn->mask = SYNAPTICS_MASK_NEWABS_RELAXED;
+ else
+ syn->mask = SYNAPTICS_MASK_NEWABS_STRICT;
+
return (0);
}
@@ -983,7 +995,7 @@ pms_enable_synaptics(struct pms_softc *sc)
if (synaptics_knock(sc)) {
if (sc->synaptics == NULL)
goto err;
- /*
+ /*
* Some synaptics touchpads don't resume quickly.
* Retry a few times.
*/
@@ -1091,13 +1103,15 @@ pms_ioctl_synaptics(struct pms_softc *sc, u_long cmd, caddr_t data, int flag,
int
pms_sync_synaptics(struct pms_softc *sc, int data)
{
+ struct synaptics_softc *syn = sc->synaptics;
+
switch (sc->inputstate) {
case 0:
- if ((data & 0xc8) != 0x80)
+ if ((data & syn->mask) != SYNAPTICS_VALID_NEWABS_FIRST)
return (-1);
break;
case 3:
- if ((data & 0xc8) != 0xc0)
+ if ((data & syn->mask) != SYNAPTICS_VALID_NEWABS_NEXT)
return (-1);
break;
}