mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
usb: typec: Make active on port altmode writable
The active property of port altmode should be writable (to prevent or allow partner altmodes from entering) and needs to be part of typec_altmode_desc so we can initialize the port to an inactive state if desired. Signed-off-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org> Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Reviewed-by: Benson Leung <bleung@chromium.org> Link: https://lore.kernel.org/r/20241213153543.v5.3.I794566684ab2965e209f326b08232006eff333f8@changeid Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
100e257386
commit
183b194d8f
@@ -458,7 +458,8 @@ static umode_t typec_altmode_attr_is_visible(struct kobject *kobj,
|
||||
struct typec_altmode *adev = to_typec_altmode(kobj_to_dev(kobj));
|
||||
|
||||
if (attr == &dev_attr_active.attr)
|
||||
if (!adev->ops || !adev->ops->activate)
|
||||
if (!is_typec_port(adev->dev.parent) &&
|
||||
(!adev->ops || !adev->ops->activate))
|
||||
return 0444;
|
||||
|
||||
return attr->mode;
|
||||
@@ -563,7 +564,7 @@ typec_register_altmode(struct device *parent,
|
||||
|
||||
if (is_port) {
|
||||
alt->attrs[3] = &dev_attr_supported_roles.attr;
|
||||
alt->adev.active = true; /* Enabled by default */
|
||||
alt->adev.active = !desc->inactive; /* Enabled by default */
|
||||
}
|
||||
|
||||
sprintf(alt->group_name, "mode%d", desc->mode);
|
||||
|
||||
@@ -140,6 +140,7 @@ int typec_cable_set_identity(struct typec_cable *cable);
|
||||
* @mode: Index of the Mode
|
||||
* @vdo: VDO returned by Discover Modes USB PD command
|
||||
* @roles: Only for ports. DRP if the mode is available in both roles
|
||||
* @inactive: Only for ports. Make this port inactive (default is active).
|
||||
*
|
||||
* Description of an Alternate Mode which a connector, cable plug or partner
|
||||
* supports.
|
||||
@@ -150,6 +151,7 @@ struct typec_altmode_desc {
|
||||
u32 vdo;
|
||||
/* Only used with ports */
|
||||
enum typec_port_data roles;
|
||||
bool inactive;
|
||||
};
|
||||
|
||||
void typec_partner_set_pd_revision(struct typec_partner *partner, u16 pd_revision);
|
||||
|
||||
Reference in New Issue
Block a user