* [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).