phy: rockchip: usbdp: Properly handle TYPEC_STATE_SAFE and TYPEC_STATE_USB

Handle TYPEC_STATE_SAFE and TYPEC_STATE_USB Type-C state events,
so that the muxing is properly updated when exiting DP AltMode.

Fixes: 2f70bbddeb ("phy: rockchip: add usbdp combo phy driver")
Reported-by: Sashiko <sashiko-bot@kernel.org>
Closes: https://sashiko.dev/#/message/20260619155020.CC7361F000E9%40smtp.kernel.org
Tested-by: Igor Paunovic <royalnet026@gmail.com> # Orange Pi 5 Plus
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>
Link: https://patch.msgid.link/20260915-rockchip-usbdp-cleanup-part2-v15-5-8d507cb1174f@collabora.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
This commit is contained in:
Sebastian Reichel 2026-09-15 17:06:08 +02:00 committed by Vinod Koul
parent cc492941f8
commit b1ca8de219

View File

@ -1292,17 +1292,26 @@ static const struct phy_ops rk_udphy_usb3_phy_ops = {
.owner = THIS_MODULE,
};
static bool rk_udphy_is_supported_mode(struct typec_mux_state *state)
{
/* Handle Safe State and USB State */
if (state->mode < TYPEC_STATE_MODAL)
return true;
/* Handle DP AltMode */
if (state->alt && state->alt->svid == USB_TYPEC_DP_SID)
return true;
return false;
}
static int rk_udphy_typec_mux_set(struct typec_mux_dev *mux,
struct typec_mux_state *state)
{
struct rk_udphy *udphy = typec_mux_get_drvdata(mux);
/*
* Ignore mux events not involving DP AltMode, because
* the mode field is being reused, e.g. state->mode == 4
* could be either TYPEC_MODE_USB4 or TYPEC_DP_STATE_C.
*/
if (!state->alt || state->alt->svid != USB_TYPEC_DP_SID)
/* Ignore mux events not involving USB or DP */
if (!rk_udphy_is_supported_mode(state))
return 0;
mutex_lock(&udphy->mutex);