From: Heikki Krogerus <heikki.krogerus@linux.intel.com>
To: Andrei Kuchynski <akuchynski@chromium.org>
Cc: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>,
Benson Leung <bleung@chromium.org>,
Jameson Thies <jthies@google.com>,
Tzung-Bi Shih <tzungbi@kernel.org>,
linux-usb@vger.kernel.org, chrome-platform@lists.linux.dev,
Guenter Roeck <groeck@chromium.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>,
"Christian A. Ehrhardt" <lk@c--e.de>,
Venkat Jayaraman <venkat.jayaraman@intel.com>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v1 1/5] usb: typec: Add alt_mode_override field to port property
Date: Wed, 20 Aug 2025 13:53:23 +0300 [thread overview]
Message-ID: <aKWpI0RhPR2mFlql@kuha.fi.intel.com> (raw)
In-Reply-To: <20250814184455.723170-2-akuchynski@chromium.org>
On Thu, Aug 14, 2025 at 06:44:51PM +0000, Andrei Kuchynski wrote:
> This new field in the port properties dictates whether the Platform Policy
> Manager (PPM) allows the OS Policy Manager (OPM) to change the currently
> active, negotiated alternate mode.
>
> Signed-off-by: Andrei Kuchynski <akuchynski@chromium.org>
> ---
> drivers/usb/typec/class.c | 14 +++++++++++---
> drivers/usb/typec/class.h | 2 ++
> include/linux/usb/typec.h | 1 +
> 3 files changed, 14 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/usb/typec/class.c b/drivers/usb/typec/class.c
> index 67a533e35150..a72325ff099a 100644
> --- a/drivers/usb/typec/class.c
> +++ b/drivers/usb/typec/class.c
> @@ -459,9 +459,16 @@ 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 (!is_typec_port(adev->dev.parent) &&
> - (!adev->ops || !adev->ops->activate))
> - return 0444;
> + if (!is_typec_port(adev->dev.parent)) {
> + struct typec_partner *partner =
> + to_typec_partner(adev->dev.parent);
That looks a bit unnecessary. Also, can't the altmode be a plug alt mode?
> + struct typec_port *port =
> + to_typec_port(partner->dev.parent);
> +
> + if (!port->alt_mode_override || !adev->ops ||
> + !adev->ops->activate)
> + return 0444;
> + }
How about:
struct typec_altmode *adev = to_typec_altmode(kobj_to_dev(kobj));
struct typec_port *port = typec_altmode2port(adev);
if (attr == &dev_attr_active.attr) {
if (!is_typec_port(adev->dev.parent)) {
if (!port->alt_mode_override || !adev->ops || !adev->ops->activate)
return 0444;
}
}
> return attr->mode;
> }
> @@ -2681,6 +2688,7 @@ struct typec_port *typec_register_port(struct device *parent,
> }
>
> port->pd = cap->pd;
> + port->alt_mode_override = cap->alt_mode_override;
This needs to be enabled by default:
port->alt_mode_override = !cap->no_mode_control;
> ret = device_add(&port->dev);
> if (ret) {
> diff --git a/drivers/usb/typec/class.h b/drivers/usb/typec/class.h
> index db2fe96c48ff..f05d9201c233 100644
> --- a/drivers/usb/typec/class.h
> +++ b/drivers/usb/typec/class.h
> @@ -80,6 +80,8 @@ struct typec_port {
> */
> struct device *usb2_dev;
> struct device *usb3_dev;
> +
> + bool alt_mode_override;
s/alt_mode_override/mode_control/ ?
> };
>
> #define to_typec_port(_dev_) container_of(_dev_, struct typec_port, dev)
> diff --git a/include/linux/usb/typec.h b/include/linux/usb/typec.h
> index 252af3f77039..6e09e68788dd 100644
> --- a/include/linux/usb/typec.h
> +++ b/include/linux/usb/typec.h
> @@ -304,6 +304,7 @@ struct typec_capability {
> enum typec_accessory accessory[TYPEC_MAX_ACCESSORY];
> unsigned int orientation_aware:1;
> u8 usb_capability;
> + bool alt_mode_override;
>
> struct fwnode_handle *fwnode;
> void *driver_data;
> --
> 2.51.0.rc0.215.g125493bb4a-goog
--
heikki
next prev parent reply other threads:[~2025-08-20 10:53 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-14 18:44 [PATCH v1 0/5] USB Type-C alternate mode priorities Andrei Kuchynski
2025-08-14 18:44 ` [PATCH v1 1/5] usb: typec: Add alt_mode_override field to port property Andrei Kuchynski
2025-08-20 10:53 ` Heikki Krogerus [this message]
2025-08-21 14:19 ` Andrei Kuchynski
2025-08-14 18:44 ` [PATCH v1 2/5] platform/chrome: cros_ec_typec: Set alt_mode_override flag Andrei Kuchynski
2025-08-14 18:44 ` [PATCH v1 3/5] usb: typec: ucsi: " Andrei Kuchynski
2025-08-20 10:53 ` Heikki Krogerus
2025-08-14 18:44 ` [PATCH v1 4/5] usb: typec: Implement alternate mode priority handling Andrei Kuchynski
2025-08-21 10:09 ` Heikki Krogerus
2025-08-21 11:14 ` Heikki Krogerus
2025-08-22 12:52 ` Andrei Kuchynski
2025-08-14 18:44 ` [PATCH v1 5/5] usb: typec: Expose alternate mode priority via sysfs Andrei Kuchynski
2025-08-21 7:36 ` Heikki Krogerus
2025-08-21 14:44 ` Andrei Kuchynski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aKWpI0RhPR2mFlql@kuha.fi.intel.com \
--to=heikki.krogerus@linux.intel.com \
--cc=abhishekpandit@chromium.org \
--cc=akuchynski@chromium.org \
--cc=bleung@chromium.org \
--cc=chrome-platform@lists.linux.dev \
--cc=dmitry.baryshkov@oss.qualcomm.com \
--cc=gregkh@linuxfoundation.org \
--cc=groeck@chromium.org \
--cc=jthies@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=lk@c--e.de \
--cc=tzungbi@kernel.org \
--cc=venkat.jayaraman@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.