On latest kernel, I made this temporary patch, and it works for me. The 
maintainers do not allow it, as it can add several seconds to boot time, but 
you can use it until I find a better fix.
The patch:

`From bded4ccba6f762fa6cc2fd711da48b8e830b0fcc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Rapha=C3=ABl=20Larocque?= <[email protected]>
Date: Tue, 2 Jun 2026 18:53:41 -0400
Subject: [PATCH] Input: synaptics - retry SMBus intertouch setup when
 companion is not ready
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

On some machines (here: Lenovo ThinkPad T440p 20AWS0H800),
the SMBus companion device is not ready
by the time psmouse probes the Synaptics touchpad
during early boot.  synaptics_setup_intertouch() returns -EAGAIN in
this situation, but synaptics_init() previously treated this the same
as any other error and fell through immediately to PS/2 mode.  As a
result, the touchpad and TrackPoint were unresponsive for several
minutes after a cold boot, until an internal reconnect cycle (which
already carries retry logic in synaptics_reconnect()) eventually
succeeded.

Fix this by adding an exponential back-off retry loop in synaptics_init()
when synaptics_setup_intertouch() returns -EAGAIN: clean up the failed
state, sleep for 500 ms on the first attempt doubling each time up to
4000 ms, then retry.  The worst-case added latency at boot is ~7.5 s
(500 + 1000 + 2000 + 4000 ms), and only for hardware that actually
reports SYN_CAP_INTERTOUCH.  The pattern mirrors what
synaptics_reconnect() already does after resume.

Tested-by: Raphaël Larocque <[email protected]>
Signed-off-by: Raphaël Larocque <[email protected]>
---
 drivers/input/mouse/synaptics.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
index c70502e24031..5c1bfff2b16c 100644
--- a/drivers/input/mouse/synaptics.c
+++ b/drivers/input/mouse/synaptics.c
@@ -1918,6 +1918,23 @@ int synaptics_init(struct psmouse *psmouse)
                }
 
                error = synaptics_setup_intertouch(psmouse, &info, true);
+               if (error == -EAGAIN) {
+                       /*
+                        * On some systems (e.g. ThinkPad T440p) the SMBus
+                        * companion device is not yet ready at boot time.
+                        * Clean up and retry with exponential back-off,
+                        * mirroring synaptics_reconnect().
+                        */
+                       unsigned int delay = 500;
+
+                       do {
+                               psmouse_smbus_cleanup(psmouse);
+                               msleep(delay);
+                               error = synaptics_setup_intertouch(psmouse, 
&info, true);
+                               delay *= 2;
+                       } while (error == -EAGAIN && delay <= 4000);
+               }
+
                if (!error)
                        return PSMOUSE_SYNAPTICS_SMBUS;
        }
-- 
2.53.0`

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/787738

Title:
  [Thinkpad X220/E220s/E420s] trackpoint/trackpoint displays odd
  behaviour

To manage notifications about this bug go to:
https://bugs.launchpad.net/linux/+bug/787738/+subscriptions


-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to