Commit 183b194d authored by Abhishek Pandit-Subedi's avatar Abhishek Pandit-Subedi Committed by Greg Kroah-Hartman
Browse files

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: default avatarAbhishek Pandit-Subedi <abhishekpandit@chromium.org>
Reviewed-by: default avatarHeikki Krogerus <heikki.krogerus@linux.intel.com>
Reviewed-by: default avatarBenson Leung <bleung@chromium.org>
Link: https://lore.kernel.org/r/20241213153543.v5.3.I794566684ab2965e209f326b08232006eff333f8@changeid


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 100e2573
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -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);
+2 −0
Original line number Diff line number Diff line
@@ -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);