diff options
author | Alexandr Shadchin <shadchin@cvs.openbsd.org> | 2014-08-29 20:09:10 +0000 |
---|---|---|
committer | Alexandr Shadchin <shadchin@cvs.openbsd.org> | 2014-08-29 20:09:10 +0000 |
commit | 342a7265a0c2a8d693857da2f9bf58103777bff2 (patch) | |
tree | 3403c32cf27ee376aa249a4fe55715810e40d853 /sys/dev/pckbc | |
parent | ce239eeea37b9aaf34ca8e344fbab952b408f4a8 (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.c | 22 |
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; } |