mirror of
https://github.com/torvalds/linux.git
synced 2026-05-24 07:03:03 +02:00
usb: typec: More API for cable handling
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>
This commit is contained in:
parent
8face9aa57
commit
b66b40ee7d
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user