Re: [PATCH] usb: typec: mux: fsa4480: Keep the USB 2.0 switch on in DP-only modes
From: Heikki Krogerus
Date: Mon Oct 26 2026 - 09:26:16 EST
On Fri, Oct 23, 2026 at 01:51:43AM +0900, Joonhoe Kim wrote:
> DisplayPort pin assignments C and E give all four SuperSpeed lanes to
> DisplayPort, but the USB 2.0 D+/D- pair is not part of the pin
> assignment and stays available. The FSA4480 sits on that pair, and in
> these modes the driver turns its USB switch off, so a USB 2.0 hub or
> device behind a DisplayPort sink is disconnected as soon as the
> DisplayPort mode is set.
>
> Configure the USB switch the same way in all DisplayPort modes.
>
> Fixes: c7054c31c1c9 ("usb: typec: fsa4480: rework mux & switch setup to handle more states")
> Signed-off-by: Joonhoe Kim <26rote@xxxxxxxxx>
Acked-by: Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx>
> ---
> Tested on a Lenovo Y700 Gen 5 (TB323FU, Kaanapali; out-of-tree board
> support) with a USB-C monitor in pin assignment C: its USB 2.0 hub was
> disconnected when the mux was set; with this change the hub and the
> keyboard behind it stay connected.
>
> drivers/usb/typec/mux/fsa4480.c | 9 +--------
> 1 file changed, 1 insertion(+), 8 deletions(-)
>
> diff --git a/drivers/usb/typec/mux/fsa4480.c b/drivers/usb/typec/mux/fsa4480.c
> index bea0c1deec94..e05ab3c10c81 100644
> --- a/drivers/usb/typec/mux/fsa4480.c
> +++ b/drivers/usb/typec/mux/fsa4480.c
> @@ -93,16 +93,9 @@ static int fsa4480_set(struct fsa4480 *fsa)
> sel = FSA4480_SEL_USB;
> } else if (fsa->svid) {
> switch (fsa->mode) {
> - /* DP Only */
> case TYPEC_DP_STATE_C:
> - case TYPEC_DP_STATE_E:
> - enable |= FSA4480_ENABLE_SBU;
> - if (reverse)
> - sel = FSA4480_SEL_SBU_REVERSE;
> - break;
> -
> - /* DP + USB */
> case TYPEC_DP_STATE_D:
> + case TYPEC_DP_STATE_E:
> case TYPEC_DP_STATE_F:
> enable |= FSA4480_ENABLE_USB | FSA4480_ENABLE_SBU;
> sel = FSA4480_SEL_USB;
>
> base-commit: 2efb7a11f1aa4d2dc285fe2680cca22cb9f72f64
> --
> 2.43.0
--
heikki