Re: ALPS input driver problem with DualPoint on Dell E6400/E6500

From: Frederik Himpe
Date: Mon Nov 03 2008 - 14:02:38 EST


On Sat, 01 Nov 2008 15:48:28 +1100, Matthew Chapman wrote:

> I have a Dell Latitude E6400 laptop with an ALPS touchpad/touchstick
> combination, aka DualPoint. Individually, the touchpad and touchstick
> work fine. However, if I accidentally touch both together, or use the
> touchpad buttons while using the touchstick (or vice versa), things go
> astray. The pointer jumps around, stray mouse buttons are pressed, and
> the driver typically loses sync:
>
> [13333.661085] psmouse.c: DualPoint TouchPad at isa0060/serio1/input0
> lost sync at byte 5
> [13333.662353] psmouse.c: DualPoint TouchPad at isa0060/serio1/input0
> lost sync at byte 1
> [13333.669493] psmouse.c: DualPoint TouchPad at isa0060/serio1/input0 -
> driver resynched.
>
> To cut a long story short, it seems that in this case the ALPS device
> sends a 9-byte packet format, with both a relative update and an
> absolute update combined (why oh why...). Has anyone else seen
> something like this?

I can definitely confirm this problem, also on a Dell Latitutde E6400 with
2.6.27 kernel.

dmesg contains errors like this:

psmouse.c: DualPoint TouchPad at isa0060/serio1/input0 lost sync at byte 6
psmouse.c: DualPoint TouchPad at isa0060/serio1/input0 - driver resynched.
psmouse.c: DualPoint TouchPad at isa0060/serio1/input0 lost sync at byte 5
psmouse.c: DualPoint TouchPad at isa0060/serio1/input0 lost sync at byte 1
psmouse.c: DualPoint TouchPad at isa0060/serio1/input0 - driver resynched.
psmouse.c: DualPoint TouchPad at isa0060/serio1/input0 lost sync at byte 5
psmouse.c: DualPoint TouchPad at isa0060/serio1/input0 lost sync at byte 6
psmouse.c: DualPoint TouchPad at isa0060/serio1/input0 lost sync at byte 3
psmouse.c: DualPoint TouchPad at isa0060/serio1/input0 lost sync at byte 3
psmouse.c: DualPoint TouchPad at isa0060/serio1/input0 lost sync at byte 3
psmouse.c: issuing reconnect request
input: PS/2 Generic Mouse as /class/input/input13

