public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] Input patches
@ 2004-03-11  7:26 Dmitry Torokhov
  2004-03-11  7:30 ` [PATCH 1/3] Input patches: psmouse cleanup fix Dmitry Torokhov
  0 siblings, 1 reply; 4+ messages in thread
From: Dmitry Torokhov @ 2004-03-11  7:26 UTC (permalink / raw)
  To: Vojtech Pavlik; +Cc: linux-kernel

Hi,

I have some more input patches I'd like you to take look at:

psmouse_cleanup_fix:
	When disconnecting PS/2 mouse we marekd it as PSMOUSE_IGNORE too
	early, before protocol's disconnect handler had a chance to run.
	When mouse is in PSMOUSE_IGNORE state it ignores everything,
	including ACKs, which causes cleanup routine to fail.

synaptics-passthrough-fix:
	If touchpad does not support extended protocols (imps, exps) then
	after probing foor said protocols trackpoint on the pass-though
	port may stop working and full reset is needed to revive it
        (just reset-disable is not enough).

synaptics-restore-taps:
	If Synaptics' absolute mode is disabled (by proto= option) make
	sure that touchpad is in relative mode and gestures (taps) are
	enabled. We need specifically reset the mode byte as even full
	reset does not affect it (except for absolute bit).

The patches depend on other input patches submitted earlier. All patches are
available at:

	bk pull bk://dtor.bkbits.net/input
	http://www.geocities.com/dt_or/input/2_6_4

-- 
Dmitry

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 1/3] Input patches: psmouse cleanup fix
  2004-03-11  7:26 [PATCH 0/3] Input patches Dmitry Torokhov
@ 2004-03-11  7:30 ` Dmitry Torokhov
  2004-03-11  7:30   ` [PATCH 2/3] Input patches: synaptics passthrough fix Dmitry Torokhov
  0 siblings, 1 reply; 4+ messages in thread
From: Dmitry Torokhov @ 2004-03-11  7:30 UTC (permalink / raw)
  To: Vojtech Pavlik; +Cc: linux-kernel


===================================================================


ChangeSet@1.1662, 2004-03-11 01:26:03-05:00, dtor_core@ameritech.net
  Input: when disconnecting PS/2 mouse give protocol's disconnect 
         handler chance to run before starting ignoring mouse data.
         Otherwise interrupt handler will discard all ACKs and the
         very first command in cleanup sequence will fail (Synaptics
         was failing to return to relative mode on module unload).


 psmouse-base.c |    8 +++++---
 psmouse.h      |    4 ++--
 2 files changed, 7 insertions(+), 5 deletions(-)


===================================================================



diff -Nru a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c
--- a/drivers/input/mouse/psmouse-base.c	Thu Mar 11 02:07:09 2004
+++ b/drivers/input/mouse/psmouse-base.c	Thu Mar 11 02:07:09 2004
@@ -552,7 +552,7 @@
 {
 	struct psmouse *psmouse = serio->private;
 
-	psmouse->state = PSMOUSE_IGNORE;
+	psmouse->state = PSMOUSE_CMD_MODE;
 
 	if (psmouse->ptport) {
 		if (psmouse->ptport->deactivate)
@@ -565,6 +565,8 @@
 	if (psmouse->disconnect)
 		psmouse->disconnect(psmouse);
 
+	psmouse->state = PSMOUSE_IGNORE;
+
 	input_unregister_device(&psmouse->dev);
 	serio_close(serio);
 	kfree(psmouse);
@@ -592,7 +594,7 @@
 	psmouse->dev.keybit[LONG(BTN_MOUSE)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT);
 	psmouse->dev.relbit[0] = BIT(REL_X) | BIT(REL_Y);
 
-	psmouse->state = PSMOUSE_NEW_DEVICE;
+	psmouse->state = PSMOUSE_CMD_MODE;
 	psmouse->serio = serio;
 	psmouse->dev.private = psmouse;
 
@@ -650,7 +652,7 @@
 		return -1;
 	}
 
-	psmouse->state = PSMOUSE_NEW_DEVICE;
+	psmouse->state = PSMOUSE_CMD_MODE;
 	psmouse->type = psmouse->acking = psmouse->cmdcnt = psmouse->pktcnt = 0;
 	if (psmouse->reconnect) {
 	       if (psmouse->reconnect(psmouse))
diff -Nru a/drivers/input/mouse/psmouse.h b/drivers/input/mouse/psmouse.h
--- a/drivers/input/mouse/psmouse.h	Thu Mar 11 02:07:09 2004
+++ b/drivers/input/mouse/psmouse.h	Thu Mar 11 02:07:09 2004
@@ -5,7 +5,7 @@
 #define PSMOUSE_CMD_SETRES	0x10e8
 #define PSMOUSE_CMD_GETINFO	0x03e9
 #define PSMOUSE_CMD_SETSTREAM	0x00ea
-#define PSMOUSE_CMD_POLL	0x03eb	
+#define PSMOUSE_CMD_POLL	0x03eb
 #define PSMOUSE_CMD_GETID	0x02f2
 #define PSMOUSE_CMD_SETRATE	0x10f3
 #define PSMOUSE_CMD_ENABLE	0x00f4
@@ -18,7 +18,7 @@
 #define PSMOUSE_RET_NAK		0xfe
 
 /* psmouse states */
-#define PSMOUSE_NEW_DEVICE	0
+#define PSMOUSE_CMD_MODE	0
 #define PSMOUSE_ACTIVATED	1
 #define PSMOUSE_IGNORE		2
 

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 2/3] Input patches: synaptics passthrough fix
  2004-03-11  7:30 ` [PATCH 1/3] Input patches: psmouse cleanup fix Dmitry Torokhov
@ 2004-03-11  7:30   ` Dmitry Torokhov
  2004-03-11  7:31     ` [PATCH 3/3] Input patches: synaptics restore taps Dmitry Torokhov
  0 siblings, 1 reply; 4+ messages in thread
From: Dmitry Torokhov @ 2004-03-11  7:30 UTC (permalink / raw)
  To: Vojtech Pavlik; +Cc: linux-kernel


===================================================================


ChangeSet@1.1663, 2004-03-11 01:43:39-05:00, dtor_core@ameritech.net
  Input: do a full reset of Synaptics touchpad if extended protocol
         probes failed, otherwise trackpoint on the pass-through port
         may stop working (reset-disable isn't enough to revive it)    


 psmouse-base.c |   23 +++++++++++++++++++++--
 psmouse.h      |    1 +
 synaptics.c    |   13 +------------
 3 files changed, 23 insertions(+), 14 deletions(-)


===================================================================



diff -Nru a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c
--- a/drivers/input/mouse/psmouse-base.c	Thu Mar 11 02:07:38 2004
+++ b/drivers/input/mouse/psmouse-base.c	Thu Mar 11 02:07:38 2004
@@ -287,6 +287,24 @@
 	return 0;
 }
 
+
+/*
+ * psmouse_reset() resets the mouse into power-on state.
+ */
+int psmouse_reset(struct psmouse *psmouse)
+{
+	unsigned char param[2];
+
+	if (psmouse_command(psmouse, param, PSMOUSE_CMD_RESET_BAT))
+		return -1;
+
+	if (param[0] != PSMOUSE_RET_BAT && param[1] != PSMOUSE_RET_ID)
+		return -1;
+
+	return 0;
+}
+
+
 /*
  * Genius NetMouse magic init.
  */
@@ -416,6 +434,7 @@
  * pass through port it could get disabled while probing for protocol
  * extensions.
  */
+		psmouse_reset(psmouse);
 		psmouse_command(psmouse, NULL, PSMOUSE_CMD_RESET_DIS);
 	}
 
