touchpad doesn't reconnect after resume: Synaptics ps2
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
OEM Priority Project |
Fix Released
|
Medium
|
Unassigned | ||
linux (Ubuntu) |
Fix Released
|
Medium
|
Canonical Kernel Team | ||
Lucid |
Fix Released
|
Low
|
Tim Gardner |
Bug Description
Upcoming Dell Laptop being worked on by OEM has a touchpad that works fine on boot, but
after coming back from S3 suspend, the system doesn't detect that a touchpad is present.
The kernel psmouse driver was instrumented and later the libps2 core and found we were
bailing in psmouse_probe with -ENODEV.
[ 2241.043143] XXX loading psmouse module
[ 2241.043321] XXX finished loading psmouse [0]
[ 2241.043614] XXX (psmouse_connect) ENTER
[ 2241.043622] XXX (psmouse_probe) ENTER:879
[ 2241.043626] XXX (psmouse_probe) HERE [/root/
[ 2241.240721] XXX (psmouse_connect) psmouse probe failed ENODEV
param[0] = 0xa5;
if (ps2_command(
and...
Here's what's going on in libps2 during the failed probe which results in -ENODEV
0 kseriod(41): -> ps2_init
ps2_init args [ps2dev=0xf006de08 serio=0xf6d36200 ]
exit 17 kseriod(41): -> ps2_init
ps2_init args []
0 kseriod(41): -> ps2_command
ps2_command args [ps2dev=0xf006de08 param=0xf75bbeaa command=0x2f2 ]
(ps2_command) libps2.c:172
(ps2_command) libps2.c:177
(ps2_command) libps2.c:182
(ps2_command) libps2.c:197
42 kseriod(41): -> ps2_sendbyte
ps2_sendbyte args [ps2dev=0xf006de08 byte=0xf2 timeout=0xc8 ]
exit 200048 kseriod(41): -> ps2_sendbyte
ps2_sendbyte args [return=
(ps2_command) libps2.c:224
exit 200070 kseriod(41): -> ps2_command
ps2_command args [return=
Generated by systemtap
...
probe kernel.
printf ("%s -> %s\n", thread_indent(1), probefunc())
printf ("%s args [%s]\n", probefunc(), $$parms)
}
probe kernel.
printf ("exit %s -> %s\n", thread_indent(-1), probefunc())
printf ("%s args [%s]\n", probefunc(), $$return)
}
So I noticed that while we have some elaborate reset code once we know what
kind of ps2 device we have, the probe routine itself by comparison doesn't try
as hard.
The attached patch perfoms a psmouse_reset on the port should the
initial probe fail followed by a therapeutic 1/2 sec sleep. The attach patch
does exactly that and retries that probe up to 3 times. I only need one reset
to recover the Synaptic touchpad.
description: | updated |
tags: | added: kernel-series-unknown |
Changed in oem-priority: | |
importance: | Undecided → High |
tags: | added: patch |
Changed in linux (Ubuntu): | |
milestone: | none → lucid-updates |
Changed in oem-priority: | |
status: | New → In Progress |
Changed in oem-priority: | |
importance: | High → Medium |
Changed in linux (Ubuntu Lucid): | |
assignee: | nobody → Tim Gardner (timg-tpi) |
importance: | Undecided → Low |
milestone: | none → lucid-updates |
status: | New → In Progress |
tags: |
added: verification-done removed: verification-needed |
Changed in oem-priority: | |
status: | In Progress → Fix Committed |
Changed in oem-priority: | |
status: | Fix Committed → Fix Released |
Reproduced on 2.6.31 (karmic) and 2.6.32 (lucid) kernel series.