Commit 2476de82 authored by Prashant Malani's avatar Prashant Malani Committed by Greg Kroah-Hartman

usb: typec: Add retimer handle to port altmode

Just like it does with muxes, the Type-C bus code can update the state
of connected retimers (especially when altmode-related transitions
occur). Add a retimer handle to the port altmode struct to enable this.
Signed-off-by: default avatarPrashant Malani <pmalani@chromium.org>
Reviewed-by: default avatarHeikki Krogerus <heikki.krogerus@linux.intel.com>
Link: https://lore.kernel.org/r/20230112221609.540754-2-pmalani@chromium.orgSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent a30951d3
......@@ -7,11 +7,13 @@
struct bus_type;
struct typec_mux;
struct typec_retimer;
struct altmode {
unsigned int id;
struct typec_altmode adev;
struct typec_mux *mux;
struct typec_retimer *retimer;
enum typec_port_data roles;
......
......@@ -583,6 +583,7 @@ void typec_unregister_altmode(struct typec_altmode *adev)
{
if (IS_ERR_OR_NULL(adev))
return;
typec_retimer_put(to_altmode(adev)->retimer);
typec_mux_put(to_altmode(adev)->mux);
device_unregister(&adev->dev);
}
......@@ -2108,16 +2109,26 @@ typec_port_register_altmode(struct typec_port *port,
{
struct typec_altmode *adev;
struct typec_mux *mux;
struct typec_retimer *retimer;
mux = typec_mux_get(&port->dev, desc);
if (IS_ERR(mux))
return ERR_CAST(mux);
retimer = typec_retimer_get(&port->dev);
if (IS_ERR(retimer)) {
typec_mux_put(mux);
return ERR_CAST(retimer);
}
adev = typec_register_altmode(&port->dev, desc);
if (IS_ERR(adev))
if (IS_ERR(adev)) {
typec_retimer_put(retimer);
typec_mux_put(mux);
else
} else {
to_altmode(adev)->mux = mux;
to_altmode(adev)->retimer = retimer;
}
return adev;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment