** Description changed: - I'm working on an OEM laptop where on boot the touchpad works just fine, but - after coming back from S3, the system doesn't detect that a touchpad is present. - I instrumented the psmouse driver and later the libps2 core and found we were - bailing in psmouse_probe with -ENODEV. + 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/build/linux-2.6.31/drivers/input/mouse/psmouse-base.c:887] [ 2241.240721] XXX (psmouse_connect) psmouse probe failed ENODEV - printk(KERN_INFO "XXX (%s) HERE [%s:%d] \n", __FUNCTION__, + printk(KERN_INFO "XXX (%s) HERE [%s:%d] \n", __FUNCTION__, __FILE__, __LINE__); - param[0] = 0xa5; - if (ps2_command(ps2dev, param, PSMOUSE_CMD_GETID)) - return -1; + param[0] = 0xa5; + if (ps2_command(ps2dev, param, PSMOUSE_CMD_GETID)) + return -1; and... Here's what's going on in libps2 during the failed probe which results in -ENODEV - 0 kseriod(41): -> ps2_init + 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 + 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 + 42 kseriod(41): -> ps2_sendbyte ps2_sendbyte args [ps2dev=0xf006de08 byte=0xf2 timeout=0xc8 ] exit 200048 kseriod(41): -> ps2_sendbyte ps2_sendbyte args [return=0xffffffffffffffff ] (ps2_command) libps2.c:224 exit 200070 kseriod(41): -> ps2_command ps2_command args [return=0xffffffffffffffff ] Generated by systemtap ... probe kernel.function("ps2_*").call { - printf ("%s -> %s\n", thread_indent(1), probefunc()) - printf ("%s args [%s]\n", probefunc(), $$parms) + printf ("%s -> %s\n", thread_indent(1), probefunc()) + printf ("%s args [%s]\n", probefunc(), $$parms) } probe kernel.function("ps2_*").return { - printf ("exit %s -> %s\n", thread_indent(-1), probefunc()) - printf ("%s args [%s]\n", probefunc(), $$return) + 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 + 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 + 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. - - This is still broken in lucid as of the 3/27 build.
-- touchpad doesn't reconnect after resume: Synaptics ps2 https://bugs.launchpad.net/bugs/551234 You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs