Commit 29b01295 authored by Benson Leung's avatar Benson Leung Committed by Greg Kroah-Hartman

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: default avatarHeikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: default avatarBenson Leung <bleung@chromium.org>
Link: https://lore.kernel.org/r/20210129061406.2680146-4-bleung@chromium.orgSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent f5030e25
......@@ -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,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment