From nobody Sun Oct 5 22:00:00 2025 Received: from smtpbguseast3.qq.com (smtpbguseast3.qq.com [54.243.244.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E2D7226AAA3; Tue, 29 Jul 2025 09:01:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=54.243.244.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753779673; cv=none; b=P+aq/SNTTvHYcMruR7Q21m82ay+O22rpD0+USpN6dHnfE3lQ2rZ/oeL1uPQ6P5hFA5nNTpH+Rxe22DS1spEmLlD/ZBleM5zPaI1eSoYYCEj9FIN4QA7WKkNX2xKZg+JP8XuLAF6P/VyusulyMq7osUuhorHDbMWWYio1EVT6BCI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753779673; c=relaxed/simple; bh=qNjYCOVOV/XUwDVyW04FsvLwserCLzsN46WobMalTaU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=m8qX8aYL1NsqlZgormx66modwmnWR7/O2qp9FUdUyvO60n5mnIabGCyx3HEa1YXgWVIwZoCpCZQ1yDPr12VdMgQAgGzZOoRNMT8HtzqVV7Q7P5TOKSywnN3ZKWb7kz9RPpRh8Jkc0HBRBNcf4t8JrDu5w9nNKm3QEFW1R0Hj6gA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=airkyi.com; spf=pass smtp.mailfrom=airkyi.com; dkim=pass (1024-bit key) header.d=airkyi.com header.i=@airkyi.com header.b=hIsNOol5; arc=none smtp.client-ip=54.243.244.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=airkyi.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=airkyi.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=airkyi.com header.i=@airkyi.com header.b="hIsNOol5" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=airkyi.com; s=altu2504; t=1753779649; bh=q6Q48lBZu83JxJ63QhH8HxOwFpopi36sswkLOu+jOhU=; h=From:To:Subject:Date:Message-Id; b=hIsNOol5j3UGAjzxDvCTIaIDA2btMirXq9eqU35vy3GOscnGHIFVR7wG4LINp4xSe dsRr9je9Iog1LVTid2ygHRJJjhUP4PNCbiTp9pjMx1hk+wm27smNGm2ILejI6BxJkq CO8WTKmPhSgtyVisIx0SnhH5LGl+0+88ih5RX+gU= X-QQ-mid: zesmtpgz1t1753779643t83ca4cf2 X-QQ-Originating-IP: GNy0TVRpqK5gjjPPYnOaHZTZmyoTUAn1duABOXp26z8= Received: from DESKTOP-8BT1A2O.localdomain ( [58.22.7.114]) by bizesmtp.qq.com (ESMTP) with id ; Tue, 29 Jul 2025 17:00:40 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 17940541300271697831 From: Chaoyi Chen To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Vinod Koul , Kishon Vijay Abraham I , Heiko Stuebner , Sandy Huang , Andy Yan , Yubing Zhang , Frank Wang , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Amit Sunil Dhamne , Greg Kroah-Hartman , Chaoyi Chen , Dragan Simic , Johan Jonker , Diederik de Haas , Dmitry Baryshkov , Peter Robinson Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, dri-devel@lists.freedesktop.org Subject: [PATCH v3 1/5] dt-bindings: phy: rockchip: rk3399-typec-phy: Support mode-switch Date: Tue, 29 Jul 2025 17:00:28 +0800 Message-Id: <20250729090032.97-2-kernel@airkyi.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20250729090032.97-1-kernel@airkyi.com> References: <20250729090032.97-1-kernel@airkyi.com> X-QQ-SENDSIZE: 520 Feedback-ID: zesmtpgz:airkyi.com:qybglogicsvrsz:qybglogicsvrsz4a-0 X-QQ-XMAILINFO: N3I7nP72NaLr7+34hVSZDA2zeUJQJdKl9AVwV4+SNR1baRF8giAMKHD8 W15zzNdzoY4s0LRL89pJ9P+G18UDKher2/NbQCcGzGKrktbmnpzOD/ThwFEE1zCkg7fCYK6 NXJQSSfJ52e7neoElrMchE4N9/MfobZV7jzPzQw4yw2MwcVrFkm8huoDYZfL/lr3KtCSmXK w+8ZELnVLRTThb6qKRPmmS9cZDYerKceAzbaa6KkQqzMZmpCDrhgTNJmpnTeG1MUt/3aG8L Qxr+UXw+WliOklJZ/PTBBL5kZScwbHnCPnXigB1iqF/9+rxH9sZhHPEMsTuUnkRoRint/S8 ezSDmQoWtapyklKboqM4XHm5UE5cbVr6XU9tUMBehZc4K7LVjm6Eymv0lrUkgkHE0go1Dcg 7Nfj4TOKDu917tvRNS/G0BDvEgWRksAv1uzfl1Udk3WV0ZYFgTyqS3xizrZeHp+XCg6zAvD FSiwVbEHF5xU4IIXrPBSl/2BVq/MomDrFUAvxW/ohqsMifadEyG2p2rQ4PWGCXI4I4NDevB 5dPF4Or/D8zXT1TJGz7VG3+0pbi1a49vQnrjE0X8KtmflzYqjJiXqGxrHszKcO2mopb9FbU OgdqtCuLMoMM90UUO/UeUlgW+husl2clW6/hI624ojcbLXzbOLJI85hNA/xJnOJ4aS55Ddc TxGvyCYazL8Wmd5zvvwB1eJ0vBNwSz/naCwGrdyAhQgkBrpCsbJQ5a2jBNcDRQiSwOmqY4c G9qkG76GTvugSP4ckMBoLBx/kCOXx93AJiH3odOjcqsld8+ZWsbuqxwt8+d2xr41sAX2/EV cc9IyG/NwAV8cyBxIJMsGGTVTQ9mzL1lH/36FObbEpHyAP1lHMJZxLr528gORZKU1E2Tro2 mK9+PcO7xHFCoG9v2JYZODPFH+6MXU7vTrxMd2DSERCiBhE1XSPJUKI+k+YeA46TwUI9/ra kytwwLlQkMdJU4Rt3hhgj4rGlOAiY31BRqmU= X-QQ-XMRINFO: Nq+8W0+stu50PRdwbJxPCL0= X-QQ-RECHKSPAM: 0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Chaoyi Chen The RK3399 SoC integrates two USB/DP combo PHYs, each of which supports software-configurable pin mapping and DisplayPort lane assignment. These capabilities enable the PHY itself to handle both mode switching and orientation switching, based on the Type-C plug orientation and USB PD negotiation results. While an external Type-C controller is still required to detect cable attachment and report USB PD events, the actual mode and orientation switching is performed internally by the PHY through software configuration. This allows the PHY to act as a Type-C multiplexer for both data role and DP altmode configuration. To reflect this hardware design, this patch introduces a new "mode-switch" property for the dp-port node in the device tree bindings. This property indicates that the connected PHY is capable of handling Type-C mode switching itself. Signed-off-by: Chaoyi Chen Acked-by: Krzysztof Kozlowski --- Changes in v3: - Add more descriptions to clarify the role of the PHY in switching. Changes in v2: - Reuse dp-port/usb3-port in rk3399-typec-phy binding. .../devicetree/bindings/phy/rockchip,rk3399-typec-phy.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Documentation/devicetree/bindings/phy/rockchip,rk3399-typec-ph= y.yaml b/Documentation/devicetree/bindings/phy/rockchip,rk3399-typec-phy.ya= ml index 91c011f68cd0..ccbe1c9cb0bf 100644 --- a/Documentation/devicetree/bindings/phy/rockchip,rk3399-typec-phy.yaml +++ b/Documentation/devicetree/bindings/phy/rockchip,rk3399-typec-phy.yaml @@ -51,6 +51,12 @@ properties: '#phy-cells': const: 0 =20 + mode-switch: + description: | + Indicates the PHY can handle altmode switching. In this case, + requires an external USB Type-C controller to report USB PD mess= age. + type: boolean + port: $ref: /schemas/graph.yaml#/properties/port description: Connection to USB Type-C connector --=20 2.49.0 From nobody Sun Oct 5 22:00:00 2025 Received: from smtpbgau2.qq.com (smtpbgau2.qq.com [54.206.34.216]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6E4EE26AAA3; Tue, 29 Jul 2025 09:01:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=54.206.34.216 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753779686; cv=none; b=FAl5wHpYp9SWuav9D4Sd9KJO/r2Jsq6BNUQd5tyokQf0fs7dxh/UNtJrq1JmhUxYOqkgeZ7X523bB7KF3ru4Ph+mVEVj4GhuuvUHtN8e502ojnN51g3OOR1hOJ/0opmo5F4jg0GTGrmuyZdW0seICE80fmMCQKuzocTdmKSwuhg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753779686; c=relaxed/simple; bh=kao6e67FwuWhRp3tmeOcRGXVaWDwmRRDtZyieoCHzc8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=cxC9MbLLRJARY9eXoC02HULNymCRITmN4sp5D56iW/d/53AOjjmb5t87Kk3JKqfeCiuMzhbpWFBXAeyAuU27f+8Oywz3uL+TjbddYowMz7mzTzOg2naNttl6CgqP/w9/kCAtT70SmfXvvt2eekJ5ME60SqsOSdvTQkvhnG3nUXM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=airkyi.com; spf=pass smtp.mailfrom=airkyi.com; dkim=pass (1024-bit key) header.d=airkyi.com header.i=@airkyi.com header.b=MH7ab1BH; arc=none smtp.client-ip=54.206.34.216 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=airkyi.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=airkyi.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=airkyi.com header.i=@airkyi.com header.b="MH7ab1BH" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=airkyi.com; s=altu2504; t=1753779652; bh=VW/DdTwl5TYpA6II4CfgMFAA4Ijg7k0ban6dV6D8At4=; h=From:To:Subject:Date:Message-Id; b=MH7ab1BHJkBftpVoTispG3bXgwCA6ifiOnEXBxT7FYqgFt+DrkrtnkGip2AyCw4lu gUzA/E0EvbNYtW/AJmFlNC9OhmKcirROYaASTPdsu2gIsDeD3p1BCkJ0WWD/ud5v0b aSfJ2IL3FgOJNqSxeHcX3dVQveNgR6Stot2fcr7Q= X-QQ-mid: zesmtpgz1t1753779647t81dfe8b8 X-QQ-Originating-IP: 1IAjw9G2vfavlfTpp22/vacKeunQUy48Jnj/yYObpuo= Received: from DESKTOP-8BT1A2O.localdomain ( [58.22.7.114]) by bizesmtp.qq.com (ESMTP) with id ; Tue, 29 Jul 2025 17:00:44 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 5075254642561631887 From: Chaoyi Chen To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Vinod Koul , Kishon Vijay Abraham I , Heiko Stuebner , Sandy Huang , Andy Yan , Yubing Zhang , Frank Wang , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Amit Sunil Dhamne , Greg Kroah-Hartman , Chaoyi Chen , Dragan Simic , Johan Jonker , Diederik de Haas , Dmitry Baryshkov , Peter Robinson Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, dri-devel@lists.freedesktop.org Subject: [PATCH v3 2/5] phy: rockchip: phy-rockchip-typec: Add typec_mux/typec_switch support Date: Tue, 29 Jul 2025 17:00:29 +0800 Message-Id: <20250729090032.97-3-kernel@airkyi.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20250729090032.97-1-kernel@airkyi.com> References: <20250729090032.97-1-kernel@airkyi.com> X-QQ-SENDSIZE: 520 Feedback-ID: zesmtpgz:airkyi.com:qybglogicsvrsz:qybglogicsvrsz4a-0 X-QQ-XMAILINFO: MMnP0fEUKo/hXpOUROvJGQACCMAL3ec2fsR2BqVufNntJGwC/j1FiOgF EsVgguXFIcxY+eqAyFFt46h7lQ4/AJor4Wc/YekIk7+moHH428HkwnpayGFK6yO/8k+gcNs zgO2BTkuDyPLl4b+uh/Peso6okO9qWu+Xs7XLJl3Ow8z5HHPr8ZypvzXk6a0OFTDlVjkwJ4 VrrFGxMzlm4NQcr0qFSyWygDyPRweDhhrzTUdqVib62qv6ZenUt6NL+UHsEiiO4TVsjk6VX ZeWnt2mAaI7sig35TNso2le9peJqiDx/jObtBDRX8Fhc2Rd1PWgw443UWGwjaVtP4WuRB/A XJN4gRWh/GeGBhRl8SgUOTmyQKs+ocbcIYg/PfhHiCWxv1YQOpRoNmTJm0m3RyTRnBpN98n QLWDxv367qOAdyacjjQ9ySEzrQjqy6ohVIpAH647eElpIGzno9yrY32/sgaoYEg7X4JrLz9 60tV2QdSya/aGYGXXb/gChN0Lpn6r+2Lkn42Xvw2LnXL+N9K+UENwjlnuqzG05hyDWRYhQY dZyLJAKdoef6TA1fmv7HBX3hune92tZZsSVdxLiHKbkuor01HJnm32fSWP9y2eMXwkMjq8J 6wpNt+klD3zW5CnthSOt255kSrFtm/YpIwz6TXkoQmqhY9cfVBbQK7spt09e5ASp5mldxeF 0UXWplsTQZpn+dukPj7zmAAlbgVdoQPdue4ejVrq2nKKfW4kGrcBFvTtBGzEpzTKNrYDV2k 70Ecs5SZcdn0+Rpd8JJ6Rt9IvM5PmLiBjzSkE79EnHMSppr5AAdcQbJAAkJ+NzGHxuDeTfB 73u1Eqhxn3R5X61F3JPCDGEajSvunOmUu1hOrmJPJs+ZmTgRPSHklZ6BujXZd0+chNTAm0P o7d8YqQPjalnYPlQyQyc9v4UT3AWkQGC5QyH7BveZC2SCqDpf7WHOSa/wQm/XRQKJ52ksX/ TDDFO43K2a2w5xLcdN9opdbUXma/muSToLkFaK7l5t78zGjBQ4iS0MTW+ X-QQ-XMRINFO: M/715EihBoGSf6IYSX1iLFg= X-QQ-RECHKSPAM: 0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Chaoyi Chen This patch add support for Type-C Port Controller Manager. Each PHY will register typec_mux and typec_switch when external Type-C controller is present. Type-C events are handled by TCPM without extcon. The extcon device should still be supported. Signed-off-by: Chaoyi Chen --- Changes in v2: - Fix compile error when CONFIG_TYPEC is not enabled. - Notify DP HPD state by USB/DP PHY. drivers/phy/rockchip/phy-rockchip-typec.c | 403 +++++++++++++++++++++- 1 file changed, 387 insertions(+), 16 deletions(-) diff --git a/drivers/phy/rockchip/phy-rockchip-typec.c b/drivers/phy/rockch= ip/phy-rockchip-typec.c index d9701b6106d5..6334953a225e 100644 --- a/drivers/phy/rockchip/phy-rockchip-typec.c +++ b/drivers/phy/rockchip/phy-rockchip-typec.c @@ -47,6 +47,7 @@ #include #include #include +#include #include #include #include @@ -54,6 +55,9 @@ =20 #include #include +#include +#include +#include =20 #define CMN_SSM_BANDGAP (0x21 << 2) #define CMN_SSM_BIAS (0x22 << 2) @@ -286,12 +290,23 @@ #define RX_DIAG_SC2C_DELAY (0x81e1 << 2) =20 #define PMA_LANE_CFG (0xc000 << 2) +#define PMA_LANE3_DP_LANE_SEL(x) (((x) & 0x3) << 14) +#define PMA_LANE3_INTERFACE_SEL(x) (((x) & 0x1) << 12) +#define PMA_LANE2_DP_LANE_SEL(x) (((x) & 0x3) << 10) +#define PMA_LANE2_INTERFACE_SEL(x) (((x) & 0x1) << 8) +#define PMA_LANE1_DP_LANE_SEL(x) (((x) & 0x3) << 6) +#define PMA_LANE1_INTERFACE_SEL(x) (((x) & 0x1) << 4) +#define PMA_LANE0_DP_LANE_SEL(x) (((x) & 0x3) << 2) +#define PMA_LANE0_INTERFACE_SEL(x) (((x) & 0x1) << 0) #define PIPE_CMN_CTRL1 (0xc001 << 2) #define PIPE_CMN_CTRL2 (0xc002 << 2) #define PIPE_COM_LOCK_CFG1 (0xc003 << 2) #define PIPE_COM_LOCK_CFG2 (0xc004 << 2) #define PIPE_RCV_DET_INH (0xc005 << 2) #define DP_MODE_CTL (0xc008 << 2) +#define PHY_DP_POWER_STATE_ACK_MASK GENMASK(7, 4) +#define PHY_DP_POWER_STATE_ACK_SHIFT 4 +#define PHY_DP_POWER_STATE_MASK GENMASK(3, 0) #define DP_CLK_CTL (0xc009 << 2) #define STS (0xc00F << 2) #define PHY_ISO_CMN_CTRL (0xc010 << 2) @@ -327,8 +342,15 @@ =20 #define DP_MODE_A0 BIT(4) #define DP_MODE_A2 BIT(6) -#define DP_MODE_ENTER_A0 0xc101 -#define DP_MODE_ENTER_A2 0xc104 + +#define DP_MODE_MASK 0xf +#define DP_MODE_ENTER_A0 BIT(0) +#define DP_MODE_ENTER_A2 BIT(2) +#define DP_MODE_ENTER_A3 BIT(3) +#define DP_MODE_A0_ACK BIT(4) +#define DP_MODE_A2_ACK BIT(6) +#define DP_MODE_A3_ACK BIT(7) +#define DP_LINK_RESET_DEASSERTED BIT(8) =20 #define PHY_MODE_SET_TIMEOUT 100000 =20 @@ -340,6 +362,31 @@ #define MODE_DFP_USB BIT(1) #define MODE_DFP_DP BIT(2) =20 +enum phy_dp_lane_num { + PHY_DP_LANE_0 =3D 0, + PHY_DP_LANE_1, + PHY_DP_LANE_2, + PHY_DP_LANE_3, +}; + +enum phy_pma_if { + PMA_IF_PIPE_PCS =3D 0, + PMA_IF_PHY_DP, +}; + +enum phy_typec_role { + TYPEC_PHY_USB =3D 0, + TYPEC_PHY_DP, + TYPEC_PHY_MAX, +}; + +enum phy_dp_power_state { + PHY_DP_POWER_STATE_A0 =3D 0, + PHY_DP_POWER_STATE_A1, + PHY_DP_POWER_STATE_A2, + PHY_DP_POWER_STATE_A3, +}; + struct usb3phy_reg { u32 offset; u32 enable_bit; @@ -372,18 +419,23 @@ struct rockchip_typec_phy { struct device *dev; void __iomem *base; struct extcon_dev *extcon; + struct fwnode_handle *connector_fwnode; + struct typec_mux_dev *mux; + struct typec_switch_dev *sw; struct regmap *grf_regs; struct clk *clk_core; struct clk *clk_ref; struct reset_control *uphy_rst; struct reset_control *pipe_rst; struct reset_control *tcphy_rst; + struct phy *phys[TYPEC_PHY_MAX]; const struct rockchip_usb3phy_port_cfg *port_cfgs; /* mutex to protect access to individual PHYs */ struct mutex lock; =20 bool flip; u8 mode; + u8 new_mode; }; =20 struct phy_reg { @@ -454,6 +506,99 @@ static const struct rockchip_usb3phy_port_cfg rk3399_u= sb3phy_port_cfgs[] =3D { { /* sentinel */ } }; =20 +static int tcphy_cfg_usb3_to_usb2_only(struct rockchip_typec_phy *tcphy, + bool value); + +static int tcphy_dp_set_power_state(struct rockchip_typec_phy *tcphy, + enum phy_dp_power_state state) +{ + u32 ack, reg, sts =3D BIT(state); + int ret; + + /* + * Power state changes must not be requested until after the cmn_ready + * signal has gone active. + */ + reg =3D readl(tcphy->base + PMA_CMN_CTRL1); + if (!(reg & CMN_READY)) { + dev_err(tcphy->dev, "cmn_ready in the inactive state\n"); + return -EINVAL; + } + + reg =3D readl(tcphy->base + DP_MODE_CTL); + reg &=3D ~PHY_DP_POWER_STATE_MASK; + reg |=3D sts; + writel(reg, tcphy->base + DP_MODE_CTL); + + ret =3D readl_poll_timeout(tcphy->base + DP_MODE_CTL, + ack, (((ack & PHY_DP_POWER_STATE_ACK_MASK) >> + PHY_DP_POWER_STATE_ACK_SHIFT) =3D=3D sts), 10, + PHY_MODE_SET_TIMEOUT); + if (ret < 0) { + dev_err(tcphy->dev, "failed to enter power state %d\n", state); + return ret; + } + + return 0; +} + +/* + * For the TypeC PHY, the 4 lanes are mapping to the USB TypeC receptacle = pins + * as follows: + * ------------------------------------------------------------------- + * PHY Lanes/Module Pins TypeC Receptacle Pins + * ------------------------------------------------------------------- + * Lane0 (tx_p/m_ln_0) TX1+/TX1- (pins A2/A3) + * Lane1 (tx_rx_p/m_ln_1) RX1+/RX1- (pins B11/B10) + * Lane2 (tx_rx_p/m_ln_2) RX2+/RX2- (pins A11/A10) + * Lane3 (tx_p/m_ln_3) TX2+/TX2- (pins B2/B3) + * ------------------------------------------------------------------- + * + * USB and DP lanes mapping to TypeC PHY lanes for each of pin assignment + * options (normal connector orientation) described in the VESA DisplayPort + * Alt Mode on USB TypeC Standard as follows: + * + * ---------------------------------------------------------------------- + * PHY Lanes A B C D E F + * ---------------------------------------------------------------------- + * 0 ML1 SSTX ML2 SSTX ML2 SSTX + * 1 ML3 SSRX ML3 SSRX ML3 SSRX + * 2 ML2 ML1 ML0 ML0 ML0 ML0 + * 3 ML0 ML0 ML1 ML1 ML1 ML1 + * ---------------------------------------------------------------------- + */ +static void tcphy_set_lane_mapping(struct rockchip_typec_phy *tcphy, u8 mo= de) +{ + /* + * The PMA_LANE_CFG register is used to select whether a PMA lane + * is mapped for USB or PHY DP. The PMA_LANE_CFG register is + * configured based on a normal connector orientation. Logic in the + * PHY automatically handles the flipped connector case based on the + * setting of orientation of TypeC PHY. + */ + if (mode =3D=3D MODE_DFP_DP) { + /* This maps to VESA DP Alt Mode pin assignments C and E. */ + writel(PMA_LANE3_DP_LANE_SEL(PHY_DP_LANE_1) | + PMA_LANE3_INTERFACE_SEL(PMA_IF_PHY_DP) | + PMA_LANE2_DP_LANE_SEL(PHY_DP_LANE_0) | + PMA_LANE2_INTERFACE_SEL(PMA_IF_PHY_DP) | + PMA_LANE1_DP_LANE_SEL(PHY_DP_LANE_3) | + PMA_LANE1_INTERFACE_SEL(PMA_IF_PHY_DP) | + PMA_LANE0_DP_LANE_SEL(PHY_DP_LANE_2) | + PMA_LANE0_INTERFACE_SEL(PMA_IF_PHY_DP), + tcphy->base + PMA_LANE_CFG); + } else { + /* This maps to VESA DP Alt Mode pin assignments D and F. */ + writel(PMA_LANE3_DP_LANE_SEL(PHY_DP_LANE_1) | + PMA_LANE3_INTERFACE_SEL(PMA_IF_PHY_DP) | + PMA_LANE2_DP_LANE_SEL(PHY_DP_LANE_0) | + PMA_LANE2_INTERFACE_SEL(PMA_IF_PHY_DP) | + PMA_LANE1_INTERFACE_SEL(PMA_IF_PIPE_PCS) | + PMA_LANE0_INTERFACE_SEL(PMA_IF_PIPE_PCS), + tcphy->base + PMA_LANE_CFG); + } +} + static void tcphy_cfg_24m(struct rockchip_typec_phy *tcphy) { u32 i, rdata; @@ -743,8 +888,10 @@ static int tcphy_phy_init(struct rockchip_typec_phy *t= cphy, u8 mode) tcphy_dp_aux_set_flip(tcphy); =20 tcphy_cfg_24m(tcphy); + tcphy_set_lane_mapping(tcphy, mode); =20 if (mode =3D=3D MODE_DFP_DP) { + tcphy_cfg_usb3_to_usb2_only(tcphy, true); tcphy_cfg_dp_pll(tcphy); for (i =3D 0; i < 4; i++) tcphy_dp_cfg_lane(tcphy, i); @@ -768,7 +915,10 @@ static int tcphy_phy_init(struct rockchip_typec_phy *t= cphy, u8 mode) writel(PIN_ASSIGN_D_F, tcphy->base + PMA_LANE_CFG); } =20 - writel(DP_MODE_ENTER_A2, tcphy->base + DP_MODE_CTL); + val =3D readl(tcphy->base + DP_MODE_CTL); + val &=3D ~DP_MODE_MASK; + val |=3D DP_MODE_ENTER_A2 | DP_LINK_RESET_DEASSERTED; + writel(val, tcphy->base + DP_MODE_CTL); =20 reset_control_deassert(tcphy->uphy_rst); =20 @@ -811,8 +961,9 @@ static int tcphy_get_mode(struct rockchip_typec_phy *tc= phy) u8 mode; int ret, ufp, dp; =20 + /* If extcon not exist, try to use tcpm mode */ if (!edev) - return MODE_DFP_USB; + return tcphy->new_mode; =20 ufp =3D extcon_get_state(edev, EXTCON_USB); dp =3D extcon_get_state(edev, EXTCON_DISP_DP); @@ -850,6 +1001,72 @@ static int tcphy_get_mode(struct rockchip_typec_phy *= tcphy) return mode; } =20 +#if IS_ENABLED(CONFIG_TYPEC) +static int tcphy_orien_sw_set(struct typec_switch_dev *sw, + enum typec_orientation orien) +{ + struct rockchip_typec_phy *tcphy =3D typec_switch_get_drvdata(sw); + + mutex_lock(&tcphy->lock); + + if (orien =3D=3D TYPEC_ORIENTATION_NONE) { + tcphy->new_mode =3D MODE_DISCONNECT; + goto unlock_ret; + } + + tcphy->flip =3D (orien =3D=3D TYPEC_ORIENTATION_REVERSE) ? true : false; + tcphy->new_mode =3D MODE_DFP_USB; + +unlock_ret: + mutex_unlock(&tcphy->lock); + return 0; +} + +static void udphy_orien_switch_unregister(void *data) +{ + struct rockchip_typec_phy *tcphy =3D data; + + typec_switch_unregister(tcphy->sw); +} + +static int tcphy_setup_orien_switch(struct rockchip_typec_phy *tcphy) +{ + struct typec_switch_desc sw_desc =3D { }; + struct device_node *np; + int ret =3D 0; + + np =3D of_get_child_by_name(tcphy->dev->of_node, "usb3-port"); + if (!np) + return 0; + + if (!of_property_read_bool(np, "orientation-switch")) + goto put_np; + + sw_desc.drvdata =3D tcphy; + sw_desc.fwnode =3D device_get_named_child_node(tcphy->dev, "usb3-port"); + sw_desc.set =3D tcphy_orien_sw_set; + + tcphy->sw =3D typec_switch_register(tcphy->dev, &sw_desc); + if (IS_ERR(tcphy->sw)) { + dev_err(tcphy->dev, "Error register typec orientation switch: %ld\n", + PTR_ERR(tcphy->sw)); + ret =3D PTR_ERR(tcphy->sw); + goto put_np; + } + + ret =3D devm_add_action_or_reset(tcphy->dev, udphy_orien_switch_unregiste= r, tcphy); + +put_np: + of_node_put(np); + return ret; +} +#else +static int tcphy_setup_orien_switch(struct rockchip_typec_phy *tcphy) +{ + return 0; +} +#endif + static int tcphy_cfg_usb3_to_usb2_only(struct rockchip_typec_phy *tcphy, bool value) { @@ -989,14 +1206,9 @@ static int rockchip_dp_phy_power_on(struct phy *phy) =20 tcphy_dp_aux_calibration(tcphy); =20 - writel(DP_MODE_ENTER_A0, tcphy->base + DP_MODE_CTL); - - ret =3D readx_poll_timeout(readl, tcphy->base + DP_MODE_CTL, - val, val & DP_MODE_A0, 1000, - PHY_MODE_SET_TIMEOUT); - if (ret < 0) { - writel(DP_MODE_ENTER_A2, tcphy->base + DP_MODE_CTL); - dev_err(tcphy->dev, "failed to wait TCPHY enter A0\n"); + ret =3D tcphy_dp_set_power_state(tcphy, PHY_DP_POWER_STATE_A0); + if (ret) { + dev_err(tcphy->dev, "failed to enter A0 power state\n"); goto power_on_finish; } =20 @@ -1013,6 +1225,7 @@ static int rockchip_dp_phy_power_on(struct phy *phy) static int rockchip_dp_phy_power_off(struct phy *phy) { struct rockchip_typec_phy *tcphy =3D phy_get_drvdata(phy); + int ret; =20 mutex_lock(&tcphy->lock); =20 @@ -1021,7 +1234,11 @@ static int rockchip_dp_phy_power_off(struct phy *phy) =20 tcphy->mode &=3D ~MODE_DFP_DP; =20 - writel(DP_MODE_ENTER_A2, tcphy->base + DP_MODE_CTL); + ret =3D tcphy_dp_set_power_state(tcphy, PHY_DP_POWER_STATE_A2); + if (ret) { + dev_err(tcphy->dev, "failed to enter A2 power state\n"); + goto unlock; + } =20 if (tcphy->mode =3D=3D MODE_DISCONNECT) tcphy_phy_deinit(tcphy); @@ -1037,6 +1254,94 @@ static const struct phy_ops rockchip_dp_phy_ops =3D { .owner =3D THIS_MODULE, }; =20 +#if IS_ENABLED(CONFIG_TYPEC) +static int tcphy_typec_mux_set(struct typec_mux_dev *mux, struct typec_mux= _state *state) +{ + struct rockchip_typec_phy *tcphy =3D typec_mux_get_drvdata(mux); + struct typec_displayport_data *data; + int hpd =3D 0; + + mutex_lock(&tcphy->lock); + + switch (state->mode) { + case TYPEC_STATE_SAFE: + fallthrough; + case TYPEC_STATE_USB: + tcphy->new_mode =3D MODE_DFP_USB; + phy_set_bus_width(tcphy->phys[TYPEC_PHY_DP], 0); + break; + case TYPEC_DP_STATE_C: + case TYPEC_DP_STATE_E: + tcphy->new_mode =3D MODE_DFP_DP; + data =3D state->data; + hpd =3D !!(data->status & DP_STATUS_HPD_STATE); + phy_set_bus_width(tcphy->phys[TYPEC_PHY_DP], hpd ? 4 : 0); + break; + case TYPEC_DP_STATE_D: + tcphy->new_mode =3D MODE_DFP_DP | MODE_DFP_USB; + data =3D state->data; + hpd =3D !!(data->status & DP_STATUS_HPD_STATE); + phy_set_bus_width(tcphy->phys[TYPEC_PHY_DP], hpd ? 2 : 0); + break; + default: + break; + } + + mutex_unlock(&tcphy->lock); + + if (state->alt && state->alt->svid =3D=3D USB_TYPEC_DP_SID) + drm_connector_oob_hotplug_event(tcphy->connector_fwnode, + hpd ? connector_status_connected : + connector_status_disconnected); + + return 0; +} + +static void tcphy_typec_mux_unregister(void *data) +{ + struct rockchip_typec_phy *tcphy =3D data; + + typec_mux_unregister(tcphy->mux); +} + +static int tcphy_setup_typec_mux(struct rockchip_typec_phy *tcphy) +{ + struct typec_mux_desc mux_desc =3D {}; + struct device_node *np; + int ret =3D 0; + + np =3D of_get_child_by_name(tcphy->dev->of_node, "dp-port"); + if (!np) + return 0; + + if (!of_property_read_bool(np, "mode-switch")) + goto put_np; + + mux_desc.drvdata =3D tcphy; + mux_desc.fwnode =3D device_get_named_child_node(tcphy->dev, "dp-port"); + mux_desc.set =3D tcphy_typec_mux_set; + + tcphy->mux =3D typec_mux_register(tcphy->dev, &mux_desc); + if (IS_ERR(tcphy->mux)) { + dev_err(tcphy->dev, "Error register typec mux: %ld\n", + PTR_ERR(tcphy->mux)); + ret =3D PTR_ERR(tcphy->mux); + goto put_np; + } + + ret =3D devm_add_action_or_reset(tcphy->dev, tcphy_typec_mux_unregister, = tcphy); + +put_np: + of_node_put(np); + return ret; +} +#else +static int tcphy_setup_typec_mux(struct rockchip_typec_phy *tcphy) +{ + return 0; +} +#endif + static int tcphy_parse_dt(struct rockchip_typec_phy *tcphy, struct device *dev) { @@ -1095,6 +1400,53 @@ static void typec_phy_pre_init(struct rockchip_typec= _phy *tcphy) tcphy->mode =3D MODE_DISCONNECT; } =20 +static int typec_dp_lane_get(struct rockchip_typec_phy *tcphy) +{ + int dp_lanes; + + switch (tcphy->new_mode) { + case MODE_DFP_DP: + dp_lanes =3D 4; + break; + case MODE_DFP_DP | MODE_DFP_USB: + dp_lanes =3D 2; + break; + default: + dp_lanes =3D 0; + break; + } + + return dp_lanes; +} + +static void rockchip_dp_connector_fwnode_get(struct rockchip_typec_phy *tc= phy) +{ + struct device *dev =3D tcphy->dev; + struct device_node *np =3D dev->of_node; + struct device_node *dp_port; + struct device_node *ep; + struct device_node *remote; + + dp_port =3D of_get_child_by_name(np, "dp-port"); + if (!dp_port) + return; + + ep =3D of_graph_get_endpoint_by_regs(dp_port, -1, 1); /* endpoint@1 */ + if (!ep) + goto put_dp_port; + + remote =3D of_graph_get_remote_port_parent(ep); + if (!remote) + goto put_ep; + + tcphy->connector_fwnode =3D fwnode_handle_get(of_fwnode_handle(remote)); + +put_ep: + of_node_put(ep); +put_dp_port: + of_node_put(dp_port); +} + static int rockchip_typec_phy_probe(struct platform_device *pdev) { struct device *dev =3D &pdev->dev; @@ -1142,6 +1494,7 @@ static int rockchip_typec_phy_probe(struct platform_d= evice *pdev) return ret; =20 tcphy->dev =3D dev; + tcphy->new_mode =3D MODE_DFP_USB; platform_set_drvdata(pdev, tcphy); mutex_init(&tcphy->lock); =20 @@ -1151,6 +1504,7 @@ static int rockchip_typec_phy_probe(struct platform_d= evice *pdev) if (IS_ERR(tcphy->extcon)) { if (PTR_ERR(tcphy->extcon) =3D=3D -ENODEV) { tcphy->extcon =3D NULL; + dev_info(dev, "extcon not exist, try to use typec mux\n"); } else { if (PTR_ERR(tcphy->extcon) !=3D -EPROBE_DEFER) dev_err(dev, "Invalid or missing extcon\n"); @@ -1158,19 +1512,36 @@ static int rockchip_typec_phy_probe(struct platform= _device *pdev) } } =20 + ret =3D tcphy_setup_orien_switch(tcphy); + if (ret) + return ret; + + ret =3D tcphy_setup_typec_mux(tcphy); + if (ret) + return ret; + + rockchip_dp_connector_fwnode_get(tcphy); + pm_runtime_enable(dev); =20 for_each_available_child_of_node(np, child_np) { struct phy *phy; =20 - if (of_node_name_eq(child_np, "dp-port")) + if (of_node_name_eq(child_np, "dp-port")) { phy =3D devm_phy_create(dev, child_np, &rockchip_dp_phy_ops); - else if (of_node_name_eq(child_np, "usb3-port")) + if (!IS_ERR(phy)) { + tcphy->phys[TYPEC_PHY_DP] =3D phy; + phy_set_bus_width(phy, typec_dp_lane_get(tcphy)); + } + } else if (of_node_name_eq(child_np, "usb3-port")) { phy =3D devm_phy_create(dev, child_np, &rockchip_usb3_phy_ops); - else + if (!IS_ERR(phy)) + tcphy->phys[TYPEC_PHY_USB] =3D phy; + } else { continue; + } =20 if (IS_ERR(phy)) { dev_err(dev, "failed to create phy: %pOFn\n", --=20 2.49.0 From nobody Sun Oct 5 22:00:00 2025 Received: from smtpbguseast2.qq.com (smtpbguseast2.qq.com [54.204.34.130]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8B959182; Tue, 29 Jul 2025 09:02:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=54.204.34.130 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753779747; cv=none; b=DDFMgE/TgyexVoauWCXGzYEu6u7u89HhS6hVDr6h3BYhLCtR7nXFgFvdNXZ2DnMaSNWO0RoHcr9L2lGBZWZv5/SXNw9b5hsUjiW1SbXEkvtCRa1IhH8Xs66c+g8oQImHhEuB+LLykXvuR0WknobAR32t/9a8K7B7XyTvXTj1O3E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753779747; c=relaxed/simple; bh=ObLvx2l/ijQLa5xRrPNGnhM9n5LhIgt+A4KmOOJyhZo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=eODmkCe+v0+HicjSnWGPOET4Znp/ssiAxRMQkMlNU67k7uEhZFQYUo69SyPt7HqZy/ROu+S27KxOmDd+q6HAjTX14hgZMrn+OkiVTRma/WyNBSlTcywQqCaDN9mNJNfVMhpyxLLNbGM2lm8k5j8ByV4sacMBXy0gL8kyVFq7FFM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=airkyi.com; spf=pass smtp.mailfrom=airkyi.com; dkim=pass (1024-bit key) header.d=airkyi.com header.i=@airkyi.com header.b=Z4+EPtqB; arc=none smtp.client-ip=54.204.34.130 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=airkyi.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=airkyi.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=airkyi.com header.i=@airkyi.com header.b="Z4+EPtqB" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=airkyi.com; s=altu2504; t=1753779656; bh=RN1WwuxpO4LBAyRHMTh9poQETUIZdvEm0QRwkE/4D2M=; h=From:To:Subject:Date:Message-Id; b=Z4+EPtqBzVjO4OoUTgOay8Vfed7OotRc0B7G1gf2JrrUF7f7XaDB0JelDXzs15hRk iKKUeJ/8cWlO2I2NyCsmqDc8FMy2llfHuz7BNKubCEwyzgc3DPvVA3NZEwCvWDqqtq vps+4iZ27/AUDFCeCRNLpnBv+6C1AvgIEIPG6Lmc= X-QQ-mid: zesmtpgz1t1753779650tbf9605c9 X-QQ-Originating-IP: HOYsq8iA7FlhH8Rvf76IYCZ9Rt5I5SBH31MTUBKXFD4= Received: from DESKTOP-8BT1A2O.localdomain ( [58.22.7.114]) by bizesmtp.qq.com (ESMTP) with id ; Tue, 29 Jul 2025 17:00:48 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 18407573237461644155 From: Chaoyi Chen To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Vinod Koul , Kishon Vijay Abraham I , Heiko Stuebner , Sandy Huang , Andy Yan , Yubing Zhang , Frank Wang , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Amit Sunil Dhamne , Greg Kroah-Hartman , Chaoyi Chen , Dragan Simic , Johan Jonker , Diederik de Haas , Dmitry Baryshkov , Peter Robinson Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, dri-devel@lists.freedesktop.org Subject: [PATCH v3 3/5] drm/rockchip: cdn-dp: Support handle lane info and HPD without extcon Date: Tue, 29 Jul 2025 17:00:30 +0800 Message-Id: <20250729090032.97-4-kernel@airkyi.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20250729090032.97-1-kernel@airkyi.com> References: <20250729090032.97-1-kernel@airkyi.com> X-QQ-SENDSIZE: 520 Feedback-ID: zesmtpgz:airkyi.com:qybglogicsvrsz:qybglogicsvrsz4a-0 X-QQ-XMAILINFO: N0JG5d2dvsRDvRDstdXZf0SEwJJEdFHvVsC71c5F7Xr7QJeJXG0XvryL phJLF4Yrdn+mxMuFZFq4cddG+uBzSmcxjVvOHO8z9LdQPwRqD6x+pfOL/J1BuFco1Ch1LQW 5orkjKx15/eKpIliRF9u37990N8J9rdUG4FnSKQ0QsnvK4n5QLIearpXZ5quWKQyTYP3eYg agQ+q2ElLpeIXfzi2C0FpANj3QCGWBG0qejbowqPesbL6T6jEjY8b2+IAkCf3DrXccu90/b 5UqtyI1VhSD78veZd0P68G5qSuj4CepQuDAACeBz5Iilw72iWnO7AYTFKLVbJulo40b/sPU gRZLIGTb9BTqovhYJVg1QHQusvw3EhIQ+hXbD9+XGNJzL6RxLG5cHugfny9eeC/0JkcM+M8 icXkQqvf28W7HgrhD18CtM+tTnlbVj+u82d2FdzuWeUH20ajOkQnOccqEzeSb+XzamP0H8h NEcKrJ2lGpMpsV7ADPtLxcCBlFogPo54PUqxYjl/z34pjhQz3+YTirx8aT3v3fV0k1C4edM qlMPphue18znrLK7sd9S7Pby0XdSeW6BHBE45pPyWToyxoyUGofByQEEJF5K65pbVkztImS f10moLnn+awIRYqTFp8Zyx66pqE5nOQNTvdF4ADx+vAzfmtg8gEHBPt51hKPbThOGkCLzsj eeHvWem4JI1ppVQ1DmTpKiDJ4CEIkYpnZFOXwIM2dnJvl3CdELv/ksglwIJwtY/7RNgStDp gDPmlMUOzdlPxULXFQEfdDZvZ9H+Ja1fJ6Dib86yzq9PM7dG4Ww+arnC0O+KZHpOMK/Wcl4 ym28ibx4Is01E8tiRUrDifzv69dmQJvlVbfuwK046bPeet1tvBHzseJn87TNcJ+wJu7T7Kx kjPrVNmZwTI49filvCAUJMB3+WdC/Quztg4Fov/rsFYbdAUymm5CVb5DTTKko8wtmqA9VAN kLMpmVmg+TjxnT10FIOh9NDlpSf5Wrq/zNQvd/es9zUsph3BZpnQFMHei4O4EQ5r93U1Kss 31hiJzjCKlA+St0wnD X-QQ-XMRINFO: M/715EihBoGSf6IYSX1iLFg= X-QQ-RECHKSPAM: 0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Chaoyi Chen This patch add support for get PHY lane info and handle HPD state without help of extcon. There is no extcon needed if the Type-C controller is present. In this case, cdn_dp_hpd_notify() will handle HPD event from USB/DP combo PHY, and the lane info can be get from PHY instead of extcon. The extcon device should still be supported if Type-C controller is not present. Signed-off-by: Chaoyi Chen --- Changes in v2: - Ignore duplicate HPD events. drivers/gpu/drm/rockchip/cdn-dp-core.c | 37 ++++++++++++++++++++------ 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/rockchip/cdn-dp-core.c b/drivers/gpu/drm/rockc= hip/cdn-dp-core.c index 24f6b3879f4b..b574b059b58d 100644 --- a/drivers/gpu/drm/rockchip/cdn-dp-core.c +++ b/drivers/gpu/drm/rockchip/cdn-dp-core.c @@ -156,6 +156,9 @@ static int cdn_dp_get_port_lanes(struct cdn_dp_port *po= rt) int dptx; u8 lanes; =20 + if (!edev) + return phy_get_bus_width(port->phy); + dptx =3D extcon_get_state(edev, EXTCON_DISP_DP); if (dptx > 0) { extcon_get_property(edev, EXTCON_DISP_DP, @@ -219,7 +222,7 @@ static bool cdn_dp_check_sink_connection(struct cdn_dp_= device *dp) * some docks need more time to power up. */ while (time_before(jiffies, timeout)) { - if (!extcon_get_state(port->extcon, EXTCON_DISP_DP)) + if (port->extcon && !extcon_get_state(port->extcon, EXTCON_DISP_DP)) return false; =20 if (!cdn_dp_get_sink_count(dp, &sink_count)) @@ -385,11 +388,14 @@ static int cdn_dp_enable_phy(struct cdn_dp_device *dp= , struct cdn_dp_port *port) goto err_power_on; } =20 - ret =3D extcon_get_property(port->extcon, EXTCON_DISP_DP, - EXTCON_PROP_USB_TYPEC_POLARITY, &property); - if (ret) { - DRM_DEV_ERROR(dp->dev, "get property failed\n"); - goto err_power_on; + property.intval =3D 0; + if (port->extcon) { + ret =3D extcon_get_property(port->extcon, EXTCON_DISP_DP, + EXTCON_PROP_USB_TYPEC_POLARITY, &property); + if (ret) { + DRM_DEV_ERROR(dp->dev, "get property failed\n"); + goto err_power_on; + } } =20 port->lanes =3D cdn_dp_get_port_lanes(port); @@ -821,6 +827,17 @@ static int cdn_dp_audio_mute_stream(struct drm_connect= or *connector, return ret; } =20 +static void cdn_dp_hpd_notify(struct drm_bridge *bridge, + enum drm_connector_status status) +{ + struct cdn_dp_device *dp =3D bridge_to_dp(bridge); + enum drm_connector_status last_status =3D + dp->connected ? connector_status_connected : connector_status_disconnect= ed; + + if (last_status !=3D status) + schedule_work(&dp->event_work); +} + static const struct drm_bridge_funcs cdn_dp_bridge_funcs =3D { .atomic_duplicate_state =3D drm_atomic_helper_bridge_duplicate_state, .atomic_destroy_state =3D drm_atomic_helper_bridge_destroy_state, @@ -831,6 +848,7 @@ static const struct drm_bridge_funcs cdn_dp_bridge_func= s =3D { .atomic_disable =3D cdn_dp_bridge_atomic_disable, .mode_valid =3D cdn_dp_bridge_mode_valid, .mode_set =3D cdn_dp_bridge_mode_set, + .hpd_notify =3D cdn_dp_hpd_notify, =20 .dp_audio_prepare =3D cdn_dp_audio_prepare, .dp_audio_mute_stream =3D cdn_dp_audio_mute_stream, @@ -1028,6 +1046,9 @@ static int cdn_dp_bind(struct device *dev, struct dev= ice *master, void *data) for (i =3D 0; i < dp->ports; i++) { port =3D dp->port[i]; =20 + if (!port->extcon) + continue; + port->event_nb.notifier_call =3D cdn_dp_pd_event; ret =3D devm_extcon_register_notifier(dp->dev, port->extcon, EXTCON_DISP_DP, @@ -1120,14 +1141,14 @@ static int cdn_dp_probe(struct platform_device *pde= v) PTR_ERR(phy) =3D=3D -EPROBE_DEFER) return -EPROBE_DEFER; =20 - if (IS_ERR(extcon) || IS_ERR(phy)) + if (IS_ERR(phy) || PTR_ERR(extcon) !=3D -ENODEV) continue; =20 port =3D devm_kzalloc(dev, sizeof(*port), GFP_KERNEL); if (!port) return -ENOMEM; =20 - port->extcon =3D extcon; + port->extcon =3D IS_ERR(extcon) ? NULL : extcon; port->phy =3D phy; port->dp =3D dp; port->id =3D i; --=20 2.49.0 From nobody Sun Oct 5 22:00:00 2025 Received: from smtpbguseast1.qq.com (smtpbguseast1.qq.com [54.204.34.129]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2043F287253; Tue, 29 Jul 2025 09:01:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=54.204.34.129 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753779701; cv=none; b=gM3VijnIvk1SACpdV3yF1bPelQDxU9+JObiDWTWH6YimGPCE07WLc6Ftu2qhe5Dxee3E6ZS1Kl1wIM83jOnEgpYYQCOKZVjlunwLf3YYE5lCAKnOp/wNEtN3P8vnCyL2NoEil/J/Kca6Ac9Y/bCWe8vZmx59P2dHGaqIFy5oQ/Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753779701; c=relaxed/simple; bh=IFjBh/IsLkSBy3BP+55MVOlJYanvu03dU7s+TFtZgr4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=uONVdvlTPc+ioVyy+Eqj0Giz+4ZTH+ZsUY1hQCYNkZKYhDb58NMstYZAQw0cN4owL0mCjMwrrFreR9zFdbk+Ed7AkumuUM+UVEgx41/14NiyoOMB5vu9jtEIhItQu15y07LxphHVtsBLF3NX9I6xxLz+Dhn+dp2G7LGykMEVJqI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=airkyi.com; spf=pass smtp.mailfrom=airkyi.com; dkim=pass (1024-bit key) header.d=airkyi.com header.i=@airkyi.com header.b=rgfsEa4+; arc=none smtp.client-ip=54.204.34.129 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=airkyi.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=airkyi.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=airkyi.com header.i=@airkyi.com header.b="rgfsEa4+" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=airkyi.com; s=altu2504; t=1753779661; bh=cVsfyWOIHeXBsAv/pI+LuirkOLN75phRnl2QMAl6n60=; h=From:To:Subject:Date:Message-Id; b=rgfsEa4+7aRZXcoMmqiddOJYRc/xopB0FbdZYNZNSsjt9BWUGghhGIIgaF7rhmMA4 BsOapiDXxV7zLvad32+rjnNdruhuntbzcwKY3Hxp93zVihxF8wAGlhwCbsV8PGdnBB O1nCR7WM17OSgKoeCqspd98Ksx/KWt07qXTq6CMw= X-QQ-mid: zesmtpgz1t1753779654t826cd32d X-QQ-Originating-IP: jRSwjG6rFafhFW5ehktwFr25xj18ygtqPc25P+oepJE= Received: from DESKTOP-8BT1A2O.localdomain ( [58.22.7.114]) by bizesmtp.qq.com (ESMTP) with id ; Tue, 29 Jul 2025 17:00:52 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 7649534104477773387 From: Chaoyi Chen To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Vinod Koul , Kishon Vijay Abraham I , Heiko Stuebner , Sandy Huang , Andy Yan , Yubing Zhang , Frank Wang , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Amit Sunil Dhamne , Greg Kroah-Hartman , Chaoyi Chen , Dragan Simic , Johan Jonker , Diederik de Haas , Dmitry Baryshkov , Peter Robinson Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, dri-devel@lists.freedesktop.org Subject: [PATCH v3 4/5] arm64: dts: rockchip: Add missing dp_out port for RK3399 CDN-DP Date: Tue, 29 Jul 2025 17:00:31 +0800 Message-Id: <20250729090032.97-5-kernel@airkyi.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20250729090032.97-1-kernel@airkyi.com> References: <20250729090032.97-1-kernel@airkyi.com> X-QQ-SENDSIZE: 520 Feedback-ID: zesmtpgz:airkyi.com:qybglogicsvrsz:qybglogicsvrsz4a-0 X-QQ-XMAILINFO: OMdukQY98W2HQxJc1PF1vIo+UWLudmLtX0Jxbv1z4uVMlmDCHdb1Ftfx /wIZEDfCoeMCD+Cyq9Cb+ATv2PLGy7Dmf16qlHHqKRc6V3Ifm2jpCYwaCKNFPj8iyo9Shw1 oDjbZLDhpt6uPlJ6/KIHK+Dr4cGxzVc3RMQv3/Xq7gbfDU66mC9rLjOtAJhIm/hruHJKmSU EidHzcdEzmUfGoZioKWam5FuTucFfB5xAH5awSWZ7nlfo+S4kaNrn29UF8q5EO52oMVsp3s dOmrYAqHDcYaPYYqVz07jH/sYhbh58zkb5htU4YeEbw1ag5Smw/0QD6pb2eI4bbhUb3cuMa xXpgJPu3fKLfAVTviONDilUO6gU7P00giZb5LkflUEjDSFeVSoeMGxr/zjKyFqJSWvp0Bbq sSHvwG+Wd11HCIihiRfk09DGvxs0C6mRlJ2iMaIiPQWSBrRIsfIAjshUNzBZnOFtJ67rlct wTC12meB+g0WB25gOWyL31z+cSZF+DO8r7CKBu1lZiiLTFdktkYNn/ou8oUUeN9AI5Z9uRD 1B1jIIieOW5vjkF553jJ0izL5V5WmsS4vymq9LvkBRBH2T6Dk+gO+y1M/0OsPrIW7NjNYQF lsfJ7ZpmgZlyRl1YaJColBHB3LYI/uXxzG4bEJQObPeNYKI3R4G/EbkMF3JdQXlxNqA4qSS 8PiBz73lm970+ASy69NdbsjxZ2RH9WE1et1MHqWkucnxU02vbkQ0ySthMWeoqmxM6wCSy1p azDwMJ7OlLBOmFCzmkXVZKrHdhX5oiLi4bQvbFvbS6yXkfG3Ivy9qhbsaTpgpko/8zCZh6f ioZavRLpzxDQGllPZX+wAVtW3waC8KbThLQyAR2mW2qxYTLyLxu+eGiXMvDYnhoYSEigQE2 UjkS559AIFfW4Y3mGiE5cwVMRDBPpESIA0+EKAxfBBPLFtGJlBqWxl+oYDkPkwsGnVhR8Tj j+Fb19H55Uk+MmffZOvodAcnBWNIB+iqrrXNe8ywj1eAOmeyvLaPiy88lK6wLsRe89Y/8SD SjzxZBAakrDH/oCwhc X-QQ-XMRINFO: Mp0Kj//9VHAxr69bL5MkOOs= X-QQ-RECHKSPAM: 0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Chaoyi Chen Let's make the ports nodes of cdn_dp in the same style as the other display interface, and match the style of ports's yaml. Signed-off-by: Chaoyi Chen --- arch/arm64/boot/dts/rockchip/rk3399-base.dtsi | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/rockchip/rk3399-base.dtsi b/arch/arm64/boo= t/dts/rockchip/rk3399-base.dtsi index 9d5f5b083e3c..edeb177bc433 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-base.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3399-base.dtsi @@ -618,7 +618,11 @@ cdn_dp: dp@fec00000 { status =3D "disabled"; =20 ports { - dp_in: port { + #address-cells =3D <1>; + #size-cells =3D <0>; + + dp_in: port@0 { + reg =3D <0>; #address-cells =3D <1>; #size-cells =3D <0>; =20 @@ -632,6 +636,12 @@ dp_in_vopl: endpoint@1 { remote-endpoint =3D <&vopl_out_dp>; }; }; + + dp_out: port@1 { + reg =3D <1>; + #address-cells =3D <1>; + #size-cells =3D <0>; + }; }; }; =20 --=20 2.49.0 From nobody Sun Oct 5 22:00:00 2025 Received: from smtpbgbr1.qq.com (smtpbgbr1.qq.com [54.207.19.206]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1ACD928724F; Tue, 29 Jul 2025 09:01:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=54.207.19.206 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753779701; cv=none; b=X6vhyL5dQiPt9ko23iKDAvayd8t2MgEPw4npC4DWvxcHrGYbr2AW7Ok9/a7Dy+ycaKgbF26Sc4QGUGgOd2UJYBDy2di3P8dUAbBBpE7NDWEqXznmqPN2gvcHA7Zo1ImZ9aMhFarIRSLL83mdNU9Zo7oejLbBr88Bzbdxpj8+0o4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753779701; c=relaxed/simple; bh=pcrpufKXiwpLeztAqfrGiC6oceMtOOt8LO5zA+Q97Vw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=DADrhFaOOxcWQh0IRDn6TGNkm+heB9/0W3ELr/UCaCUgZHZE7c4+AFNwM5tPnegI4XcPEEW06MLNj5vikj8eA/5hUarm7lSxbJPs4xyoIXLhSjShkHDvNnBz9d6yhR+XjhUDVOmae2JsrFgupRIDgy5HCXfFZFhTH56GfSFYuMo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=airkyi.com; spf=pass smtp.mailfrom=airkyi.com; dkim=pass (1024-bit key) header.d=airkyi.com header.i=@airkyi.com header.b=d3kE2Exq; arc=none smtp.client-ip=54.207.19.206 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=airkyi.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=airkyi.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=airkyi.com header.i=@airkyi.com header.b="d3kE2Exq" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=airkyi.com; s=altu2504; t=1753779665; bh=dtZ8M9ETu2w0tZGRmT7fZPAaZFUL2JXhMvCbISuY7ec=; h=From:To:Subject:Date:Message-Id; b=d3kE2ExqE0y71lJxb6+MrK441CjkBOb4lsga4nAYSF2DqzYuo11T1K8igF1UVW0k0 8Iwni/SxQNSWm6AOaJc+lgfY2OMpCxvw7CENaKRsl4Y7MZBWljRKc55L0tUElIUGuf 26h5IcKzoU5LvhigWEWStvOi31aG6PmTtQ6HbMbs= X-QQ-mid: zesmtpgz1t1753779658t6c34df16 X-QQ-Originating-IP: ccvnQl2r3lBFVqXjPv6mrz6606tw2gXyLioL8U8B5zk= Received: from DESKTOP-8BT1A2O.localdomain ( [58.22.7.114]) by bizesmtp.qq.com (ESMTP) with id ; Tue, 29 Jul 2025 17:00:56 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 5067649708474818546 From: Chaoyi Chen To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Vinod Koul , Kishon Vijay Abraham I , Heiko Stuebner , Sandy Huang , Andy Yan , Yubing Zhang , Frank Wang , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Amit Sunil Dhamne , Greg Kroah-Hartman , Chaoyi Chen , Dragan Simic , Johan Jonker , Diederik de Haas , Dmitry Baryshkov , Peter Robinson Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, dri-devel@lists.freedesktop.org Subject: [PATCH v3 5/5] arm64: dts: rockchip: rk3399-evb-ind: Add support for DisplayPort Date: Tue, 29 Jul 2025 17:00:32 +0800 Message-Id: <20250729090032.97-6-kernel@airkyi.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20250729090032.97-1-kernel@airkyi.com> References: <20250729090032.97-1-kernel@airkyi.com> X-QQ-SENDSIZE: 520 Feedback-ID: zesmtpgz:airkyi.com:qybglogicsvrsz:qybglogicsvrsz4a-0 X-QQ-XMAILINFO: NXAwOXNh0CeG7jbNHxcElhLVrQfFYAhqdTEs4V/ZTJBVwCx78nClAISt 87x66kFyoY2+adZbOH0TJrpSY70cn3c8JzkcDdEVpPvOYBr4sMNodopvpjQa1iGbIkYVMYh ANyNq9yd5G1YavWHVwzlG83I/0+tuDX53KtUlvzKfEHprVAscENVEp0/pQET801+ZeVo/99 kTrlSeR8nYunJahmpIxoHwT0XnapI3SFd8y8frX+U1vxD+HHSkReXK1mLPc/uvwwZ7rmVqT ZMvD98EFe4IbDCmiTtasfklY3LLmlpLmTusKhI86xbH6MOueKHPU4BPObDSctlM77AZHBCZ g3R3nIrlgZpFciyAKrsrm7F+duztFHUu/cuE+PJwk4qckjPYPpdYo3S14PStSocbl0nDT3r K9w9EkSvuySdf6F6e2uTBoHmhOG/DaOTHNgObHTv9/c9s0O72dYtNTfdM9+UQmvqwGDHndl /EHAlG9lcv/PvC12v31+y5ze1IpfCgzCX8LL2+t7rVLVA2BfbBkXNzFuDxVpfE+IidGz4qa vCElrqca+fghYJu6u3UKkoPp33kcGe4102PP+LKJokjjxCKYM4v95FOMemVITHBhyC8YF2A uC+64zpT+3Vj8/iVtcPJyvLKhkH0r9n3dueRwZt87LvPVYE2CvkYNEefu+nxJBMHgpY2eip oZbZktGd4v7T/Vn86VopyXg6K/Ja2vYi3m+NLk6DcFOMCX0soA9MYlruujE6r09WzmrOhCM 9bYwZ1tMgo4Z8umYhitW5/NFvvO+3f7hOc8qWylk2vXGmDiZUynGhV4h63xouSacnwWSuwl U1y+juTgzE1LW2an7KiCDHiEwQ6KO0zQZOAR5zIbfvRQ9dSpviTiQH8ygpRQrsYM+GkAkvI Zyi+JKnHLHX3pPDicPWKVpXVmXZ/KTyagxAO/y3cUUm/50ZHyCaKF3LKcRmlP0mYoPSsr/s lSkxQVwVh3XwOSZAPg/9+ApZEfXt9b87w/D+YhNzDyafTqZBxHjSkYAD0 X-QQ-XMRINFO: NyFYKkN4Ny6FSmKK/uo/jdU= X-QQ-RECHKSPAM: 0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Chaoyi Chen The RK3399 EVB IND board has a Type-C interface DisplayPort. It use fusb302 chip as Type-C controller. fusb302 chip ---> USB/DP PHY0 <----> CDN-DP controller Signed-off-by: Chaoyi Chen --- Changes in v3: - Fix wrong vdo value. - Fix port node in usb-c-connector. Changes in v2: - Add endpoint to link DP PHY and DP controller. - Fix devicetree coding style. .../boot/dts/rockchip/rk3399-evb-ind.dts | 146 ++++++++++++++++++ 1 file changed, 146 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rk3399-evb-ind.dts b/arch/arm64/b= oot/dts/rockchip/rk3399-evb-ind.dts index 70aee1ab904c..aeeee6bd2973 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-evb-ind.dts +++ b/arch/arm64/boot/dts/rockchip/rk3399-evb-ind.dts @@ -4,6 +4,7 @@ */ =20 /dts-v1/; +#include #include "rk3399.dtsi" =20 / { @@ -19,6 +20,21 @@ chosen { stdout-path =3D "serial2:1500000n8"; }; =20 + sound: sound { + compatible =3D "rockchip,rk3399-gru-sound"; + rockchip,cpu =3D <&i2s0 &spdif>; + }; + + vbus_typec: regulator-vbus-typec { + compatible =3D "regulator-fixed"; + enable-active-high; + gpio =3D <&gpio1 RK_PC2 GPIO_ACTIVE_HIGH>; + pinctrl-names =3D "default"; + pinctrl-0 =3D <&vcc5v0_typec0_en>; + regulator-name =3D "vbus_typec"; + vin-supply =3D <&vcc5v0_sys>; + }; + vcc5v0_sys: regulator-vcc5v0-sys { compatible =3D "regulator-fixed"; enable-active-high; @@ -31,6 +47,11 @@ vcc5v0_sys: regulator-vcc5v0-sys { }; }; =20 +&cdn_dp { + phys =3D <&tcphy0_dp>; + status =3D "okay"; +}; + &cpu_b0 { cpu-supply =3D <&vdd_cpu_b>; }; @@ -55,6 +76,12 @@ &cpu_l3 { cpu-supply =3D <&vdd_cpu_l>; }; =20 +&dp_out { + dp_controller_output: endpoint { + remote-endpoint =3D <&dp_phy_in>; + }; +}; + &emmc_phy { status =3D "okay"; }; @@ -341,6 +368,71 @@ regulator-state-mem { }; }; =20 +&i2c4 { + i2c-scl-rising-time-ns =3D <475>; + i2c-scl-falling-time-ns =3D <26>; + status =3D "okay"; + + usbc0: typec-portc@22 { + compatible =3D "fcs,fusb302"; + reg =3D <0x22>; + interrupt-parent =3D <&gpio1>; + interrupts =3D ; + pinctrl-names =3D "default"; + pinctrl-0 =3D <&usbc0_int>; + vbus-supply =3D <&vbus_typec>; + + usb_con: connector { + compatible =3D "usb-c-connector"; + label =3D "USB-C"; + data-role =3D "dual"; + power-role =3D "dual"; + try-power-role =3D "sink"; + op-sink-microwatt =3D <1000000>; + sink-pdos =3D + ; + source-pdos =3D + ; + + altmodes { + displayport { + svid =3D /bits/ 16 <0xff01>; + vdo =3D <0x00001c46>; + }; + }; + + ports { + #address-cells =3D <1>; + #size-cells =3D <0>; + + port@0 { + reg =3D <0>; + + usbc_hs: endpoint { + remote-endpoint =3D <&u2phy0_typec_hs>; + }; + }; + + port@1 { + reg =3D <1>; + + usbc_ss: endpoint { + remote-endpoint =3D <&tcphy0_typec_ss>; + }; + }; + + port@2 { + reg =3D <2>; + + usbc_dp: endpoint { + remote-endpoint =3D <&tcphy0_typec_dp>; + }; + }; + }; + }; + }; +}; + &i2s2 { status =3D "okay"; }; @@ -354,6 +446,16 @@ &io_domains { }; =20 &pinctrl { + usb-typec { + usbc0_int: usbc0-int { + rockchip,pins =3D <1 RK_PA2 RK_FUNC_GPIO &pcfg_pull_up>; + }; + + vcc5v0_typec0_en: vcc5v0-typec0-en { + rockchip,pins =3D <1 RK_PC2 RK_FUNC_GPIO &pcfg_pull_none>; + }; + }; + pmic { pmic_int_l: pmic-int-l { rockchip,pins =3D <1 RK_PC5 RK_FUNC_GPIO &pcfg_pull_up>; @@ -400,10 +502,48 @@ &sdmmc { status =3D "okay"; }; =20 +&sound { + rockchip,codec =3D <&cdn_dp>; + status =3D "okay"; +}; + +&spdif { + status =3D "okay"; +}; + &tcphy0 { status =3D "okay"; }; =20 +&tcphy0_dp { + mode-switch; + + port { + #address-cells =3D <1>; + #size-cells =3D <0>; + + tcphy0_typec_dp: endpoint@0 { + reg =3D <0>; + remote-endpoint =3D <&usbc_dp>; + }; + + dp_phy_in: endpoint@1 { + reg =3D <1>; + remote-endpoint =3D <&dp_controller_output>; + }; + }; +}; + +&tcphy0_usb3 { + orientation-switch; + + port { + tcphy0_typec_ss: endpoint { + remote-endpoint =3D <&usbc_ss>; + }; + }; +}; + &tcphy1 { status =3D "okay"; }; @@ -418,6 +558,12 @@ &tsadc { =20 &u2phy0 { status =3D "okay"; + + port { + u2phy0_typec_hs: endpoint { + remote-endpoint =3D <&usbc_hs>; + }; + }; }; =20 &u2phy0_host { --=20 2.49.0