[PATCH v3 0/3] usb: typec: ps883x: fixes for older Thunderbolt 4 / USB4 docks

From: Jens Glathe via B4 Relay

Date: Wed Sep 16 2026 - 15:45:34 EST


On Qualcomm X1E80100 / X1P42100 platforms using the Parade PS883x
retimer, connecting USB4-capable docks such as the Lenovo 40B0 via a
regular Type-C cable (Type-C fallback mode) often results in working
USB but no DisplayPort output.

This series addresses the issue with three driver-only changes:

- Support the legacy TYPEC_DP_STATE_F request (deprecated since DP Alt
Mode 1.0b) that docks such as the 40B0 and SSK SC220 still send.
Handle it in the existing DP altmode path in ps883x_set(). F is
programmed like D; E is unchanged.

- Add a post-configuration delay after writing the connection-status
registers so the analog front-end can settle. This makes DP Alt Mode
hotplug reliable on the 40B0.

- On platforms whose USB4 / DP-tunneling stack is not ready yet, reject
TYPEC_MODE_USB4 with -EOPNOTSUPP. That forces the Type-C stack to
fall back to USB3 + DP Alt Mode. The quirk is a machine-compatible
table inside the driver, not a DT property.

This is a temporary workaround until full USB4 DP tunneling support is
available in the X1E USB4 controller and qmp-combo PHY stack.

As an additional observation, the same dock with a Type-C cable works
well on Thinkpad X13s, Thinkbook 16 G7 QOY and Ideapad 5 14Q8X9, which
do not use this retimer.

To: Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx>
To: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
To: Abel Vesa <abelvesa@xxxxxxxxxx>
To: Bjorn Andersson <andersson@xxxxxxxxxx>
To: Konrad Dybcio <konradybcio@xxxxxxxxxx>
To: Sebastian Reichel <sre@xxxxxxxxxx>
Cc: linux-usb@xxxxxxxxxxxxxxx
Cc: linux-kernel@xxxxxxxxxxxxxxx
Cc: linux-arm-msm@xxxxxxxxxxxxxxx
Cc: stable@xxxxxxxxxxxxxxx
Cc: Dr. David Alan Gilbert <dave@xxxxxxxxxxx>
Cc: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxxxxxxxx>

Assisted-by: Grok(xAI):4.6
Signed-off-by: Jens Glathe <jens.glathe@xxxxxxxxxxxxxxxxxxxxxx>
---
Changes in v3:
- reduced the dp logic changein ps883x_set() to only adding
TYPEC_DP_STATE_F handling grouped with TYPEC_DP_STATE_D.
- picked up Tested-by tag from David, thanks for the re-test.
- Link to v2: https://lore.kernel.org/r/20260914-ps883x-disable-usb4-v2-0-523c32b4e4d7@xxxxxxxxxxxxxxxxxxxxxx

Changes in v2:
- Drop the parade,disable-usb4 DT property, bindings and board DTS
changes (Sebastian Reichel, Krzysztof Kozlowski). DT describes
hardware; incomplete software support is not a board property.
- Disable USB4 from the driver via of_machine_is_compatible() for
qcom,x1e80100, qcom,x1p42100, qcom,hamoa and qcom,purwa. The quirk
stays kernel-contained and can be dropped later without ABI.
- Keep DP altmode handling in the existing ps883x_set() path instead
of extracting a helper (Konrad Dybcio). Treat STATE_F like STATE_D
and STATE_E like STATE_C, matching qcom-qmp-combo.
- Replace usleep_range(20000, 30000) with fsleep(30000) and document
why the delay is required (Heikki Krogerus).
- Drop the per-event "USB4 disabled via DT property" log; print once
at probe when the quirk is active.
- Link to v1: https://lore.kernel.org/r/20260718-ps883x-disable-usb4-v1-0-cec86d0b909e@xxxxxxxxxxxxxxxxxxxxxx

---
Jens Glathe (3):
usb: typec: mux: ps883x: support TYPEC_DP_STATE_F
usb: typec: mux: ps883x: add a delay after writing config regs
usb: typec: mux: ps883x: disable USB4 on incomplete USB4 platforms

drivers/usb/typec/mux/ps883x.c | 48 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 48 insertions(+)
---
base-commit: 601057b3eec13d1f37e5b45dd1410facd7b1bdeb
change-id: 20260718-ps883x-disable-usb4-19b0fc13b5ab

Best regards,
--
Jens Glathe <jens.glathe@xxxxxxxxxxxxxxxxxxxxxx>