[PATCH] psmouse: touchpad doesn't reconnect after resume: Synaptics ps2 Bug: 551234

Peter M. Petrakis peter.petrakis at canonical.com
Thu Apr 1 15:37:28 UTC 2010

On 04/01/2010 05:20 AM, Stefan Bader wrote:
> Peter M. Petrakis wrote:
>> Stefan,
>> I think we tried that, but I retested again just to be sure
>> with a live image and it still fails with that option. Also,
>> removing and reinserting the psmouse mod doesn't make a
>> difference.
>> Peter
>> On 03/30/2010 05:46 AM, Stefan Bader wrote:
>>> Peter M. Petrakis wrote:
>>>> Hi All,
>>>> This is my first stab at correcting some PS/2 misbehavior when returning
>>>> from S3. Fire away :). Thanks.
>>>> Peter
>>>> P.S. Collaborated with Colin King on this one.
>>> Hm, just a question. Have you tried using "i8042.reset=1" in the boot command
>>> line while getting it to work(without your patch applied)? Knowing Coling likely
>>> yes. But to be sure here...
>>> Stefan
> Ok, sorry for the delayed response. First off, I assume this is requested for
> Lucid, right?
> Also such changes should rather go upstream, to be discussed there and then
> could be accepted back. And for that it seems like we want code like that only
> applied / executed on specific hardware. Which means it would need some sort of
> quirk table code to only be used on that hardware.
> Stefan

Yes, we'd like to target lucid. With regards to a quirks table, we can't 
even identify what's on the other side of this port so a quirks
table won't help us here. This is more of a general discovery hardening
fix that just happens to manifest itself with this synaptics touchpad.

      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=0xffffffffffffffff ]
(ps2_command) libps2.c:224
exit 200070 kseriod(41): -> ps2_command
ps2_command args [return=0xffffffffffffffff ]

According to the comments in psmouse-base.c:

psmouse_probe proper:

  * First, we check if it's a mouse. It should send 0x00 or 0x03
  * in case of an IntelliMouse in 4-byte mode or 0x04 for IM Explorer.
  * Sunrex K8561 IR Keyboard/Mouse reports 0xff on second and subsequent
  * ID queries, probably due to a firmware bug.

         param[0] = 0xa5;
         if (ps2_command(ps2dev, param, PSMOUSE_CMD_GETID))
                 return -1;

and we're getting ff back. Ideally, I'd like to keep a list of all
active serial devices and simply walk that list with device specific
reconnects after resume. The current implementation seems to forget
completely about what's connected and tries to treat it like a fresh


More information about the kernel-team mailing list