@@ -540,8 +559,8 @@
 static void psmouse_cleanup(struct serio *serio)
 {
 	struct psmouse *psmouse = serio->private;
-	unsigned char param[2];
-	psmouse_command(psmouse, param, PSMOUSE_CMD_RESET_BAT);
+
+	psmouse_reset(psmouse);
 }
 
 /*
diff -Nru a/drivers/input/mouse/psmouse.h b/drivers/input/mouse/psmouse.h
--- a/drivers/input/mouse/psmouse.h	Thu Mar 11 02:07:38 2004
+++ b/drivers/input/mouse/psmouse.h	Thu Mar 11 02:07:38 2004
@@ -65,6 +65,7 @@
 #define PSMOUSE_SYNAPTICS 	7
 
 int psmouse_command(struct psmouse *psmouse, unsigned char *param, int command);
+int psmouse_reset(struct psmouse *psmouse);
 
 extern int psmouse_smartscroll;
 extern unsigned int psmouse_rate;
diff -Nru a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
--- a/drivers/input/mouse/synaptics.c	Thu Mar 11 02:07:38 2004
+++ b/drivers/input/mouse/synaptics.c	Thu Mar 11 02:07:38 2004
@@ -92,17 +92,6 @@
 	return 0;
 }
 
-static int synaptics_reset(struct psmouse *psmouse)
-{
-	unsigned char r[2];
-
-	if (psmouse_command(psmouse, r, PSMOUSE_CMD_RESET_BAT))
-		return -1;
-	if (r[0] == PSMOUSE_RET_BAT && r[1] == PSMOUSE_RET_ID)
-		return 0;
-	return -1;
-}
-
 /*
  * Read the model-id bytes from the touchpad
  * see also SYN_MODEL_* macros
@@ -197,7 +186,7 @@
 {
 	int retries = 0;
 
-	while ((retries++ < 3) && synaptics_reset(psmouse))
+	while ((retries++ < 3) && psmouse_reset(psmouse))
 		printk(KERN_ERR "synaptics reset failed\n");
 
 	if (synaptics_identify(psmouse))

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 3/3] Input patches: synaptics restore taps
  2004-03-11  7:30   ` [PATCH 2/3] Input patches: synaptics passthrough fix Dmitry Torokhov
@ 2004-03-11  7:31     ` Dmitry Torokhov
  0 siblings, 0 replies; 4+ messages in thread
From: Dmitry Torokhov @ 2004-03-11  7:31 UTC (permalink / raw)
  To: Vojtech Pavlik; +Cc: linux-kernel


===================================================================


ChangeSet@1.1664, 2004-03-11 01:57:12-05:00, dtor_core@ameritech.net
  Input: if Synaptics' absolute mode is disabled make sure that
         touchpad is reset back to relative mode and gestures
         (taps) are enabled


 psmouse-base.c |    4 ++++
 synaptics.c    |    8 +++++++-
 synaptics.h    |    1 +
 3 files changed, 12 insertions(+), 1 deletion(-)


===================================================================



diff -Nru a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c
--- a/drivers/input/mouse/psmouse-base.c	Thu Mar 11 02:08:01 2004
+++ b/drivers/input/mouse/psmouse-base.c	Thu Mar 11 02:08:01 2004
@@ -389,6 +389,10 @@
  */
 			psmouse_max_proto = PSMOUSE_IMEX;
 		}
+/*
+ * Make sure that touchpad is in relative mode, gestures (taps) are enabled
+ */
+		synaptics_reset(psmouse);
 	}
 
 	if (psmouse_max_proto > PSMOUSE_IMEX && genius_detect(psmouse)) {
diff -Nru a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
--- a/drivers/input/mouse/synaptics.c	Thu Mar 11 02:08:01 2004
+++ b/drivers/input/mouse/synaptics.c	Thu Mar 11 02:08:01 2004
@@ -357,9 +357,15 @@
 	clear_bit(REL_Y, dev->relbit);
 }
 
-static void synaptics_disconnect(struct psmouse *psmouse)
+void synaptics_reset(struct psmouse *psmouse)
 {
+	/* reset touchpad back to relative mode, gestures enabled */
 	synaptics_mode_cmd(psmouse, 0);
+}
+
+static void synaptics_disconnect(struct psmouse *psmouse)
+{
+	synaptics_reset(psmouse);
 	kfree(psmouse->private);
 }
 
diff -Nru a/drivers/input/mouse/synaptics.h b/drivers/input/mouse/synaptics.h
--- a/drivers/input/mouse/synaptics.h	Thu Mar 11 02:08:01 2004
+++ b/drivers/input/mouse/synaptics.h	Thu Mar 11 02:08:01 2004
@@ -12,6 +12,7 @@
 extern void synaptics_process_byte(struct psmouse *psmouse, struct pt_regs *regs);
 extern int synaptics_detect(struct psmouse *psmouse);
 extern int synaptics_init(struct psmouse *psmouse);
+extern void synaptics_reset(struct psmouse *psmouse);
 
 /* synaptics queries */
 #define SYN_QUE_IDENTIFY		0x00

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2004-03-11  7:43 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-03-11  7:26 [PATCH 0/3] Input patches Dmitry Torokhov
2004-03-11  7:30 ` [PATCH 1/3] Input patches: psmouse cleanup fix Dmitry Torokhov
2004-03-11  7:30   ` [PATCH 2/3] Input patches: synaptics passthrough fix Dmitry Torokhov
2004-03-11  7:31     ` [PATCH 3/3] Input patches: synaptics restore taps Dmitry Torokhov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox