Skip to content

Commit

Permalink
usb: typec: More API for cable handling
Browse files Browse the repository at this point in the history
Thunderbolt 3, and probable USB4 too, will need to be able
to get details about the cables. Adding typec_cable_get()
function that the alternate mode drivers can use to gain
access to gain access to the cable.

Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Link: https://lore.kernel.org/r/20191230142611.24921-4-heikki.krogerus@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Heikki Krogerus authored and Greg Kroah-Hartman committed Jan 9, 2020
1 parent 8face9a commit b66b40e
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 0 deletions.
46 changes: 46 additions & 0 deletions drivers/usb/typec/class.c
Original file line number Diff line number Diff line change
Expand Up @@ -834,6 +834,52 @@ static const struct device_type typec_cable_dev_type = {
.release = typec_cable_release,
};

static int cable_match(struct device *dev, void *data)
{
return is_typec_cable(dev);
}

/**
* typec_cable_get - Get a reference to the USB Type-C cable
* @port: The USB Type-C Port the cable is connected to
*
* The caller must decrement the reference count with typec_cable_put() after
* use.
*/
struct typec_cable *typec_cable_get(struct typec_port *port)
{
struct device *dev;

dev = device_find_child(&port->dev, NULL, cable_match);
if (!dev)
return NULL;

return to_typec_cable(dev);
}
EXPORT_SYMBOL_GPL(typec_cable_get);

/**
* typec_cable_get - Decrement the reference count on USB Type-C cable
* @cable: The USB Type-C cable
*/
void typec_cable_put(struct typec_cable *cable)
{
put_device(&cable->dev);
}
EXPORT_SYMBOL_GPL(typec_cable_put);

/**
* typec_cable_is_active - Check is the USB Type-C cable active or passive
* @cable: The USB Type-C Cable
*
* Return 1 if the cable is active or 0 if it's passive.
*/
int typec_cable_is_active(struct typec_cable *cable)
{
return cable->active;
}
EXPORT_SYMBOL_GPL(typec_cable_is_active);

/**
* typec_cable_set_identity - Report result from Discover Identity command
* @cable: The cable updated identity values
Expand Down
4 changes: 4 additions & 0 deletions include/linux/usb/typec.h
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,10 @@ struct typec_cable *typec_register_cable(struct typec_port *port,
struct typec_cable_desc *desc);
void typec_unregister_cable(struct typec_cable *cable);

struct typec_cable *typec_cable_get(struct typec_port *port);
void typec_cable_put(struct typec_cable *cable);
int typec_cable_is_active(struct typec_cable *cable);

struct typec_plug *typec_register_plug(struct typec_cable *cable,
struct typec_plug_desc *desc);
void typec_unregister_plug(struct typec_plug *plug);
Expand Down

0 comments on commit b66b40e

Please sign in to comment.