[PATCH v2 03/22] usb: typec: tipd: Register a USB4 port mode for CD321x
Sven Peter
sven at kernel.org
Sun Sep 6 11:36:26 PDT 2026
Register a USB4 mode next to the DP and Thunderbolt alternate modes so
that negotiated USB4 partner modes can be linked to the port. Identify
it using TYPEC_MODE_KIND_USB4 without an SVID or mode index.
Signed-off-by: Sven Peter <sven at kernel.org>
---
drivers/usb/typec/tipd/core.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/drivers/usb/typec/tipd/core.c b/drivers/usb/typec/tipd/core.c
index f76f563dc42b..8c7f93d4270e 100644
--- a/drivers/usb/typec/tipd/core.c
+++ b/drivers/usb/typec/tipd/core.c
@@ -211,6 +211,7 @@ struct cd321x {
struct typec_altmode *port_altmode_dp;
struct typec_altmode *port_altmode_tbt;
+ struct typec_altmode *port_altmode_usb4;
struct typec_mux *mux;
struct typec_mux_state state;
@@ -1312,6 +1313,18 @@ static int cd321x_register_port_altmodes(struct cd321x *cd321x)
}
cd321x->port_altmode_tbt = amode;
+ memset(&desc, 0, sizeof(desc));
+ desc.mode_kind = TYPEC_MODE_KIND_USB4;
+ amode = typec_port_register_altmode(cd321x->tps.port, &desc);
+ if (IS_ERR(amode)) {
+ typec_unregister_altmode(cd321x->port_altmode_dp);
+ typec_unregister_altmode(cd321x->port_altmode_tbt);
+ cd321x->port_altmode_dp = NULL;
+ cd321x->port_altmode_tbt = NULL;
+ return PTR_ERR(amode);
+ }
+ cd321x->port_altmode_usb4 = amode;
+
return 0;
}
@@ -1347,8 +1360,10 @@ cd321x_register_port(struct tps6598x *tps, struct fwnode_handle *fwnode)
err_unregister_altmodes:
typec_unregister_altmode(cd321x->port_altmode_dp);
typec_unregister_altmode(cd321x->port_altmode_tbt);
+ typec_unregister_altmode(cd321x->port_altmode_usb4);
cd321x->port_altmode_dp = NULL;
cd321x->port_altmode_tbt = NULL;
+ cd321x->port_altmode_usb4 = NULL;
err_unregister_port:
typec_unregister_port(tps->port);
return ret;
@@ -1371,6 +1386,8 @@ cd321x_unregister_port(struct tps6598x *tps)
cd321x->port_altmode_dp = NULL;
typec_unregister_altmode(cd321x->port_altmode_tbt);
cd321x->port_altmode_tbt = NULL;
+ typec_unregister_altmode(cd321x->port_altmode_usb4);
+ cd321x->port_altmode_usb4 = NULL;
typec_unregister_port(tps->port);
}
--
2.55.0
More information about the linux-arm-kernel
mailing list