(Note also that this patch is still required to make this patch to make
the synaptic driver recognize the touchpad:
http://lkml.org/lkml/2008/9/7/133 )

# cat /proc/bus/input/devices
I: Bus=0017 Vendor=0001 Product=0001 Version=0100
N: Name="Macintosh mouse button emulation"
P: Phys=
S: Sysfs=/class/input/input0
U: Uniq=
H: Handlers=mouse0 event0
B: EV=7
B: KEY=70000 0 0 0 0
B: REL=3

I: Bus=0011 Vendor=0001 Product=0001 Version=ab41
N: Name="AT Translated Set 2 keyboard"
P: Phys=isa0060/serio0/input0
S: Sysfs=/class/input/input1
U: Uniq=
H: Handlers=kbd event1
B: EV=120013
B: KEY=800000000000 0 0 500f02102002 380303cf810d001 feffffdfffefffff
ffffffffffffffff
B: MSC=10
B: LED=7

I: Bus=0019 Vendor=0000 Product=0005 Version=0000
N: Name="Lid Switch"
P: Phys=PNP0C0D/button/input0
S: Sysfs=/class/input/input4
U: Uniq=
H: Handlers=event4
B: EV=21
B: SW=1

I: Bus=0019 Vendor=0000 Product=0001 Version=0000
N: Name="Power Button (CM)"
P: Phys=PNP0C0C/button/input0
S: Sysfs=/class/input/input5
U: Uniq=
H: Handlers=kbd event5
B: EV=3
B: KEY=10000000000000 0

I: Bus=0019 Vendor=0000 Product=0003 Version=0000
N: Name="Sleep Button (CM)"
P: Phys=PNP0C0E/button/input0
S: Sysfs=/class/input/input6
U: Uniq=
H: Handlers=kbd event6
B: EV=3
B: KEY=4000 0 0

I: Bus=0019 Vendor=0000 Product=0006 Version=0000
N: Name="Video Bus"
P: Phys=/video/input0
S: Sysfs=/class/input/input7
U: Uniq=
H: Handlers=kbd event7
B: EV=3
B: KEY=3f000b00000000 0 0 0

I: Bus=0019 Vendor=0000 Product=0006 Version=0000
N: Name="Video Bus"
P: Phys=/video/input0
S: Sysfs=/class/input/input8
U: Uniq=
H: Handlers=kbd event8
B: EV=3
B: KEY=3f000b00000000 0 0 0

I: Bus=0019 Vendor=0000 Product=0006 Version=0000
N: Name="Video Bus"
P: Phys=/video/input0
S: Sysfs=/class/input/input9
U: Uniq=
H: Handlers=kbd event9
B: EV=3
B: KEY=3f000b00000000 0 0 0

I: Bus=0003 Vendor=413c Product=8157 Version=0111
N: Name="HID 413c:8157"
P: Phys=usb-0000:00:1a.0-1.1/input0
S: Sysfs=/class/input/input10
U: Uniq=
H: Handlers=kbd event10
B: EV=120013
B: KEY=1000000000007 ff800000000007ff febeffdff3cfffff fffffffffffffffe
B: MSC=10
B: LED=7

I: Bus=0001 Vendor=111d Product=76b2 Version=0001
N: Name="HDA Digital PCBeep"
P: Phys=card0/codec#0/beep0
S: Sysfs=/class/input/input12
U: Uniq=
H: Handlers=kbd event12
B: EV=40001
B: SND=6

I: Bus=0011 Vendor=0002 Product=0001 Version=0000
N: Name="PS/2 Generic Mouse"
P: Phys=isa0060/serio1/input0
S: Sysfs=/class/input/input13
U: Uniq=
H: Handlers=mouse1 event2
B: EV=7
B: KEY=70000 0 0 0 0
B: REL=3



> When I use just the touchstick and its buttons, the packets are normal
> PS/2 relative mode packets, e.g.:
>
> 08 01 00 dx=1 dy=0
> 09 01 00 dx=1 dy=0 left T/S button down 08 00 01 dx=0 dy=1
> left T/S button up
>
> When I use just the touchpad and its buttons, the packets look like
> this, which also works fine with the current ALPS code:
>
> cf 27 1a 38 24 46 x=423 y=420 z=70 fin=1 cf 2c 1a 39 1e 45 x=428
> y=414 z=69 fin=1 left T/P button down cf 2f 1a 38 17 44 x=431
> y=407 z=68 fin=1 left T/P button up
>
> Let's say now I use the touchpad and press a touchstick button...
>
> cf 15 1a 38 5e 3d x=405 y=478 z=61 cf 19 1a 0f 00 00 39 56
> 3d x=409 y=470 z=61 left T/P button down
> ^^^^^^^^
> cf 1d 1a 39 4e 3d x=413 y=462 z=61
>
> cf 21 1a 0f 00 00 38 49 3f x=417 y=456 z=63 left T/P button up
> ^^^^^^^^
> cf 21 1a 38 48 3e x=417 y=455 z=62
>
> Now let's try moving the touchstick also...
>
> cf 3d 12 3f fa fd 18 4c 21 dx=-6 dy=-3 x=317 y=204 z=33
> ^^^^^^^^
> 38 fa fd dx=-6 dy=-3 cf 3a 12 3f f9 fc 18 4c 20
> dx=-7 dy=-4 x=314 y=204 z=32
> ^^^^^^^^
> 38 fa fd dx=-6 dy=-3 etc.
>
> In other words, it seems like there's a relative update embedded right
> in the middle of the absolute mode packet, which can be identified by
> all the buttons being set to 1.
>
> I can put together a patch, but it's a non-trivial change... I'm
> interested in hearing whether anyone else has the same problem with
> their E6400/E6500 or other DualPoint laptop, or has better ideas
> regarding how to deal with this.

--
Frederik Himpe


--
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/