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).
...
+#ifdef CONFIG_INPUT_MOUSEDEV_WHEELFIX
+ if (value) { value = (value < 0 ? -1 : 1); }
+#endif /* CONFIG_INPUT_MOUSEDEV_WHEELFIX */
This is really not a thing which we can put behind compile-time config.
Can we come up with a fix which works correctly on all hardware? If not,
this workaround will need to be enabled by some sort of runtime detection.
Unless someone (Vojtech?) has an objection I think we should always have
this workaround activated - after all mousedev provides legacy emulation
mostly for XFree/XOrg benefit anyway. Clients accessing data through evdev
will see the full picture regardless.
We can have a workaround for XOrg, but not one like this. This will make
fast scrolling unreliable. I have standard Microsoft-compatible mice
which do report more than one scroll tick per report, if you scroll the
wheel fast enough, and this throws away the extra ticks.
We would have to split the value into multiple events which would each
report a 1 or -1.