From: "Dr. David Alan Gilbert" <dave@treblig.org>
To: jens.glathe@oldschoolsolutions.biz
Cc: Heikki Krogerus <heikki.krogerus@linux.intel.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Abel Vesa <abelvesa@kernel.org>,
Bjorn Andersson <andersson@kernel.org>,
Konrad Dybcio <konradybcio@kernel.org>,
Sebastian Reichel <sre@kernel.org>,
linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-arm-msm@vger.kernel.org, stable@vger.kernel.org,
Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Subject: Re: [PATCH v2 3/3] usb: typec: mux: ps883x: disable USB4 on incomplete USB4 platforms
Date: Tue, 15 Sep 2026 00:56:20 +0000 [thread overview]
Message-ID: <aqiXtO3WrwSFHE3e@gallifrey> (raw)
In-Reply-To: <20260914-ps883x-disable-usb4-v2-3-523c32b4e4d7@oldschoolsolutions.biz>
* Jens Glathe via B4 Relay (devnull+jens.glathe.oldschoolsolutions.biz@kernel.org) wrote:
> From: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
>
> On Qualcomm X1E80100 / X1P42100 platforms using the Parade PS883x
> retimer, hotplugging USB4-capable docks such as the Lenovo 40B0 can
> result in working USB but no DisplayPort output.
>
> When the dock negotiates USB4, the retimer receives TYPEC_MODE_USB4
> and forwards it via typec_mux_set(). The qmp-combo PHY then selects
> USB3-only because no classic DP altmode SVID is present in the state,
> leaving the DP transmitter and AUX channel disabled.
>
> Reject USB4 with -EOPNOTSUPP on platforms whose USB4 / DP-tunneling
> stack is not ready yet. The Type-C stack then falls back to USB3 + DP
> Alt Mode. DP altmode configuration continues to use the existing
> ps883x_set() path.
>
> Use a machine-compatible table rather than a DT property so the quirk
> stays inside the kernel and can be removed later without creating ABI.
>
> Link: https://patch.msgid.link/20260312101431.2375709-1-krishna.kurapati@oss.qualcomm.com
> Assisted-by: Grok(xAI):4.6
> Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
Seems to work here (pair of Asus zenbook a14's doing usb networking), so:
Tested-by: Dr. David Alan Gilbert <dave@treblig.org>
> ---
> drivers/usb/typec/mux/ps883x.c | 37 +++++++++++++++++++++++++++++++++++++
> 1 file changed, 37 insertions(+)
>
> diff --git a/drivers/usb/typec/mux/ps883x.c b/drivers/usb/typec/mux/ps883x.c
> index e93e958065f6f..02d6c04d45ae3 100644
> --- a/drivers/usb/typec/mux/ps883x.c
> +++ b/drivers/usb/typec/mux/ps883x.c
> @@ -13,6 +13,7 @@
> #include <linux/kernel.h>
> #include <linux/module.h>
> #include <linux/mutex.h>
> +#include <linux/of.h>
> #include <linux/regmap.h>
> #include <linux/regulator/consumer.h>
> #include <linux/usb/pd.h>
> @@ -42,6 +43,22 @@
> #define CONN_STATUS_2_TBT_UNIDIR_LSRX_ACT_LT BIT(4)
> #define CONN_STATUS_2_USB4_CONNECTED BIT(7)
>
> +/*
> + * Platforms where the USB4 / DP-tunneling stack is not ready yet. Rejecting
> + * USB4 here lets the Type-C stack fall back to USB3 + DP Alt Mode instead of
> + * negotiating USB4 and then failing to drive DisplayPort.
> + *
> + * This is a temporary, kernel-contained quirk (not DT ABI). Drop the entries
> + * once the corresponding USB4 support is complete.
> + */
> +static const char * const ps883x_disable_usb4_compats[] = {
> + "qcom,x1e80100",
> + "qcom,x1p42100",
> + "qcom,hamoa",
> + "qcom,purwa",
> + NULL,
> +};
> +
> struct ps883x_retimer {
> struct i2c_client *client;
> struct gpio_desc *reset_gpio;
> @@ -63,8 +80,21 @@ struct ps883x_retimer {
>
> enum typec_orientation orientation;
> bool in_reset;
> + bool disable_usb4;
> };
>
> +static bool ps883x_should_disable_usb4(void)
> +{
> + const char * const *compat;
> +
> + for (compat = ps883x_disable_usb4_compats; *compat; compat++) {
> + if (of_machine_is_compatible(*compat))
> + return true;
> + }
> +
> + return false;
> +}
> +
> static int ps883x_enable_vregs(struct ps883x_retimer *retimer)
> {
> struct device *dev = &retimer->client->dev;
> @@ -262,6 +292,9 @@ static int ps883x_set(struct ps883x_retimer *retimer, struct typec_retimer_state
> cfg0 |= CONN_STATUS_0_USB_3_1_CONNECTED;
> break;
> case TYPEC_MODE_USB4:
> + if (retimer->disable_usb4)
> + return -EOPNOTSUPP;
> +
> eudo_data = state->data;
>
> cfg2 |= CONN_STATUS_2_USB4_CONNECTED;
> @@ -391,6 +424,10 @@ static int ps883x_retimer_probe(struct i2c_client *client)
>
> retimer->client = client;
>
> + retimer->disable_usb4 = ps883x_should_disable_usb4();
> + if (retimer->disable_usb4)
> + dev_info(dev, "USB4 disabled until platform USB4 support is complete\n");
> +
> mutex_init(&retimer->lock);
>
> retimer->regmap = devm_regmap_init_i2c(client, &ps883x_retimer_regmap);
>
> --
> 2.53.0
>
>
--
-----Open up your eyes, open up your mind, open up your code -------
/ Dr. David Alan Gilbert | Running GNU/Linux | Happy \
\ dave @ treblig.org | | In Hex /
\ _________________________|_____ http://www.treblig.org |_______/
prev parent reply other threads:[~2026-09-15 1:14 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-14 6:05 [PATCH v2 0/3] usb: typec: ps883x: fixes for older Thunderbolt 4 / USB4 docks Jens Glathe via B4 Relay
2026-09-14 6:05 ` [PATCH v2 1/3] usb: typec: mux: ps883x: support TYPEC_DP_STATE_F like qmp-combo Jens Glathe via B4 Relay
2026-09-14 10:25 ` Konrad Dybcio
2026-09-15 5:07 ` Jens Glathe
2026-09-14 6:05 ` [PATCH v2 2/3] usb: typec: mux: ps883x: add a delay after writing config regs Jens Glathe via B4 Relay
2026-09-14 6:05 ` [PATCH v2 3/3] usb: typec: mux: ps883x: disable USB4 on incomplete USB4 platforms Jens Glathe via B4 Relay
2026-09-15 0:56 ` Dr. David Alan Gilbert [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=aqiXtO3WrwSFHE3e@gallifrey \
--to=dave@treblig.org \
--cc=abelvesa@kernel.org \
--cc=andersson@kernel.org \
--cc=dmitry.baryshkov@oss.qualcomm.com \
--cc=gregkh@linuxfoundation.org \
--cc=heikki.krogerus@linux.intel.com \
--cc=jens.glathe@oldschoolsolutions.biz \
--cc=konradybcio@kernel.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=sre@kernel.org \
--cc=stable@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®