summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorKonrad Dybcio <konrad.dybcio@oss.qualcomm.com>2025-10-14 18:06:46 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2025-10-22 10:58:31 +0200
commit6bebd9b77726a27e37834acd8f9c0f2cbbe2618b (patch)
tree984e60c4436c9518ef813a9ee356501fb9b6f03b /drivers
parentf83cb615cb7a615f9c15787f914a8eee1c6e93d4 (diff)
usb: typec: ps883x: Rework ps883x_set()
In preparation to extend it with new alt/USB modes, rework the code a bit by changing the flow into a pair of switch statements. Reviewed-by: Jack Pham <jack.pham@oss.qualcomm.com> Signed-off-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com> Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Link: https://patch.msgid.link/20251014-topic-ps883x_usb4-v1-2-e6adb1a4296e@oss.qualcomm.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/usb/typec/mux/ps883x.c73
1 files changed, 38 insertions, 35 deletions
diff --git a/drivers/usb/typec/mux/ps883x.c b/drivers/usb/typec/mux/ps883x.c
index 68f172df7be3..72f1e737ca4b 100644
--- a/drivers/usb/typec/mux/ps883x.c
+++ b/drivers/usb/typec/mux/ps883x.c
@@ -99,44 +99,47 @@ static int ps883x_set(struct ps883x_retimer *retimer, struct typec_retimer_state
int cfg1 = 0x00;
int cfg2 = 0x00;
- if (retimer->orientation == TYPEC_ORIENTATION_NONE ||
- state->mode == TYPEC_STATE_SAFE) {
- return ps883x_configure(retimer, cfg0, cfg1, cfg2);
- }
-
- if (state->alt && state->alt->svid != USB_TYPEC_DP_SID)
- return -EINVAL;
-
if (retimer->orientation == TYPEC_ORIENTATION_REVERSE)
cfg0 |= CONN_STATUS_0_ORIENTATION_REVERSED;
- switch (state->mode) {
- case TYPEC_STATE_USB:
- cfg0 |= CONN_STATUS_0_USB_3_1_CONNECTED;
- break;
-
- case TYPEC_DP_STATE_C:
- cfg1 = CONN_STATUS_1_DP_CONNECTED |
- CONN_STATUS_1_DP_SINK_REQUESTED |
- CONN_STATUS_1_DP_PIN_ASSIGNMENT_C_D |
- CONN_STATUS_1_DP_HPD_LEVEL;
- break;
-
- case TYPEC_DP_STATE_D:
- cfg0 |= CONN_STATUS_0_USB_3_1_CONNECTED;
- cfg1 = CONN_STATUS_1_DP_CONNECTED |
- CONN_STATUS_1_DP_SINK_REQUESTED |
- CONN_STATUS_1_DP_PIN_ASSIGNMENT_C_D |
- CONN_STATUS_1_DP_HPD_LEVEL;
- break;
-
- case TYPEC_DP_STATE_E:
- cfg1 = CONN_STATUS_1_DP_CONNECTED |
- CONN_STATUS_1_DP_HPD_LEVEL;
- break;
-
- default:
- return -EOPNOTSUPP;
+ if (state->alt) {
+ switch (state->alt->svid) {
+ case USB_TYPEC_DP_SID:
+ cfg1 |= CONN_STATUS_1_DP_CONNECTED |
+ CONN_STATUS_1_DP_HPD_LEVEL;
+
+ switch (state->mode) {
+ case TYPEC_DP_STATE_C:
+ cfg1 |= CONN_STATUS_1_DP_SINK_REQUESTED |
+ CONN_STATUS_1_DP_PIN_ASSIGNMENT_C_D;
+ fallthrough;
+ case TYPEC_DP_STATE_D:
+ cfg1 |= CONN_STATUS_0_USB_3_1_CONNECTED;
+ break;
+ default: /* MODE_E */
+ break;
+ }
+ break;
+ default:
+ dev_err(&retimer->client->dev, "Got unsupported SID: 0x%x\n",
+ state->alt->svid);
+ return -EOPNOTSUPP;
+ }
+ } else {
+ switch (state->mode) {
+ case TYPEC_STATE_SAFE:
+ /* USB2 pins don't even go through this chip */
+ case TYPEC_MODE_USB2:
+ break;
+ case TYPEC_STATE_USB:
+ case TYPEC_MODE_USB3:
+ cfg0 |= CONN_STATUS_0_USB_3_1_CONNECTED;
+ break;
+ default:
+ dev_err(&retimer->client->dev, "Got unsupported mode: %lu\n",
+ state->mode);
+ return -EOPNOTSUPP;
+ }
}
return ps883x_configure(retimer, cfg0, cfg1, cfg2);