From: Heikki Krogerus <heikki.krogerus@linux.intel.com>
To: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Cc: "Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"Bryan O'Donoghue" <bryan.odonoghue@linaro.org>,
"Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>,
"Bjorn Andersson" <andersson@kernel.org>,
"Konrad Dybcio" <konradybcio@kernel.org>,
linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-arm-msm@vger.kernel.org
Subject: Re: [PATCH 7/8] usb: typec: ucsi: yoga-c630: handle USB / HPD messages to set port orientation
Date: Tue, 24 Jun 2025 12:20:18 +0300 [thread overview]
Message-ID: <aFpt0j21dOWAnNvR@kuha.fi.intel.com> (raw)
In-Reply-To: <20250621-c630-ucsi-v1-7-a86de5e11361@oss.qualcomm.com>
On Sat, Jun 21, 2025 at 09:13:02PM +0300, Dmitry Baryshkov wrote:
> Parse USB / HPD messages from EC in order to set the orientation of the
> corresponding Type-C port, letting connected USB 3 devices to enjoy
> SuperSpeed connection rather than beign limited to HighSpeed only (if
> the orientation didn't match).
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> ---
> drivers/usb/typec/ucsi/ucsi_yoga_c630.c | 42 +++++++++++++++++++++++++++++++++
> 1 file changed, 42 insertions(+)
>
> diff --git a/drivers/usb/typec/ucsi/ucsi_yoga_c630.c b/drivers/usb/typec/ucsi/ucsi_yoga_c630.c
> index 76afd128d42a2573ff55433f815c2773462a6426..f85170417d19cdc5ae39a15e2f97010259ef12f6 100644
> --- a/drivers/usb/typec/ucsi/ucsi_yoga_c630.c
> +++ b/drivers/usb/typec/ucsi/ucsi_yoga_c630.c
> @@ -7,15 +7,25 @@
> */
> #include <linux/auxiliary_bus.h>
> #include <linux/bitops.h>
> +#include <linux/bitfield.h>
> #include <linux/completion.h>
> #include <linux/container_of.h>
> #include <linux/module.h>
> #include <linux/notifier.h>
> #include <linux/string.h>
> #include <linux/platform_data/lenovo-yoga-c630.h>
> +#include <linux/usb/typec_dp.h>
>
> #include "ucsi.h"
>
> +#define LENOVO_EC_USB_MUX 0x08
> +
> +#define USB_MUX_MUXC GENMASK(1, 0)
> +#define USB_MUX_CCST GENMASK(3, 2)
> +#define USB_MUX_DPPN GENMASK(7, 4)
> +#define USB_MUX_HPDS BIT(8)
> +#define USB_MUX_HSFL GENMASK(11, 9)
> +
> struct yoga_c630_ucsi {
> struct yoga_c630_ec *ec;
> struct ucsi *ucsi;
> @@ -144,6 +154,12 @@ static bool yoga_c630_ucsi_update_altmodes(struct ucsi *ucsi,
> return false;
> }
>
> +static void yoga_c630_ucsi_update_connector(struct ucsi_connector *con)
> +{
> + if (con->num == 1)
> + con->typec_cap.orientation_aware = true;
> +}
> +
> static const struct ucsi_operations yoga_c630_ucsi_ops = {
> .read_version = yoga_c630_ucsi_read_version,
> .read_cci = yoga_c630_ucsi_read_cci,
> @@ -152,8 +168,33 @@ static const struct ucsi_operations yoga_c630_ucsi_ops = {
> .sync_control = yoga_c630_ucsi_sync_control,
> .async_control = yoga_c630_ucsi_async_control,
> .update_altmodes = yoga_c630_ucsi_update_altmodes,
> + .update_connector = yoga_c630_ucsi_update_connector,
> };
>
> +static void yoga_c630_ucsi_read_port0_status(struct yoga_c630_ucsi *uec)
> +{
> + int val;
> + unsigned int muxc, ccst, dppn, hpds, hsfl;
> +
> + val = yoga_c630_ec_read16(uec->ec, LENOVO_EC_USB_MUX);
> +
> + muxc = FIELD_GET(USB_MUX_MUXC, val);
> + ccst = FIELD_GET(USB_MUX_CCST, val);
> + dppn = FIELD_GET(USB_MUX_DPPN, val);
> + hpds = FIELD_GET(USB_MUX_HPDS, val);
> + hsfl = FIELD_GET(USB_MUX_HSFL, val);
> +
> + dev_dbg(uec->ucsi->dev, " mux %04x (muxc %d ccst %d dppn %d hpds %d hsfl %d)\n",
> + val,
> + muxc, ccst, dppn, hpds, hsfl);
> +
> + if (uec->ucsi->connector && uec->ucsi->connector[0].port)
> + typec_set_orientation(uec->ucsi->connector[0].port,
> + ccst == 1 ?
> + TYPEC_ORIENTATION_REVERSE :
> + TYPEC_ORIENTATION_NORMAL);
> +}
> +
> static int yoga_c630_ucsi_notify(struct notifier_block *nb,
> unsigned long action, void *data)
> {
> @@ -164,6 +205,7 @@ static int yoga_c630_ucsi_notify(struct notifier_block *nb,
> switch (action) {
> case LENOVO_EC_EVENT_USB:
> case LENOVO_EC_EVENT_HPD:
> + yoga_c630_ucsi_read_port0_status(uec);
> ucsi_connector_change(uec->ucsi, 1);
> return NOTIFY_OK;
>
>
> --
> 2.39.5
--
heikki
next prev parent reply other threads:[~2025-06-24 9:20 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-21 18:12 [PATCH 0/8] usb: typec: ucsi: yoga-c630: enable DisplayPort support Dmitry Baryshkov
2025-06-21 18:12 ` [PATCH 1/8] usb: typec: ucsi: yoga-c630: fix error and remove paths Dmitry Baryshkov
2025-06-24 9:05 ` Heikki Krogerus
2025-06-21 18:12 ` [PATCH 2/8] usb: typec: ucsi: add recipient arg to update_altmodes() callback Dmitry Baryshkov
2025-06-24 9:07 ` Heikki Krogerus
2025-06-21 18:12 ` [PATCH 3/8] usb: typec: ucsi: yoga-c630: remove duplicate AltModes Dmitry Baryshkov
2025-06-24 9:08 ` Heikki Krogerus
2025-06-21 18:12 ` [PATCH 4/8] usb: typec: ucsi: yoga-c630: remove extra AltModes for port 1 Dmitry Baryshkov
2025-06-24 9:12 ` Heikki Krogerus
2025-06-21 18:13 ` [PATCH 5/8] usb: typec: ucsi: yoga-c630: fake AltModes for port 0 Dmitry Baryshkov
2025-06-24 9:13 ` Heikki Krogerus
2025-06-21 18:13 ` [PATCH 6/8] usb: typec: ucsi: yoga-c630: correct response for GET_CURRENT_CAM Dmitry Baryshkov
2025-06-24 9:16 ` Heikki Krogerus
2025-06-21 18:13 ` [PATCH 7/8] usb: typec: ucsi: yoga-c630: handle USB / HPD messages to set port orientation Dmitry Baryshkov
2025-06-24 9:20 ` Heikki Krogerus [this message]
2025-06-21 18:13 ` [PATCH 8/8] usb: typec: ucsi: yoga-c630: register DRM HPD bridge Dmitry Baryshkov
2025-06-24 9:21 ` Heikki Krogerus
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=aFpt0j21dOWAnNvR@kuha.fi.intel.com \
--to=heikki.krogerus@linux.intel.com \
--cc=andersson@kernel.org \
--cc=bryan.odonoghue@linaro.org \
--cc=dmitry.baryshkov@oss.qualcomm.com \
--cc=gregkh@linuxfoundation.org \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=konradybcio@kernel.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
/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.