Subject: Patch to fix imps2 emulation for usb mice in stable 2.2.X series

From: Kevin Hendricks <[email-masked]>
Date: Sat, 4 Mar 2000 09:09:54 -0500

Hi Paul,

According to the XFree 4.0 developers bit 3 in the first character from all
imps/2 mice must be set.  This was not the case in early 2.3.X kernels but this
bug was found and fixed in later 2.3.XX kernels.

The Xfree 4.0 Xserver uses this fact to determine if characters read from a
imps/2 mouse are out-of-sync or not.

Because our 2.2.X kernel usb mouse.c code never properly sets this bit in the
first character, the XFree 4.0 Xservers are throwing out the first character
read from the mouse umaking for mouse mayhem.

Will you please install this patch into the 2.2.X stable kernel series?  It
will make our imps2 usb mouse properly follow the conventions for imps2 mice
and make it more like what the 2.3.XX kernels are doing right now

I have tried this patch with the latest XFree 3.9.18 Xserver, and with Xpmac
(rev 9) and an older Mac-On-Linux and it does not cause any problems.

Thanks.

Kevin

--- drivers/usb/mouse.c.prev	Fri Mar  3 17:18:37 2000
+++ drivers/usb/mouse.c	Fri Mar  3 17:19:56 2000
@@ -183,6 +183,7 @@
 		switch (state) {
 		case 0: { /* buttons and sign */
 			int buttons = mouse->buttons;
+                        buttons = buttons | 0x08; // set bit 3 to fit imps/2
 			mouse->buttons = 0;
 			if (mouse->dx < 0)
 				buttons |= 0x10;

p.s. In case the e-mail mangles this, I have attached the patch as a file also.

Thanks,

Kevin

--
Kevin B. Hendricks
Associate Professor of Operations and Information Technology
Richard Ivey School of Business, University of Western Ontario
London, Ontario  N6A-3K7  CANADA
[email-masked], (519) 661-3874, fax: 519-661-3959

--- drivers/usb/mouse.c.prev	Fri Mar  3 17:18:37 2000
+++ drivers/usb/mouse.c	Fri Mar  3 17:19:56 2000
@@ -183,6 +183,7 @@
 		switch (state) {
 		case 0: { /* buttons and sign */
 			int buttons = mouse->buttons;
+                        buttons = buttons | 0x08; // set bit 3 to fit imps/2
 			mouse->buttons = 0;
 			if (mouse->dx < 0)
 				buttons |= 0x10;