2005-01-06 16:54:47

by Peter Osterlund

[permalink] [raw]
Subject: [PATCH] ALPS touchpad detection fix

My ALPS touchpad is not recognized because the device gets confused by
the Kensington ThinkingMouse probe. It responds with "00 00 14"
instead of the expected "00 00 64" to the "E6 report".

Resetting the device before attempting the ALPS probe fixes the
problem.

Signed-off-by: Peter Osterlund <[email protected]>
---

linux-petero/drivers/input/mouse/psmouse-base.c | 1 +
1 files changed, 1 insertion(+)

diff -puN drivers/input/mouse/psmouse-base.c~alps-fix drivers/input/mouse/psmouse-base.c
--- linux/drivers/input/mouse/psmouse-base.c~alps-fix 2005-01-06 17:33:15.000000000 +0100
+++ linux-petero/drivers/input/mouse/psmouse-base.c 2005-01-06 17:33:46.000000000 +0100
@@ -451,6 +451,7 @@ static int psmouse_extensions(struct psm
/*
* Try ALPS TouchPad
*/
+ ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_RESET_DIS);
if (max_proto > PSMOUSE_IMEX && alps_detect(psmouse, set_properties) == 0) {
if (!set_properties || alps_init(psmouse) == 0)
return PSMOUSE_ALPS;
_

--
Peter Osterlund - [email protected]
http://web.telia.com/~u89404340


2005-01-07 17:28:52

by Denis Vlasenko

[permalink] [raw]
Subject: Re: [PATCH] ALPS touchpad detection fix

On Thursday 06 January 2005 18:54, Peter Osterlund wrote:
> My ALPS touchpad is not recognized because the device gets confused by
> the Kensington ThinkingMouse probe. It responds with "00 00 14"
> instead of the expected "00 00 64" to the "E6 report".
>
> Resetting the device before attempting the ALPS probe fixes the
> problem.
>
> Signed-off-by: Peter Osterlund <[email protected]>
> ---
>
> linux-petero/drivers/input/mouse/psmouse-base.c | 1 +
> 1 files changed, 1 insertion(+)
>
> diff -puN drivers/input/mouse/psmouse-base.c~alps-fix drivers/input/mouse/psmouse-base.c
> --- linux/drivers/input/mouse/psmouse-base.c~alps-fix 2005-01-06 17:33:15.000000000 +0100
> +++ linux-petero/drivers/input/mouse/psmouse-base.c 2005-01-06 17:33:46.000000000 +0100
> @@ -451,6 +451,7 @@ static int psmouse_extensions(struct psm
> /*
> * Try ALPS TouchPad
> */
> + ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_RESET_DIS);
> if (max_proto > PSMOUSE_IMEX && alps_detect(psmouse, set_properties) == 0) {
> if (!set_properties || alps_init(psmouse) == 0)
> return PSMOUSE_ALPS;

You do reset even if max_proto <= PSMOUSE_IMEX and therefore
alps_detect won't be called. Is it intended?
--
vda

2005-01-07 22:22:18

by Peter Osterlund

[permalink] [raw]
Subject: Re: [PATCH] ALPS touchpad detection fix

Denis Vlasenko <[email protected]> writes:

> On Thursday 06 January 2005 18:54, Peter Osterlund wrote:
> > My ALPS touchpad is not recognized because the device gets confused by
> > the Kensington ThinkingMouse probe. It responds with "00 00 14"
> > instead of the expected "00 00 64" to the "E6 report".
> >
> > Resetting the device before attempting the ALPS probe fixes the
> > problem.
> >
...
> > /*
> > * Try ALPS TouchPad
> > */
> > + ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_RESET_DIS);
> > if (max_proto > PSMOUSE_IMEX && alps_detect(psmouse, set_properties) == 0) {
> > if (!set_properties || alps_init(psmouse) == 0)
> > return PSMOUSE_ALPS;
>
> You do reset even if max_proto <= PSMOUSE_IMEX and therefore
> alps_detect won't be called. Is it intended?

Not really intended. (It shouldn't harm though because the
mouse/touchpad is reset anyway before the IntelliMouse probe.)

Here is an updated patch that only does the reset when alps_detect()
is going to be called.

Signed-off-by: Peter Osterlund <[email protected]>
---

linux-petero/drivers/input/mouse/psmouse-base.c | 12 +++++++-----
1 files changed, 7 insertions(+), 5 deletions(-)

diff -puN drivers/input/mouse/psmouse-base.c~alps-fix drivers/input/mouse/psmouse-base.c
--- linux/drivers/input/mouse/psmouse-base.c~alps-fix 2005-01-06 22:43:28.000000000 +0100
+++ linux-petero/drivers/input/mouse/psmouse-base.c 2005-01-07 22:51:45.000000000 +0100
@@ -451,14 +451,16 @@ static int psmouse_extensions(struct psm
/*
* Try ALPS TouchPad
*/
- if (max_proto > PSMOUSE_IMEX && alps_detect(psmouse, set_properties) == 0) {
- if (!set_properties || alps_init(psmouse) == 0)
- return PSMOUSE_ALPS;
-
+ 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;
+ max_proto = PSMOUSE_IMEX;
+ }
}

if (max_proto > PSMOUSE_IMEX && genius_detect(psmouse, set_properties) == 0)
_

--
Peter Osterlund - [email protected]
http://web.telia.com/~u89404340