Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 2 Jan 2013 21:27:33 +0000 (UTC)
From:      Jean-Sebastien Pedron <dumbbell@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org
Subject:   svn commit: r244976 - stable/9/sys/dev/atkbdc
Message-ID:  <201301022127.r02LRXSr066761@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dumbbell
Date: Wed Jan  2 21:27:32 2013
New Revision: 244976
URL: http://svnweb.freebsd.org/changeset/base/244976

Log:
  MFC r244405:
  psm: Support detection of Synaptics touchpad v7.5 and above
  
  Starting with firmware v7.5, the "Read TouchPad Modes" ($01) and "Read
  Capabilities" ($02) commands changed: previously constant bytes now
  carry variable information.
  
  We now compare those bytes to expected constants only for firmware prior
  to v7.5.
  
  Tested by:	Zeus Panchenko <zeus@gnu.org.ua>

Modified:
  stable/9/sys/dev/atkbdc/psm.c
Directory Properties:
  stable/9/sys/   (props changed)
  stable/9/sys/dev/   (props changed)

Modified: stable/9/sys/dev/atkbdc/psm.c
==============================================================================
--- stable/9/sys/dev/atkbdc/psm.c	Wed Jan  2 21:00:00 2013	(r244975)
+++ stable/9/sys/dev/atkbdc/psm.c	Wed Jan  2 21:27:32 2013	(r244976)
@@ -239,6 +239,10 @@ typedef struct synapticspacket {
 #define SYNAPTICS_QUEUE_CURSOR(x)					\
 	(x + SYNAPTICS_PACKETQUEUE) % SYNAPTICS_PACKETQUEUE
 
+#define	SYNAPTICS_VERSION_GE(synhw, major, minor)			\
+    ((synhw).infoMajor > (major) ||					\
+     ((synhw).infoMajor == (major) && (synhw).infoMinor >= (minor)))
+
 typedef struct synapticsaction {
 	synapticspacket_t	queue[SYNAPTICS_PACKETQUEUE];
 	int			queue_len;
@@ -867,7 +871,9 @@ doopen(struct psm_softc *sc, int command
 	if (sc->hw.model == MOUSE_MODEL_SYNAPTICS) {
 		mouse_ext_command(sc->kbdc, 1);
 		get_mouse_status(sc->kbdc, stat, 0, 3);
-		if (stat[1] == 0x47 && stat[2] == 0x40) {
+		if ((SYNAPTICS_VERSION_GE(sc->synhw, 7, 5) ||
+		     stat[1] == 0x47) &&
+		    stat[2] == 0x40) {
 			/* Set the mode byte -- request wmode where
 			 * available */
 			if (sc->synhw.capExtended)
@@ -4381,7 +4387,7 @@ enable_synaptics(KBDC kbdc, struct psm_s
 		return (FALSE);
 	if (get_mouse_status(kbdc, status, 0, 3) != 3)
 		return (FALSE);
-	if (status[1] != 0x47) {
+	if (!SYNAPTICS_VERSION_GE(synhw, 7, 5) && status[1] != 0x47) {
 		printf("  Failed to read extended capability bits\n");
 		return (FALSE);
 	}
@@ -4437,7 +4443,7 @@ enable_synaptics(KBDC kbdc, struct psm_s
 		return (FALSE);
 	if (get_mouse_status(kbdc, status, 0, 3) != 3)
 		return (FALSE);
-	if (status[1] != 0x47) {
+	if (!SYNAPTICS_VERSION_GE(synhw, 7, 5) && status[1] != 0x47) {
 		printf("  Failed to read mode byte\n");
 		return (FALSE);
 	}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201301022127.r02LRXSr066761>