From: Benson Leung <bleung@google.com>
To: Jameson Thies <jthies@google.com>
Cc: heikki.krogerus@linux.intel.com, linux-usb@vger.kernel.org,
pmalani@chromium.org, abhishekpandit@chromium.org,
andersson@kernel.org, dmitry.baryshkov@linaro.org,
fabrice.gasnier@foss.st.com, gregkh@linuxfoundation.org,
hdegoede@redhat.com, neil.armstrong@linaro.org,
rajaram.regupathy@intel.com, saranya.gopal@intel.com,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 4/4] usb: typec: ucsi: Register SOP' alternate modes with cable plug
Date: Fri, 23 Feb 2024 01:47:37 +0000 [thread overview]
Message-ID: <Zdf5OQectSrBf_sn@google.com> (raw)
In-Reply-To: <20240223010328.2826774-5-jthies@google.com>
[-- Attachment #1: Type: text/plain, Size: 4275 bytes --]
Hi Jameson,
On Fri, Feb 23, 2024 at 01:03:28AM +0000, Jameson Thies wrote:
> Register SOP' alternate modes with a Type-C Connector Class cable plug.
> Alternate modes are queried from the PPM using the GET_ALTERNATE_MODES
> command with recipient set to SOP'.
>
Is there a plan to do the same for the SOP Double Prime for advanced active
cables with two plugs?
> Signed-off-by: Jameson Thies <jthies@google.com>
Other than that question,
Reviewed-by: Benson Leung <bleung@chromium.org>
> ---
> Tested on v6.6 kernel. SOP' GET_ALTERNATE_MODE responses from the PPM
> are correctly registered as to the cable plug.
> redrix-rev3 /sys/class/typec # ls port2-cable/port2-plug0/
> device port2-plug0.0 port2-plug0.1 power subsystem uevent
>
> drivers/usb/typec/ucsi/ucsi.c | 60 +++++++++++++++++++++++++++++++++++
> drivers/usb/typec/ucsi/ucsi.h | 2 ++
> 2 files changed, 62 insertions(+)
>
> diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c
> index 6d6443e61faa..9b541547917b 100644
> --- a/drivers/usb/typec/ucsi/ucsi.c
> +++ b/drivers/usb/typec/ucsi/ucsi.c
> @@ -399,6 +399,27 @@ static int ucsi_register_altmode(struct ucsi_connector *con,
>
> con->partner_altmode[i] = alt;
> break;
> + case UCSI_RECIPIENT_SOP_P:
> + i = ucsi_next_altmode(con->plug_altmode);
> + if (i < 0) {
> + ret = i;
> + goto err;
> + }
> +
> + ret = ucsi_altmode_next_mode(con->plug_altmode, desc->svid);
> + if (ret < 0)
> + return ret;
> +
> + desc->mode = ret;
> +
> + alt = typec_plug_register_altmode(con->plug, desc);
> + if (IS_ERR(alt)) {
> + ret = PTR_ERR(alt);
> + goto err;
> + }
> +
> + con->plug_altmode[i] = alt;
> + break;
> default:
> return -EINVAL;
> }
> @@ -566,6 +587,9 @@ static void ucsi_unregister_altmodes(struct ucsi_connector *con, u8 recipient)
> case UCSI_RECIPIENT_SOP:
> adev = con->partner_altmode;
> break;
> + case UCSI_RECIPIENT_SOP_P:
> + adev = con->plug_altmode;
> + break;
> default:
> return;
> }
> @@ -801,6 +825,33 @@ static void ucsi_unregister_partner_pdos(struct ucsi_connector *con)
> con->partner_pd = NULL;
> }
>
> +static int ucsi_register_plug(struct ucsi_connector *con)
> +{
> + struct typec_plug *plug;
> + struct typec_plug_desc desc = {.index = TYPEC_PLUG_SOP_P};
> +
> + plug = typec_register_plug(con->cable, &desc);
> + if (IS_ERR(plug)) {
> + dev_err(con->ucsi->dev,
> + "con%d: failed to register plug (%ld)\n", con->num,
> + PTR_ERR(plug));
> + return PTR_ERR(plug);
> + }
> +
> + con->plug = plug;
> + return 0;
> +}
> +
> +static void ucsi_unregister_plug(struct ucsi_connector *con)
> +{
> + if (!con->plug)
> + return;
> +
> + ucsi_unregister_altmodes(con, UCSI_RECIPIENT_SOP_P);
> + typec_unregister_plug(con->plug);
> + con->plug = NULL;
> +}
> +
> static int ucsi_register_cable(struct ucsi_connector *con)
> {
> struct typec_cable *cable;
> @@ -842,6 +893,7 @@ static void ucsi_unregister_cable(struct ucsi_connector *con)
> if (!con->cable)
> return;
>
> + ucsi_unregister_plug(con);
> typec_unregister_cable(con->cable);
> con->cable = NULL;
> memset(&con->cable_identity, 0, sizeof(con->cable_identity));
> @@ -1046,6 +1098,14 @@ static int ucsi_check_cable(struct ucsi_connector *con)
> if (ret < 0)
> return ret;
>
> + ret = ucsi_register_plug(con);
> + if (ret < 0)
> + return ret;
> +
> + ret = ucsi_register_altmodes(con, UCSI_RECIPIENT_SOP_P);
> + if (ret < 0)
> + return ret;
> +
> return 0;
> }
>
> diff --git a/drivers/usb/typec/ucsi/ucsi.h b/drivers/usb/typec/ucsi/ucsi.h
> index b89fae82e8ce..32daf5f58650 100644
> --- a/drivers/usb/typec/ucsi/ucsi.h
> +++ b/drivers/usb/typec/ucsi/ucsi.h
> @@ -429,9 +429,11 @@ struct ucsi_connector {
> struct typec_port *port;
> struct typec_partner *partner;
> struct typec_cable *cable;
> + struct typec_plug *plug;
>
> struct typec_altmode *port_altmode[UCSI_MAX_ALTMODES];
> struct typec_altmode *partner_altmode[UCSI_MAX_ALTMODES];
> + struct typec_altmode *plug_altmode[UCSI_MAX_ALTMODES];
>
> struct typec_capability typec_cap;
>
> --
> 2.44.0.rc0.258.g7320e95886-goog
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
next prev parent reply other threads:[~2024-02-23 1:47 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-23 1:03 [PATCH 0/4] usb: typec: ucsi: Expand SOP/SOP' Discovery Jameson Thies
2024-02-23 1:03 ` [PATCH 1/4] usb: typec: ucsi: Clean up UCSI_CABLE_PROP macros Jameson Thies
2024-02-23 1:24 ` Benson Leung
2024-02-23 1:43 ` Prashant Malani
2024-02-23 5:37 ` Dmitry Baryshkov
2024-02-26 8:48 ` Heikki Krogerus
2024-02-27 0:29 ` Jameson Thies
2024-02-23 1:03 ` [PATCH 2/4] usb: typec: ucsi: Register cables based on GET_CABLE_PROPERTY Jameson Thies
2024-02-23 1:29 ` Benson Leung
2024-02-23 1:45 ` Prashant Malani
2024-02-23 5:42 ` Dmitry Baryshkov
2024-02-26 9:05 ` Heikki Krogerus
2024-02-23 1:03 ` [PATCH 3/4] usb: typec: ucsi: Register SOP/SOP' Discover Identity Responses Jameson Thies
2024-02-23 1:34 ` Benson Leung
2024-02-23 5:52 ` Dmitry Baryshkov
2024-02-26 9:06 ` Heikki Krogerus
2024-02-26 18:02 ` Prashant Malani
2024-02-27 0:38 ` Jameson Thies
2024-02-23 1:03 ` [PATCH 4/4] usb: typec: ucsi: Register SOP' alternate modes with cable plug Jameson Thies
2024-02-23 1:47 ` Benson Leung [this message]
2024-02-23 18:40 ` Prashant Malani
2024-02-26 9:07 ` Heikki Krogerus
2024-02-27 0:44 ` Jameson Thies
2024-02-23 5:34 ` [PATCH 0/4] usb: typec: ucsi: Expand SOP/SOP' Discovery Dmitry Baryshkov
2024-02-27 0:28 ` Jameson Thies
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=Zdf5OQectSrBf_sn@google.com \
--to=bleung@google.com \
--cc=abhishekpandit@chromium.org \
--cc=andersson@kernel.org \
--cc=dmitry.baryshkov@linaro.org \
--cc=fabrice.gasnier@foss.st.com \
--cc=gregkh@linuxfoundation.org \
--cc=hdegoede@redhat.com \
--cc=heikki.krogerus@linux.intel.com \
--cc=jthies@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=neil.armstrong@linaro.org \
--cc=pmalani@chromium.org \
--cc=rajaram.regupathy@intel.com \
--cc=saranya.gopal@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.