linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH][RESEND] Force mouse detection as imps/2 (and fix my KVM switch)
@ 2003-08-31 13:06 jhf
  2003-08-31 13:16 ` [RESEND] " Petr Baudis
       [not found] ` <20030831121432.4ac11574.akpm@osdl.org>
  0 siblings, 2 replies; 3+ messages in thread
From: jhf @ 2003-08-31 13:06 UTC (permalink / raw)
  To: vojtech; +Cc: linux-kernel, akpm

[-- Attachment #1: Type: text/plain, Size: 7692 bytes --]

    After working out the symptoms of a problem I was having using my
scroll mouse with my KVM switch when running 2.6 kernels, I made this
patch which fixes the problem for me.  I think it would be useful to
have this in the kernel, especially since it has other uses too.

    I have a Logitech mouse with a scroll wheel that 2.6 kernels
detect as supporting the Logitech ps2++ protocol, and enable it as
such.  My KVM switch supports only the Microsoft imps2 protocol for
using the scroll wheel, so after switching away from a box running a
2.6 kernel and back again, my scroll wheel no longer works; evbug
doesn't see any mouse events at all when I turn the scroll wheel.

    2.4 (and Windows) don't have this problem because they use imps2
drivers, which my mouse is compatible with.  So the appended patch
creates a new module/boot parameter, psmouse_imps2, largely copied
from psmouse_noext.  With the option, the mouse detection is limited
to only the base ps2 protocol and the imps2 extensions, my mouse is
detected as a generic imps/2 device, and the scroll wheel works
properly again.

    I've been using this patch for about a month.  I've since seen
another use for this parameter; with it it is possible to disable the
synaptics touchpad driver and still use an external imps2 mouse.

    I'm not sure if short-circuiting the mouse detection this way
might leave some mice wedged, or cause them to be improperly detected
though.  Do the tests for imps/2 mice depend on any of the commands in
the detection this patch skips to initialize the mouse somehow?

    This patch is against -test4; it applies to -test4-mm4 with
offsets (I'm running -mm4).  More than half the length of the patch is
indentation.  Is there a possibility of getting this applied?



diff -urN linux-2.6.0-test4/Documentation/kernel-parameters.txt linux-2.6.0-test4_changed/Documentation/kernel-parameters.txt
--- linux-2.6.0-test4/Documentation/kernel-parameters.txt	2003-08-31 08:08:00.000000000 -0400
+++ linux-2.6.0-test4_changed/Documentation/kernel-parameters.txt	2003-08-31 08:15:29.000000000 -0400
@@ -785,6 +785,8 @@
 
 	psmouse_noext	[HW,MOUSE] Disable probing for PS2 mouse protocol extensions
 
+	psmouse_imps2	[HW,MOUSE] Probe only for Intellimouse PS2 mouse protocol extensions
+
 	pss=		[HW,OSS] Personal Sound System (ECHO ESC614)
 			Format: <io>,<mss_io>,<mss_irq>,<mss_dma>,<mpu_io>,<mpu_irq>
 
diff -urN linux-2.6.0-test4/drivers/input/mouse/psmouse-base.c linux-2.6.0-test4_changed/drivers/input/mouse/psmouse-base.c
--- linux-2.6.0-test4/drivers/input/mouse/psmouse-base.c	2003-07-27 12:58:51.000000000 -0400
+++ linux-2.6.0-test4_changed/drivers/input/mouse/psmouse-base.c	2003-08-31 08:15:29.000000000 -0400
@@ -25,6 +25,8 @@
 MODULE_DESCRIPTION("PS/2 mouse driver");
 MODULE_PARM(psmouse_noext, "1i");
 MODULE_PARM_DESC(psmouse_noext, "Disable any protocol extensions. Useful for KVM switches.");
+MODULE_PARM(psmouse_imps2, "1i");
+MODULE_PARM_DESC(psmouse_imps2, "Limit protocol extensions to the Intellimouse protocol.");
 MODULE_PARM(psmouse_resolution, "i");
 MODULE_PARM_DESC(psmouse_resolution, "Resolution, in dpi.");
 MODULE_PARM(psmouse_smartscroll, "i");
@@ -34,6 +36,7 @@
 #define PSMOUSE_LOGITECH_SMARTSCROLL	1
 
 static int psmouse_noext;
+static int psmouse_imps2;
 int psmouse_resolution;
 int psmouse_smartscroll = PSMOUSE_LOGITECH_SMARTSCROLL;
 
@@ -250,66 +253,68 @@
 	if (psmouse_noext)
 		return PSMOUSE_PS2;
 
-/*
- * Try Synaptics TouchPad magic ID
- */
-
-       param[0] = 0;
-       psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
-       psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
-       psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
-       psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
-       psmouse_command(psmouse, param, PSMOUSE_CMD_GETINFO);
+	if (!psmouse_imps2) {
 
-       if (param[1] == 0x47) {
-		psmouse->vendor = "Synaptics";
-		psmouse->name = "TouchPad";
-		if (!synaptics_init(psmouse))
-			return PSMOUSE_SYNAPTICS;
-		else
-			return PSMOUSE_PS2;
-       }
+		/*
+		 * Try Synaptics TouchPad magic ID
+		 */
 
-/*
- * Try Genius NetMouse magic init.
- */
+		param[0] = 0;
+		psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
+		psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
+		psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
+		psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
+		psmouse_command(psmouse, param, PSMOUSE_CMD_GETINFO);
+
+		if (param[1] == 0x47) {
+			psmouse->vendor = "Synaptics";
+			psmouse->name = "TouchPad";
+			if (!synaptics_init(psmouse))
+				return PSMOUSE_SYNAPTICS;
+			else
+				return PSMOUSE_PS2;
+		}
 
-	param[0] = 3;
-	psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
-	psmouse_command(psmouse,  NULL, PSMOUSE_CMD_SETSCALE11);
-	psmouse_command(psmouse,  NULL, PSMOUSE_CMD_SETSCALE11);
-	psmouse_command(psmouse,  NULL, PSMOUSE_CMD_SETSCALE11);
-	psmouse_command(psmouse, param, PSMOUSE_CMD_GETINFO);
+		/*
+		 * Try Genius NetMouse magic init.
+		 */
 
-	if (param[0] == 0x00 && param[1] == 0x33 && param[2] == 0x55) {
+		param[0] = 3;
+		psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
+		psmouse_command(psmouse,  NULL, PSMOUSE_CMD_SETSCALE11);
+		psmouse_command(psmouse,  NULL, PSMOUSE_CMD_SETSCALE11);
+		psmouse_command(psmouse,  NULL, PSMOUSE_CMD_SETSCALE11);
+		psmouse_command(psmouse, param, PSMOUSE_CMD_GETINFO);
 
-		set_bit(BTN_EXTRA, psmouse->dev.keybit);
-		set_bit(BTN_SIDE, psmouse->dev.keybit);
-		set_bit(REL_WHEEL, psmouse->dev.relbit);
+		if (param[0] == 0x00 && param[1] == 0x33 && param[2] == 0x55) {
 
-		psmouse->vendor = "Genius";
-		psmouse->name = "Wheel Mouse";
-		return PSMOUSE_GENPS;
-	}
+			set_bit(BTN_EXTRA, psmouse->dev.keybit);
+			set_bit(BTN_SIDE, psmouse->dev.keybit);
+			set_bit(REL_WHEEL, psmouse->dev.relbit);
 
-/*
- * Try Logitech magic ID.
- */
+			psmouse->vendor = "Genius";
+			psmouse->name = "Wheel Mouse";
+			return PSMOUSE_GENPS;
+		}
 
-	param[0] = 0;
-	psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
-	psmouse_command(psmouse,  NULL, PSMOUSE_CMD_SETSCALE11);
-	psmouse_command(psmouse,  NULL, PSMOUSE_CMD_SETSCALE11);
-	psmouse_command(psmouse,  NULL, PSMOUSE_CMD_SETSCALE11);
-	param[1] = 0;
-	psmouse_command(psmouse, param, PSMOUSE_CMD_GETINFO);
+		/*
+		 * Try Logitech magic ID.
+		 */
 
-	if (param[1]) {
-		int type = ps2pp_detect_model(psmouse, param);
-		if (type)
-			return type;
+		param[0] = 0;
+		psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
+		psmouse_command(psmouse,  NULL, PSMOUSE_CMD_SETSCALE11);
+		psmouse_command(psmouse,  NULL, PSMOUSE_CMD_SETSCALE11);
+		psmouse_command(psmouse,  NULL, PSMOUSE_CMD_SETSCALE11);
+		param[1] = 0;
+		psmouse_command(psmouse, param, PSMOUSE_CMD_GETINFO);
+
+		if (param[1]) {
+			int type = ps2pp_detect_model(psmouse, param);
+			if (type)
+				return type;
+		}
 	}
-
 /*
  * Try IntelliMouse magic init.
  */
@@ -555,6 +560,12 @@
 	return 1;
 }
 
+static int __init psmouse_imps2_setup(char *str)
+{
+	psmouse_imps2 = 1;
+	return 1;
+}
+
 static int __init psmouse_resolution_setup(char *str)
 {
 	get_option(&str, &psmouse_resolution);
@@ -568,6 +579,7 @@
 }
 
 __setup("psmouse_noext", psmouse_noext_setup);
+__setup("psmouse_imps2", psmouse_imps2_setup);
 __setup("psmouse_resolution=", psmouse_resolution_setup);
 __setup("psmouse_smartscroll=", psmouse_smartscroll_setup);
 

-- 
Joseph Fannin
jhf@rivenstone.net

"Linus, please apply.  Breaks everything.  But is cool." -- Rusty Russell.

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

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

* Re: [RESEND] Force mouse detection as imps/2 (and fix my KVM switch)
  2003-08-31 13:06 [PATCH][RESEND] Force mouse detection as imps/2 (and fix my KVM switch) jhf
@ 2003-08-31 13:16 ` Petr Baudis
       [not found] ` <20030831121432.4ac11574.akpm@osdl.org>
  1 sibling, 0 replies; 3+ messages in thread
From: Petr Baudis @ 2003-08-31 13:16 UTC (permalink / raw)
  To: vojtech, linux-kernel, akpm

Dear diary, on Sun, Aug 31, 2003 at 03:06:19PM CEST, I got a letter,
where jhf@rivenstone.net told me, that...
> diff -urN linux-2.6.0-test4/Documentation/kernel-parameters.txt linux-2.6.0-test4_changed/Documentation/kernel-parameters.txt
> --- linux-2.6.0-test4/Documentation/kernel-parameters.txt	2003-08-31 08:08:00.000000000 -0400
> +++ linux-2.6.0-test4_changed/Documentation/kernel-parameters.txt	2003-08-31 08:15:29.000000000 -0400
> @@ -785,6 +785,8 @@
>  
>  	psmouse_noext	[HW,MOUSE] Disable probing for PS2 mouse protocol extensions
>  
> +	psmouse_imps2	[HW,MOUSE] Probe only for Intellimouse PS2 mouse protocol extensions
> +
>  	pss=		[HW,OSS] Personal Sound System (ECHO ESC614)
>  			Format: <io>,<mss_io>,<mss_irq>,<mss_dma>,<mpu_io>,<mpu_irq>

Just a trivial remark - please try to keep this file in more-or-less
alphabetical order, thanks.

Kind regards,

-- 
 
				Petr "Pasky" Baudis
.
Perfection is reached, not when there is no longer anything to add, but when
there is no longer anything to take away.
	-- Antoine de Saint-Exupery
.
Stuff: http://pasky.ji.cz/

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

* Re: [PATCH][RESEND] Force mouse detection as imps/2 (and fix my KVM switch)
       [not found] ` <20030831121432.4ac11574.akpm@osdl.org>
@ 2003-09-01  4:40   ` jhf
  0 siblings, 0 replies; 3+ messages in thread
From: jhf @ 2003-09-01  4:40 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-kernel, vojtech


[-- Attachment #1.1: Type: text/plain, Size: 690 bytes --]

On Sun, Aug 31, 2003 at 12:14:32PM -0700, Andrew Morton wrote:
> <jhf@rivenstone.net> wrote:
> >
> >     This patch is against -test4; it applies to -test4-mm4 with
> >  offsets (I'm running -mm4).  More than half the length of the patch is
> >  indentation.  Is there a possibility of getting this applied?
> 
> Please resend as an attachment.  I was unable to de-mime it.

    Okay, I'm attaching a slightly changed patch that puts things back
in the roughly alphabetical order I found them in.  It compiles and
tests okay.

-- 
Joseph Fannin
jhf@rivenstone.net

"Bull in pure form is rare; there is usually some contamination by data."
    -- William Graves Perry Jr.

[-- Attachment #1.2: psmouse_imps2.diff --]
[-- Type: text/plain, Size: 5694 bytes --]

diff -urN linux-2.6.0-test4/Documentation/kernel-parameters.txt linux-2.6.0-test4_changed/Documentation/kernel-parameters.txt
--- linux-2.6.0-test4/Documentation/kernel-parameters.txt	2003-08-31 08:08:00.000000000 -0400
+++ linux-2.6.0-test4_changed/Documentation/kernel-parameters.txt	2003-09-01 00:17:53.000000000 -0400
@@ -783,6 +783,8 @@
 			before loading.
 			See Documentation/ramdisk.txt.
 
+	psmouse_imps2	[HW,MOUSE] Probe only for Intellimouse PS2 mouse protocol extensions
+
 	psmouse_noext	[HW,MOUSE] Disable probing for PS2 mouse protocol extensions
 
 	pss=		[HW,OSS] Personal Sound System (ECHO ESC614)
diff -urN linux-2.6.0-test4/drivers/input/mouse/psmouse-base.c linux-2.6.0-test4_changed/drivers/input/mouse/psmouse-base.c
--- linux-2.6.0-test4/drivers/input/mouse/psmouse-base.c	2003-07-27 12:58:51.000000000 -0400
+++ linux-2.6.0-test4_changed/drivers/input/mouse/psmouse-base.c	2003-09-01 00:17:25.000000000 -0400
@@ -23,6 +23,8 @@
 
 MODULE_AUTHOR("Vojtech Pavlik <vojtech@suse.cz>");
 MODULE_DESCRIPTION("PS/2 mouse driver");
+MODULE_PARM(psmouse_imps2, "1i");
+MODULE_PARM_DESC(psmouse_imps2, "Limit protocol extensions to the Intellimouse protocol.");
 MODULE_PARM(psmouse_noext, "1i");
 MODULE_PARM_DESC(psmouse_noext, "Disable any protocol extensions. Useful for KVM switches.");
 MODULE_PARM(psmouse_resolution, "i");
@@ -33,6 +35,7 @@
 
 #define PSMOUSE_LOGITECH_SMARTSCROLL	1
 
+static int psmouse_imps2;
 static int psmouse_noext;
 int psmouse_resolution;
 int psmouse_smartscroll = PSMOUSE_LOGITECH_SMARTSCROLL;
@@ -250,66 +253,68 @@
 	if (psmouse_noext)
 		return PSMOUSE_PS2;
 
-/*
- * Try Synaptics TouchPad magic ID
- */
-
-       param[0] = 0;
-       psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
-       psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
-       psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
-       psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
-       psmouse_command(psmouse, param, PSMOUSE_CMD_GETINFO);
+	if (!psmouse_imps2) {
 
-       if (param[1] == 0x47) {
-		psmouse->vendor = "Synaptics";
-		psmouse->name = "TouchPad";
-		if (!synaptics_init(psmouse))
-			return PSMOUSE_SYNAPTICS;
-		else
-			return PSMOUSE_PS2;
-       }
+		/*
+		 * Try Synaptics TouchPad magic ID
+		 */
 
-/*
- * Try Genius NetMouse magic init.
- */
+		param[0] = 0;
+		psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
+		psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
+		psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
+		psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
+		psmouse_command(psmouse, param, PSMOUSE_CMD_GETINFO);
+
+		if (param[1] == 0x47) {
+			psmouse->vendor = "Synaptics";
+			psmouse->name = "TouchPad";
+			if (!synaptics_init(psmouse))
+				return PSMOUSE_SYNAPTICS;
+			else
+				return PSMOUSE_PS2;
+		}
 
-	param[0] = 3;
-	psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
-	psmouse_command(psmouse,  NULL, PSMOUSE_CMD_SETSCALE11);
-	psmouse_command(psmouse,  NULL, PSMOUSE_CMD_SETSCALE11);
-	psmouse_command(psmouse,  NULL, PSMOUSE_CMD_SETSCALE11);
-	psmouse_command(psmouse, param, PSMOUSE_CMD_GETINFO);
+		/*
+		 * Try Genius NetMouse magic init.
+		 */
 
-	if (param[0] == 0x00 && param[1] == 0x33 && param[2] == 0x55) {
+		param[0] = 3;
+		psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
+		psmouse_command(psmouse,  NULL, PSMOUSE_CMD_SETSCALE11);
+		psmouse_command(psmouse,  NULL, PSMOUSE_CMD_SETSCALE11);
+		psmouse_command(psmouse,  NULL, PSMOUSE_CMD_SETSCALE11);
+		psmouse_command(psmouse, param, PSMOUSE_CMD_GETINFO);
 
-		set_bit(BTN_EXTRA, psmouse->dev.keybit);
-		set_bit(BTN_SIDE, psmouse->dev.keybit);
-		set_bit(REL_WHEEL, psmouse->dev.relbit);
+		if (param[0] == 0x00 && param[1] == 0x33 && param[2] == 0x55) {
 
-		psmouse->vendor = "Genius";
-		psmouse->name = "Wheel Mouse";
-		return PSMOUSE_GENPS;
-	}
+			set_bit(BTN_EXTRA, psmouse->dev.keybit);
+			set_bit(BTN_SIDE, psmouse->dev.keybit);
+			set_bit(REL_WHEEL, psmouse->dev.relbit);
 
-/*
- * Try Logitech magic ID.
- */
+			psmouse->vendor = "Genius";
+			psmouse->name = "Wheel Mouse";
+			return PSMOUSE_GENPS;
+		}
 
-	param[0] = 0;
-	psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
-	psmouse_command(psmouse,  NULL, PSMOUSE_CMD_SETSCALE11);
-	psmouse_command(psmouse,  NULL, PSMOUSE_CMD_SETSCALE11);
-	psmouse_command(psmouse,  NULL, PSMOUSE_CMD_SETSCALE11);
-	param[1] = 0;
-	psmouse_command(psmouse, param, PSMOUSE_CMD_GETINFO);
+		/*
+		 * Try Logitech magic ID.
+		 */
 
-	if (param[1]) {
-		int type = ps2pp_detect_model(psmouse, param);
-		if (type)
-			return type;
+		param[0] = 0;
+		psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
+		psmouse_command(psmouse,  NULL, PSMOUSE_CMD_SETSCALE11);
+		psmouse_command(psmouse,  NULL, PSMOUSE_CMD_SETSCALE11);
+		psmouse_command(psmouse,  NULL, PSMOUSE_CMD_SETSCALE11);
+		param[1] = 0;
+		psmouse_command(psmouse, param, PSMOUSE_CMD_GETINFO);
+
+		if (param[1]) {
+			int type = ps2pp_detect_model(psmouse, param);
+			if (type)
+				return type;
+		}
 	}
-
 /*
  * Try IntelliMouse magic init.
  */
@@ -549,6 +554,12 @@
 };
 
 #ifndef MODULE
+static int __init psmouse_imps2_setup(char *str)
+{
+	psmouse_imps2 = 1;
+	return 1;
+}
+
 static int __init psmouse_noext_setup(char *str)
 {
 	psmouse_noext = 1;
@@ -567,6 +578,7 @@
 	return 1;
 }
 
+__setup("psmouse_imps2", psmouse_imps2_setup);
 __setup("psmouse_noext", psmouse_noext_setup);
 __setup("psmouse_resolution=", psmouse_resolution_setup);
 __setup("psmouse_smartscroll=", psmouse_smartscroll_setup);

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

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

end of thread, other threads:[~2003-09-01  4:40 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-08-31 13:06 [PATCH][RESEND] Force mouse detection as imps/2 (and fix my KVM switch) jhf
2003-08-31 13:16 ` [RESEND] " Petr Baudis
     [not found] ` <20030831121432.4ac11574.akpm@osdl.org>
2003-09-01  4:40   ` [PATCH][RESEND] " jhf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).