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:
Benson Leung 2021-01-28 22:14:03 -08:00 committed by Greg Kroah-Hartman
parent f5030e2526
commit 29b01295a8
2 changed files with 31 additions and 0 deletions

View file

@ -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.

View file

@ -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,