Re: 2.6.13 psmouse: problem wheel detection: AlpsPS/2 versus ImPS/2

From: Vojtech Pavlik
Date: Fri Sep 02 2005 - 09:16:27 EST


On Fri, Sep 02, 2005 at 03:27:16PM +0200, frahm@xxxxxxxxxxxxxxxxxx wrote:
>
> I have encountered a strange problem for the detection of the wheel of my
> PS/2 Mouse (Labtec, optical, three buttons plus wheel, works well
> with the IMPS/2 driver) connected to a Laptop as an external mouse.
>
> Actually, the problem appeares on a Dell Lattitude C840 which has a touch-pad
> mouse (and also a mouse as a small rough button in the keyboard between the
> keys "G" and "H"). Since I don't use neither the touch-pad nor the
> button-mouse I have connected the optical mouse with wheel by a
> standard PS/2 connector at the back of the Lattitude. Up to Kernel 2.6.12 and
> also with all recent 2.4 kernels (including 2.4.31) the external mouse works
> well with the wheel. However at 2.6.13 the wheel is no longer recognized.
> I didn't test intermediate rc-releases between 2.6.12 and 2.6.13 but I have
> seen in the Changelog that there has been some considerable modifications exactly
> for the wheel detection in the psmouse-driver, for example:
>
> ----------------------------
> commit 7b4019d04895de7407c9989895c3664c24ed01f7
> Author: Vojtech Pavlik <vojtech@xxxxxxx>
> Date: Fri Jul 15 01:50:08 2005 -0500
>
> Input: psmouse - wheel mice (imps, exps) always have 3rd button
>
> Signed-off-by: Vojtech Pavlik <vojtech@xxxxxxx>
> Signed-off-by: Dmitry Torokhov <dtor@xxxxxxx>
> ---------------------------
>
> The reason for the non-detetection of the wheel in my case appears to be
> quite simple. During the boot a of 2.6.12 or earlier kernels the driver
> psmouse detects a standard ImPS/2 mouse with the message:
>
> input: ImPS/2 Generic Wheel Mouse on isa0060/serio1
>
> However with 2.6.13 it detects a different "mouse" due to the touch-pad which
> is AlpsPS/2 and not ImPS/2, more precisely the AlpsPS/2-driver seems to be a
> "better" (?) driver for the touch pad mouse but it does NOT recognize the
> wheel of the external mouse. In addition the touch pad also seems to work
> correctly with the ImPS/2-driver. The problem is also independent of the
> fact if I use the nv-driver from XFree/Xorg or the nvidia-driver from NVIDIA
> for the graphic card.
>
> I have therefore commented in the file "drivers/input/mouse/psmouse-base.c"
> the code where the AlpsPS/2-Mouse is detected and afterwards also the kernel
> 2.6.13 falls back to the ImPS/2 Mouse with the wheel properly working.
> The corresponding patch is:

You can get the same behavior with 'psmouse.proto=imps' on the kernel
command line.

The reason why this happens is that the ALPS driver brings the ALPS
touchpad into native mode allowing features like vertical/horizontal
scrolling, circular scrolling, etc, which are not available in imps/2
mode.

Unfortunately, the ALPS passthrough doesn't allow for imps/2, only ps/2,
as far as we know. Unfortunately we haven't been able to find a notebook
with touchpad, touchpoint, *and* an external port, to try to make it
work.

> --- drivers/input/mouse/psmouse-base.c.orig Tue Aug 30 13:15:36 2005
> +++ drivers/input/mouse/psmouse-base.c Fri Sep 2 14:07:01 2005
> @@ -489,17 +489,21 @@
> /*
> * Try ALPS TouchPad
> */
> +/*
> if (max_proto > PSMOUSE_IMEX) {
> ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_RESET_DIS);
> if (alps_detect(psmouse, set_properties) == 0) {
> if (!set_properties || alps_init(psmouse) == 0)
> return PSMOUSE_ALPS;
> +*/
> /*
> * Init failed, try basic relative protocols
> */
> +/*
> max_proto = PSMOUSE_IMEX;
> }
> }
> +*/
>
> if (max_proto > PSMOUSE_IMEX && genius_detect(psmouse, set_properties) == 0)
> return PSMOUSE_GENPS;
>
>
> This is of course only a very simple work-around patch which aims mainly to
> describe the problem than solving it. Furthermore I have no particular
> knowledge of the internals of the psmouse-driver. For the moment being the above
> patch solves the problem to my satisfaction, however, I suppose the
> maintainers of this driver will find a proper way to enable the detection
> of an external mouse with wheel even if there is an internal touch-pad mouse
> (without simply disabling the AlpsPS/2-driver).

I don't think it's possible to have both the ALPS touchpad and an
external mouse with full functionality. It's one or the other - a
limitation of the PS/2 protocol, which is designed for one (not three)
device only.

> In case you need further information please make a "cc" to my email adress
> since I am not subscribed to the kernel-mailing list (however I will regularly
> consult the archive).

--
Vojtech Pavlik
SuSE Labs, SuSE CR
-
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/