From: Heikki Krogerus <heikki.krogerus@linux.intel.com>
To: Konrad Dybcio <konradybcio@kernel.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>,
Bjorn Andersson <bjorn.andersson@oss.qualcomm.com>,
Wesley Cheng <wesley.cheng@oss.qualcomm.com>,
Jack Pham <jack.pham@oss.qualcomm.com>,
Raghavendra Thoorpu <rthoorpu@qti.qualcomm.com>,
linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Subject: Re: [PATCH 3/3] usb: typec: ps883x: Add USB4 mode and TBT3 altmode support
Date: Mon, 20 Oct 2025 12:49:56 +0300 [thread overview]
Message-ID: <aPYFxF8fRhkQcv06@kuha.fi.intel.com> (raw)
In-Reply-To: <20251014-topic-ps883x_usb4-v1-3-e6adb1a4296e@oss.qualcomm.com>
On Tue, Oct 14, 2025 at 06:06:47PM +0200, Konrad Dybcio wrote:
> From: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
>
> This chip can do some more than the driver currently describes. Add
> support for configuring it for various flavors of TBT3/USB4 operation.
>
> Reviewed-by: Jack Pham <jack.pham@oss.qualcomm.com>
> Signed-off-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> ---
> drivers/usb/typec/mux/ps883x.c | 29 +++++++++++++++++++++++++++++
> include/linux/usb/typec_tbt.h | 1 +
> 2 files changed, 30 insertions(+)
>
> diff --git a/drivers/usb/typec/mux/ps883x.c b/drivers/usb/typec/mux/ps883x.c
> index 72f1e737ca4b..7c61629b36d6 100644
> --- a/drivers/usb/typec/mux/ps883x.c
> +++ b/drivers/usb/typec/mux/ps883x.c
> @@ -14,15 +14,18 @@
> #include <linux/mutex.h>
> #include <linux/regmap.h>
> #include <linux/regulator/consumer.h>
> +#include <linux/usb/pd.h>
> #include <linux/usb/typec_altmode.h>
> #include <linux/usb/typec_dp.h>
> #include <linux/usb/typec_mux.h>
> #include <linux/usb/typec_retimer.h>
> +#include <linux/usb/typec_tbt.h>
>
> #define REG_USB_PORT_CONN_STATUS_0 0x00
>
> #define CONN_STATUS_0_CONNECTION_PRESENT BIT(0)
> #define CONN_STATUS_0_ORIENTATION_REVERSED BIT(1)
> +#define CONN_STATUS_0_ACTIVE_CABLE BIT(2)
> #define CONN_STATUS_0_USB_3_1_CONNECTED BIT(5)
>
> #define REG_USB_PORT_CONN_STATUS_1 0x01
> @@ -34,6 +37,10 @@
>
> #define REG_USB_PORT_CONN_STATUS_2 0x02
>
> +#define CONN_STATUS_2_TBT_CONNECTED BIT(0)
> +#define CONN_STATUS_2_TBT_UNIDIR_LSRX_ACT_LT BIT(4)
> +#define CONN_STATUS_2_USB4_CONNECTED BIT(7)
> +
> struct ps883x_retimer {
> struct i2c_client *client;
> struct gpio_desc *reset_gpio;
> @@ -95,6 +102,8 @@ static int ps883x_configure(struct ps883x_retimer *retimer, int cfg0,
>
> static int ps883x_set(struct ps883x_retimer *retimer, struct typec_retimer_state *state)
> {
> + struct typec_thunderbolt_data *tb_data;
> + const struct enter_usb_data *eudo_data;
> int cfg0 = CONN_STATUS_0_CONNECTION_PRESENT;
> int cfg1 = 0x00;
> int cfg2 = 0x00;
> @@ -120,6 +129,18 @@ static int ps883x_set(struct ps883x_retimer *retimer, struct typec_retimer_state
> break;
> }
> break;
> + case USB_TYPEC_TBT_SID:
> + tb_data = state->data;
> +
> + /* Unconditional */
> + cfg2 |= CONN_STATUS_2_TBT_CONNECTED;
> +
> + if (tb_data->cable_mode & TBT_CABLE_ACTIVE_PASSIVE)
> + cfg0 |= CONN_STATUS_0_ACTIVE_CABLE;
> +
> + if (tb_data->enter_vdo & TBT_ENTER_MODE_UNI_DIR_LSRX)
> + cfg2 |= CONN_STATUS_2_TBT_UNIDIR_LSRX_ACT_LT;
> + break;
> default:
> dev_err(&retimer->client->dev, "Got unsupported SID: 0x%x\n",
> state->alt->svid);
> @@ -135,6 +156,14 @@ static int ps883x_set(struct ps883x_retimer *retimer, struct typec_retimer_state
> case TYPEC_MODE_USB3:
> cfg0 |= CONN_STATUS_0_USB_3_1_CONNECTED;
> break;
> + case TYPEC_MODE_USB4:
> + eudo_data = state->data;
> +
> + cfg2 |= CONN_STATUS_2_USB4_CONNECTED;
> +
> + if (FIELD_GET(EUDO_CABLE_TYPE_MASK, eudo_data->eudo) != EUDO_CABLE_TYPE_PASSIVE)
> + cfg0 |= CONN_STATUS_0_ACTIVE_CABLE;
> + break;
> default:
> dev_err(&retimer->client->dev, "Got unsupported mode: %lu\n",
> state->mode);
> diff --git a/include/linux/usb/typec_tbt.h b/include/linux/usb/typec_tbt.h
> index 55dcea12082c..0b570f1b8bc8 100644
> --- a/include/linux/usb/typec_tbt.h
> +++ b/include/linux/usb/typec_tbt.h
> @@ -55,6 +55,7 @@ struct typec_thunderbolt_data {
>
> /* TBT3 Device Enter Mode VDO bits */
> #define TBT_ENTER_MODE_CABLE_SPEED(s) TBT_SET_CABLE_SPEED(s)
> +#define TBT_ENTER_MODE_UNI_DIR_LSRX BIT(23)
> #define TBT_ENTER_MODE_ACTIVE_CABLE BIT(24)
>
> #endif /* __USB_TYPEC_TBT_H */
>
> --
> 2.51.0
--
heikki
prev parent reply other threads:[~2025-10-20 9:50 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-14 16:06 [PATCH 0/3] TBT3/USB4 support for PS8830 Konrad Dybcio
2025-10-14 16:06 ` [PATCH 1/3] usb: typec: ps883x: Cache register settings, not Type-C mode Konrad Dybcio
2025-10-20 9:43 ` Heikki Krogerus
2025-10-14 16:06 ` [PATCH 2/3] usb: typec: ps883x: Rework ps883x_set() Konrad Dybcio
2025-10-20 9:49 ` Heikki Krogerus
2025-10-14 16:06 ` [PATCH 3/3] usb: typec: ps883x: Add USB4 mode and TBT3 altmode support Konrad Dybcio
2025-10-20 9:49 ` Heikki Krogerus [this message]
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=aPYFxF8fRhkQcv06@kuha.fi.intel.com \
--to=heikki.krogerus@linux.intel.com \
--cc=bjorn.andersson@oss.qualcomm.com \
--cc=dmitry.baryshkov@oss.qualcomm.com \
--cc=gregkh@linuxfoundation.org \
--cc=jack.pham@oss.qualcomm.com \
--cc=konrad.dybcio@oss.qualcomm.com \
--cc=konradybcio@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=rthoorpu@qti.qualcomm.com \
--cc=wesley.cheng@oss.qualcomm.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.