Re: [PATCH v2 1/3] usb: typec: mux: ps883x: support TYPEC_DP_STATE_F like qmp-combo
From: Jens Glathe
Date: Tue Sep 15 2026 - 01:13:28 EST
Hi Konrad,
On 14.09.26 12:25, Konrad Dybcio wrote:
On 9/14/26 8:05 AM, Jens Glathe via B4 Relay wrote:Acknowledged, copy/paste debris. I refined the patch and tested this one:
From: Jens Glathe <jens.glathe@xxxxxxxxxxxxxxxxxxxxxx>The premise here is entirely wrong, you shouldn't assume wholly
Several docks, including the Lenovo 40B0 and SSK SC220, still send the
legacy TYPEC_DP_STATE_F mode request (deprecated since DisplayPort Alt
Mode spec version 1.0b).
Keep the handling in the existing DP altmode path in ps883x_set() and
mirror qcom-qmp-combo: pin C/E are DP-only, pin D/F are USB3 + DP.
STATE_E is grouped with STATE_C the same way.
different hardware should be programmed the same way
Assisted-by: Grok(xAI):4.6STATE_E must not set the CONN_STATUS_1_DP_PIN_ASSIGNMENT_C_D bit
Signed-off-by: Jens Glathe <jens.glathe@xxxxxxxxxxxxxxxxxxxxxx>
---
drivers/usb/typec/mux/ps883x.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/drivers/usb/typec/mux/ps883x.c b/drivers/usb/typec/mux/ps883x.c
index 64e0a61b776a1..c185d8897e3a4 100644
--- a/drivers/usb/typec/mux/ps883x.c
+++ b/drivers/usb/typec/mux/ps883x.c
@@ -205,21 +205,24 @@ static int ps883x_set(struct ps883x_retimer *retimer, struct typec_retimer_state
cfg1 |= CONN_STATUS_1_DP_CONNECTED |
CONN_STATUS_1_DP_HPD_LEVEL;
- switch (state->mode) {
+ switch (state->mode) {
+ /* DP + USB3 (pin D, and legacy pin F) */
case TYPEC_DP_STATE_D:
+ case TYPEC_DP_STATE_F:
cfg0 |= CONN_STATUS_0_USB_3_1_CONNECTED;
fallthrough;
+ /* DP only (pin C, and pin E) */
case TYPEC_DP_STATE_C:
+ case TYPEC_DP_STATE_E:
I don't know if that's the case for F too, possibly.
Setting DP_SINK_REQUESTED seems to be valid on _E.
cfg1 |= CONN_STATUS_1_DP_SINK_REQUESTED |Stray change
CONN_STATUS_1_DP_PIN_ASSIGNMENT_C_D;
break;
- default: /* MODE_E */
+ default:
break;
}
break;
case USB_TYPEC_TBT_SID:
tb_data = state->data;
-
/* Unconditional */
cfg2 |= CONN_STATUS_2_TBT_CONNECTED;
Konrad
diff --git a/drivers/usb/typec/mux/ps883x.c b/drivers/usb/typec/mux/ps883x.c
index 64e0a61b776a1..a5696aef054ee 100644
--- a/drivers/usb/typec/mux/ps883x.c
+++ b/drivers/usb/typec/mux/ps883x.c
@@ -207,6 +207,7 @@ static int ps883x_set(struct ps883x_retimer *retimer, struct typec_retimer_state
switch (state->mode) {
case TYPEC_DP_STATE_D:
+ case TYPEC_DP_STATE_F:
cfg0 |= CONN_STATUS_0_USB_3_1_CONNECTED;
fallthrough;
case TYPEC_DP_STATE_C:
This will be in V3 with a corresponding commit message.
with best regards
Jens