mirror of
https://github.com/torvalds/linux.git
synced 2024-12-12 22:23:55 +00:00
usb: typec: Add typec_partner_set_pd_revision
The partner's PD revision may be resolved later than the port partner registration since the port partner creation may take place once Type-C detects the port has changed state, but before PD communication is completed. Add a setter so that the partner's PD revision can be attached to it once it becomes available. If the revision is set to a valid version (not 0), the setter will also refresh the partner's usb_pd flag and notify on "supports_usb_power_delivery" sysfs property as well. Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Signed-off-by: Benson Leung <bleung@chromium.org> Link: https://lore.kernel.org/r/20210129061406.2680146-4-bleung@chromium.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
f5030e2526
commit
29b01295a8
@ -748,6 +748,36 @@ int typec_partner_set_identity(struct typec_partner *partner)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(typec_partner_set_identity);
|
||||
|
||||
/**
|
||||
* typec_partner_set_pd_revision - Set the PD revision supported by the partner
|
||||
* @partner: The partner to be updated.
|
||||
* @pd_revision: USB Power Delivery Specification Revision supported by partner
|
||||
*
|
||||
* This routine is used to report that the PD revision of the port partner has
|
||||
* become available.
|
||||
*
|
||||
* Returns 0 on success or negative error number on failure.
|
||||
*/
|
||||
int typec_partner_set_pd_revision(struct typec_partner *partner, u16 pd_revision)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (partner->pd_revision == pd_revision)
|
||||
return 0;
|
||||
|
||||
partner->pd_revision = pd_revision;
|
||||
sysfs_notify(&partner->dev.kobj, NULL, "usb_power_delivery_revision");
|
||||
if (pd_revision != 0 && !partner->usb_pd) {
|
||||
partner->usb_pd = 1;
|
||||
sysfs_notify(&partner->dev.kobj, NULL,
|
||||
"supports_usb_power_delivery");
|
||||
}
|
||||
kobject_uevent(&partner->dev.kobj, KOBJ_CHANGE);
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(typec_partner_set_pd_revision);
|
||||
|
||||
/**
|
||||
* typec_partner_set_num_altmodes - Set the number of available partner altmodes
|
||||
* @partner: The partner to be updated.
|
||||
|
@ -126,6 +126,7 @@ struct typec_altmode_desc {
|
||||
enum typec_port_data roles;
|
||||
};
|
||||
|
||||
int typec_partner_set_pd_revision(struct typec_partner *partner, u16 pd_revision);
|
||||
int typec_partner_set_num_altmodes(struct typec_partner *partner, int num_altmodes);
|
||||
struct typec_altmode
|
||||
*typec_partner_register_altmode(struct typec_partner *partner,
|
||||
|
Loading…
Reference in New Issue
Block a user