[PATCH] mousedev: Fix scrollwheel thingy on IBM ScrollPoint mice

From: Kim Holviala
Date: Tue Oct 26 2004 - 03:47:09 EST


The scrollwheel thingy (stick) on IBM ScrollPoint mice returns extremely
aggressive values even when touched lightly. This confuses XFree which
assumes the wheel values can only be 1 or -1. Incidently, it also
confuses Windows' default mouse driver which proves the problem is in
the mouse itself.

This patch limits the scroll wheel movements to be either +1 or -1 on
the event -> emulated PS/2 level. I chose to implement it there because
mousedev emulates Microsoft mice but the real ones almoust never return
a bigger value than 1 (or -1).

Kim



diff -ruN linux-2.6.8.1-original/drivers/input/Kconfig linux-2.6.8.1/drivers/input/Kconfig
--- linux-2.6.8.1-original/drivers/input/Kconfig 2004-10-26 08:42:30.000000000 +0300
+++ linux-2.6.8.1/drivers/input/Kconfig 2004-10-26 09:54:58.000000000 +0300
@@ -72,6 +72,17 @@
screen resolution you are using to correctly scale the data. If
you're not using a digitizer, this value is ignored.

+config INPUT_MOUSEDEV_WHEELFIX
+ bool "Limit too fast wheel movement"
+ depends on INPUT_MOUSEDEV
+ default n
+ help
+ Say Y here if your mouse wheel only works randomly or if it scrolls
+ too fast. Some mice, like IBM's scrollpoints, return too big wheel
+ movement values which confuse programs like XFree.
+
+ If your mouse wheel thingy works as advertised, say N.
+
config INPUT_JOYDEV
tristate "Joystick interface"
depends on INPUT
diff -ruN linux-2.6.8.1-original/drivers/input/mousedev.c linux-2.6.8.1/drivers/input/mousedev.c
--- linux-2.6.8.1-original/drivers/input/mousedev.c 2004-10-26 08:42:31.000000000 +0300
+++ linux-2.6.8.1/drivers/input/mousedev.c 2004-10-26 11:21:01.000000000 +0300
@@ -137,7 +137,11 @@
switch (code) {
case REL_X: mousedev->packet.dx += value; break;
case REL_Y: mousedev->packet.dy -= value; break;
- case REL_WHEEL: mousedev->packet.dz -= value; break;
+ case REL_WHEEL:
+#ifdef CONFIG_INPUT_MOUSEDEV_WHEELFIX
+ if (value) { value = (value < 0 ? -1 : 1); }
+#endif /* CONFIG_INPUT_MOUSEDEV_WHEELFIX */
+ mousedev->packet.dz -= value; break;
}
}

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/