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

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.org


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent a30951d3
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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;

+13 −2
Original line number Diff line number Diff line
@@ -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;
}