Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 519f15d5 authored by Heikki Krogerus's avatar Heikki Krogerus Committed by Will McVicker
Browse files

UPSTREAM: usb: typec: Rationalize the API for the muxes



Since with accessory modes there is no need for additional
identification when requesting a handle to the mux, we can
replace the second parameter that is passed to the
typec_mux_get() function with a pointer to alternate mode
description structure, and simply passing NULL with
accessory modes.

This change means the naming of the mux device connections
can be updated. Alternate and Accessory Modes will both be
handled with muxes named "mode-switch", and the orientation
switches will be named "orientation-switch".

Future identification of the alternate modes will be later
done using device property "svid" of the mux.

Bug: 150877929
Reviewed-by: default avatarHans de Goede <hdegoede@redhat.com>
Reviewed-by: default avatarAndy Shevchenko <andy.shevchenko@gmail.com>
Reviewed-by: default avatarJun Li <jun.li@nxp.com>
Signed-off-by: default avatarHeikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Change-Id: Iafd151d0c0dab6847a35ac222d0d209c77096cd1
Signed-off-by: default avatarWill McVicker <willmcvicker@google.com>
(cherry picked from commit 540bfab7fbff6ab9092bb28aaf804af0b4d576ae)
parent b0e413dd
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
@@ -1496,11 +1496,8 @@ typec_port_register_altmode(struct typec_port *port,
{
	struct typec_altmode *adev;
	struct typec_mux *mux;
	char id[10];

	sprintf(id, "id%04xm%02x", desc->svid, desc->mode);

	mux = typec_mux_get(&port->dev, id);
	mux = typec_mux_get(&port->dev, desc);
	if (IS_ERR(mux))
		return ERR_CAST(mux);

@@ -1594,7 +1591,7 @@ struct typec_port *typec_register_port(struct device *parent,
		return ERR_PTR(ret);
	}

	port->mux = typec_mux_get(&port->dev, "typec-mux");
	port->mux = typec_mux_get(&port->dev, NULL);
	if (IS_ERR(port->mux)) {
		ret = PTR_ERR(port->mux);
		put_device(&port->dev);
+6 −4
Original line number Diff line number Diff line
@@ -48,7 +48,7 @@ struct typec_switch *typec_switch_get(struct device *dev)
	struct typec_switch *sw;

	mutex_lock(&switch_lock);
	sw = device_connection_find_match(dev, "typec-switch", NULL,
	sw = device_connection_find_match(dev, "orientation-switch", NULL,
					  typec_switch_match);
	if (!IS_ERR_OR_NULL(sw)) {
		WARN_ON(!try_module_get(sw->dev->driver->owner));
@@ -128,19 +128,21 @@ static void *typec_mux_match(struct device_connection *con, int ep, void *data)
/**
 * typec_mux_get - Find USB Type-C Multiplexer
 * @dev: The caller device
 * @name: Mux identifier
 * @desc: Alt Mode description
 *
 * Finds a mux linked to the caller. This function is primarily meant for the
 * Type-C drivers. Returns a reference to the mux on success, NULL if no
 * matching connection was found, or ERR_PTR(-EPROBE_DEFER) when a connection
 * was found but the mux has not been enumerated yet.
 */
struct typec_mux *typec_mux_get(struct device *dev, const char *name)
struct typec_mux *typec_mux_get(struct device *dev,
				const struct typec_altmode_desc *desc)
{
	struct typec_mux *mux;

	mutex_lock(&mux_lock);
	mux = device_connection_find_match(dev, name, NULL, typec_mux_match);
	mux = device_connection_find_match(dev, "mode-switch", (void *)desc,
					   typec_mux_match);
	if (!IS_ERR_OR_NULL(mux)) {
		WARN_ON(!try_module_get(mux->dev->driver->owner));
		get_device(mux->dev);
+2 −1
Original line number Diff line number Diff line
@@ -47,7 +47,8 @@ void typec_switch_put(struct typec_switch *sw);
int typec_switch_register(struct typec_switch *sw);
void typec_switch_unregister(struct typec_switch *sw);

struct typec_mux *typec_mux_get(struct device *dev, const char *name);
struct typec_mux *
typec_mux_get(struct device *dev, const struct typec_altmode_desc *desc);
void typec_mux_put(struct typec_mux *mux);
int typec_mux_register(struct typec_mux *mux);
void typec_mux_unregister(struct typec_mux *mux);