From nobody Tue Oct 7 02:01:41 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 AB39F2D94BB; Tue, 15 Jul 2025 11:25:19 +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=1752578724; cv=none; b=GAnuoLshZsHGHkB6AzSxTu82V0JWJ98AgjXjbDMHDmkMHN8kBay5KB6xJ/rxN5/Z6DqzOHvcqe+qgFUtyROrrC2GO2K8/kRyUiuCsFnxCdHC8Ie0/n8bu9Lt3MJs9A8JuYp7zTgSGhE5oUxGxZEjoZ4oApKrb4b3i3++AHTzgoc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752578724; c=relaxed/simple; bh=6Vvux8Vkg6PuVx115aocWutY2yl43wJ2D3fmJL+rdDI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=btWzkeEVGljU6SpIpNukcuPFd7nyGUmgqJumWcLb4Z10mRI4mWG7oJOh5LhmVqPfVIJR1tTCfWrTIKn/NO3jgHgu4LA/H4bmpkGx0MwkJudluZbfHq04gnxL82FOZx/xahlO8yh/PfS+pCxd0EkdUtLAasgOTxrGlV8Lb0TWJmo= 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=tjkZBLTq; 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="tjkZBLTq" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=airkyi.com; s=altu2504; t=1752578710; bh=6Q8tj7y2fVh1DqqXLpoIzvx75MH7E6vfXU9jWGAciCk=; h=From:To:Subject:Date:Message-Id; b=tjkZBLTqMYIHD96FGr/Vv43hg++2HyCw7I8wfwkhCsog2CrTb11uJHLpqiIJS5ps7 AoXeu+tIVTOkl2bHvx+9flHU0L2wzImOXxRd+N+fp4Uqkz8Q7QgLobhJKR3LH7M+Sx rpw638otNRTM2zAmwKnw5t9F3DhiVwqxukLE5HBM= X-QQ-mid: zesmtpsz3t1752578709t1424522d X-QQ-Originating-IP: Y2jgY0DzpsnsowblI/Y8vYsFKW2TRFdQuFkynBZV9Zs= Received: from DESKTOP-8BT1A2O.localdomain ( [58.22.7.114]) by bizesmtp.qq.com (ESMTP) with id ; Tue, 15 Jul 2025 19:25:07 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 6650864007286814184 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 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 1/5] dt-bindings: connector: Add displayport connector for hotplug notify Date: Tue, 15 Jul 2025 19:24:52 +0800 Message-Id: <20250715112456.101-2-kernel@airkyi.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20250715112456.101-1-kernel@airkyi.com> References: <20250715112456.101-1-kernel@airkyi.com> X-QQ-SENDSIZE: 520 Feedback-ID: zesmtpsz:airkyi.com:qybglogicsvrsz:qybglogicsvrsz4a-0 X-QQ-XMAILINFO: MIXpHopat2IaCfng877wRqNTO5c3xi2P54dqj20cjkahUzF0YO1gIovH u0DuCL67cE+L9dcr7GNkd1ApfeTpt48RkCO1kROkVss6vJSqjwH2tFvc4GAA6RmYLY5l77n 4RgJ2rTmZeHUviqWNtXkBxCLT6TeolFUSU1GgCLMFbhnqmgOOJ+ccBidL+ODZ4tOPFydb8A Cif19thA4/JsZi5OBDtioja1O6gPWQXI6jQX7MiUI02IClP7qbR2HslVgzJYEEvsonlP6nB Xxv8B/t1m2/DQbH8ByLBgdqJJZX5w2ntjQ7laMJG7ptECad4zInfGTXuifBJfalEMxha233 6PAXyARSqvZZRNqvqMoidk3UjKiuOgSfXkbxZ5D1LPkueCNnHJZKNoIpo7d75DGaeK1RLsu +iBcXxtwanBMVwCxAjk9bW4m0mvlxaflqn4dIkhDLSmT6pwtpaU7GPDoPvx4zlvkB8S3G5v DER52OgnP6u7isgC+tOZYoDrPpZuLylPIp0t8+EixsYkECDqmcYsvhZZXl7kK0RDbrRkWtC AOV9PqzS/QJEfbLp/X0lfM3vGlM1NrZZDOFLrQi3l/i7v/Av185fpgbatjNVzYJJSpbtr8J 6ChShJVxhgM2MfC2XLTBmaR4S9Nlf6NXExQdy1FOhLwenMQS1NTKGmSYJOmr1QYy8ke305F kWoOjlRaoTFNYBdwDVfQbBefPZue72d9VgAwFlUQafi4qBswnZLvV8ItEjY6Q+tQYfa44au v7gbo/nwJOujuJWfp9EZXF4J0lgxBp83Q/rzEagweiIA+p0xPpZfa41owSLBRgr31ZhmYQQ E8BoISwSVwAlHMXgMp326pDvV1/ctFwgNoL+9K3z3MwugIUWCwTlkFimNgUgvBnMM4L1pjm ebfsIOS0aeH77EhCqSHSmaWJNtqmpC64drmw8Q+gniZGyiJdP/Z2XPVupl9+fH1AulolMpH V01DPkgc70TEsJ993p3ZWcmDIMWDO8sOGbbwTlxEf3eMiUOh4lab4o9luCANQ2xqZa4KUf5 q47g0G5Q== X-QQ-XMRINFO: NI4Ajvh11aEj8Xl/2s1/T8w= 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 USB Type-C DisplayPort alternate mode driver will find "displayport" property for DRM hotplug event notify[0]. [0]: https://lore.kernel.org/all/20210817215201.795062-9-hdegoede@redhat.co= m/ Signed-off-by: Chaoyi Chen --- .../devicetree/bindings/connector/usb-connector.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Documentation/devicetree/bindings/connector/usb-connector.yaml= b/Documentation/devicetree/bindings/connector/usb-connector.yaml index 11e40d225b9f..ccb258972cd6 100644 --- a/Documentation/devicetree/bindings/connector/usb-connector.yaml +++ b/Documentation/devicetree/bindings/connector/usb-connector.yaml @@ -300,6 +300,10 @@ properties: $ref: /schemas/types.yaml#/definitions/uint8-array maxItems: 4 =20 + displayport: + description: A phandle to displayport connector for DRM hotplug event = notify. + $ref: /schemas/types.yaml#/definitions/phandle + dependencies: sink-vdos-v1: [ sink-vdos ] sink-vdos: [ sink-vdos-v1 ] --=20 2.49.0 From nobody Tue Oct 7 02:01:41 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 A17F42D878C; Tue, 15 Jul 2025 11:25:22 +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=1752578726; cv=none; b=IJPng4Ehj4OCU4Div7ar54ppc+fQL455Nbb83aekX7A7Kp0xaV+zPyvfecNLxc0mFleKuZUNqu/pr17C0F/5VbAbpUYX2qCxhyVdi4OgrU4JAYqDuBrexR4hEPObsAVUlL4/zhU6YCSkxV5N0BXAkdkw642L8BEXrpGcbWEg8nA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752578726; c=relaxed/simple; bh=Yxu6FQwHhhkRhorIrxlY9BdpbQWdym9cjQ4dEhAHzTk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=Z9gA0A9v/eO+p3akzczSJCFKixenxmMHILBkwRQZjw/mfBcN+At6EXpW+yWUP9pImJrggCth9OkyMuL3UgfRO/Pzgj9t7NiZpvn+2sN2ZzNd3XklMnJ8xn3eYhJZ7VIiliARnOZw/uodmjWvzKus7wLgFWATWX3BAavcGZ4kLxY= 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=KVkb7jMO; 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="KVkb7jMO" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=airkyi.com; s=altu2504; t=1752578713; bh=PdxuukrMJyMvzJ16KhGFmRwb53DnIsrK3r7HucbSbmc=; h=From:To:Subject:Date:Message-Id; b=KVkb7jMOibljmFjUAAczD7NExhTMZofA6A1vS8onw/VukAkdJa0BpdUQaLerjflWF ml+gyeEV9KIrAFPK/aDHo2K64WAZJO7n6SyziNImAWGjniozeplElK9gZGEAId60u1 mflPw/r97vwxlAMocYFnERWybgXdfvheXEIwpvQg= X-QQ-mid: zesmtpsz3t1752578712tf0188769 X-QQ-Originating-IP: XVdB7d8ltncWpCfKxfEuv57ere8QMwHyZ9NM2AK9eVk= Received: from DESKTOP-8BT1A2O.localdomain ( [58.22.7.114]) by bizesmtp.qq.com (ESMTP) with id ; Tue, 15 Jul 2025 19:25:10 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 11091658648405409275 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 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 2/5] dt-bindings: phy: rockchip: rk3399-typec-phy: Support mode/orientation switch Date: Tue, 15 Jul 2025 19:24:53 +0800 Message-Id: <20250715112456.101-3-kernel@airkyi.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20250715112456.101-1-kernel@airkyi.com> References: <20250715112456.101-1-kernel@airkyi.com> X-QQ-SENDSIZE: 520 Feedback-ID: zesmtpsz:airkyi.com:qybglogicsvrsz:qybglogicsvrsz4a-0 X-QQ-XMAILINFO: MmPNY57tR1Xn6g0A9TeECUkHxPvbvQBl3nIZYkP+CjYLJiW3Nb96Uhw2 GTh93ePrTik//Ow6GZ42lTAlvuMv2OkQYwzmpZnuV5Yvb87wJFPSeB60r+0iqUQ6oG0I1gm igVFDKJlxHUCOn2zd37/vKNfR36EzUNBZZGB5wRdIJ/Jw0uTp1sL2S06UN9mA+25neLdplm um6ekG1A3c/xhe1JzWzRJZbRER+N1xyic43u0siTAU4OBUqXGc9LBUkurSfT6C5cZ7F4Z9W unW9HMsYCzoh7g32aQD0+8mtaNLQVmpKAZaXrBXQxjktycKdBbYuB4q1Unp4BO8aDqG17kc GbglWKpfrUBjoTXjz4z8IHVFS+sDCULaYfdBTuWMmJoJl2da1PVESmEaGARBoKO8PEDfxVo RS1IxLa45xTHyP7Gu40wOwxDes6X83epd//U3lGJdbxYZZ2b83y4Aqdg7Jwgv1NiWhz7kae TXaFC9mWvFAr/ca+wxnEOuv3TTcIkA8Ymx/zfBKDGSdDJ5s3EukKnmvdBeG3pgS5vnpF7V1 9ltxHFd+1Yf5MzmWmAqC88pwSgGD+X5/H373QGTAmUAHHYdhpRn5T1kw4v65HXVmtT1tZ5w Q/9wTpH1oKSwo5DyZYOjFjbOfWRLBGNeZC2H/NinsT9uCTKGoQ+3ZY6hwRW02opKL70YAQv A0rEDfT+MVjocM6b8V2ZLVXjKg1heJAPz/uLCVcFDyg9QT/bxiDWd5SvC/rNh+lkwISpKeE eN9mK3Il+oWn9ZyE6LEuAmwYKp9K2qu889SHVHEQuRbQquomI+5tblAmTQ+a74ExxiI+wMF uUY/hcMg/mtta3KVagROJo4ogBO2xRCEnrxwyafabr7ZGfLjb5VkpYWn/B9pycCJMubj0Uf 2HshmxBJXs3T0Z4joW1b9FC4B8AYWigSNZBEzWRHgUfqDWXw2fD+HY2579mva56wuOWW2SM ywGGR0a+ipE9iVYcj0em8DfXmbGnYvDlGOWEk/VkArad162nw7ij7PkPXzGqNxRKmq8WaPN SLfPsffw== 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 Add support for Type-C orientation and altmode switch. The Type-C controller can be specified to handling switching. Signed-off-by: Chaoyi Chen --- .../bindings/phy/rockchip,rk3399-typec-phy.yaml | 14 ++++++++++++++ 1 file changed, 14 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..a885c6893a90 100644 --- a/Documentation/devicetree/bindings/phy/rockchip,rk3399-typec-phy.yaml +++ b/Documentation/devicetree/bindings/phy/rockchip,rk3399-typec-phy.yaml @@ -43,6 +43,20 @@ properties: description: Phandle to the syscon managing the "general register files" (GRF). =20 + orientation-switch: + description: Flag the port as possible handler of orientation switching + type: boolean + + mode-switch: + description: Flag the port as possible handler of altmode switching + type: boolean + + port: + $ref: /schemas/graph.yaml#/properties/port + description: + A port node to link the PHY to a TypeC controller for the purpose of + handling orientation switching. + dp-port: type: object additionalProperties: false --=20 2.49.0 From nobody Tue Oct 7 02:01:41 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 DFF662D9EF1; Tue, 15 Jul 2025 11:25:25 +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=1752578729; cv=none; b=JmEx4ll3eJ/2rCKq57Xol7OyBR1knj/OJLfrFxLUUDGWjbiKlB8PvGA8z1AyEy4Hxr4Ifh+1RrLxo/AfD1cr85+g5ZaNiQTCdxXykt62obV4pM8LX+fM4SAzcsogrel9/r2MeiBIp0QDwREIq7iBoQknpJeBCsgbidrXWbkTQyg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752578729; c=relaxed/simple; bh=CUlh83HTLDMITDA/dm1ilFXe+eYqBImg8woT42getj4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=nh8f/nMCXGuooJaL+NPgJT/xTn+NaIdNly7bC3nz3MXlAOb+ooo4cKaEF7GWbgnoC3jxpszYGOi9jvF0TBq0j3xft9ycyx6W+gTEJbeCjyHD6OdSgOp534t+sW6lO4N8MCFAel43qtg+NyqnaByFY2D6f52d80oEm+4gQHNtMzE= 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=KDRZt9MH; 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="KDRZt9MH" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=airkyi.com; s=altu2504; t=1752578716; bh=48leRxD0TU7V/c6N2/mupnLAwgByK82JSI8+Zfl28GM=; h=From:To:Subject:Date:Message-Id; b=KDRZt9MHJCUd8kTr8dQqRhablj49fuvItWNybsiimDWk0dw4Cu0jqziahRS1SCsKO 52YuoaMSwGyZt1D8LUfI1YIf1y1GKIUk+R68E5G+Gu4w0IApZzH7PLH+01ogzhR0wU YzUO7A1QrwTJezCtizYeAw+PSN4V24sy9FkGYQGo= X-QQ-mid: zesmtpsz3t1752578715tf1fca394 X-QQ-Originating-IP: nQFR1FU7A+T0nhqIXZpgEEqxJ7PICM/rP4YGE14hgwI= Received: from DESKTOP-8BT1A2O.localdomain ( [58.22.7.114]) by bizesmtp.qq.com (ESMTP) with id ; Tue, 15 Jul 2025 19:25:13 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 13236651797799962325 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 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 3/5] phy: rockchip: phy-rockchip-typec: Add support for Type-C TCPM Date: Tue, 15 Jul 2025 19:24:54 +0800 Message-Id: <20250715112456.101-4-kernel@airkyi.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20250715112456.101-1-kernel@airkyi.com> References: <20250715112456.101-1-kernel@airkyi.com> X-QQ-SENDSIZE: 520 Feedback-ID: zesmtpsz:airkyi.com:qybglogicsvrsz:qybglogicsvrsz4a-0 X-QQ-XMAILINFO: OKKHiI6c9SH36/h/9qneLh/CrDriZcAtIzf7jMfhunZQEi/qh0jlip5C H+25hXjrK0lbz0ahKTX6KLP4Syd92zo3/HPl37EeMOK3lHlaelO2MVtpk92wtNYCYI/Evfz YGMCwqqEncWqK2FaVLkvsUH0ID41hLtX5jQ5KjCiioHgIMxJK8zDvjKVoSKJNQe2GaRRm6J CuMMU8k7bDp1DFeywBPLM2dmSnhntpnKRZNijqMh/d1TTjoAAl6QN7zDrmMmNXa6tvfEq+W JEzm0/qYawtMy2Rz9gnDH3XuUxHOVxyIErKMIr/2FHyZU9QyIJwlcv/m5Ohyp/tL3/hw/vz EqtEl4eanrmNbA2bgiQVOyj0y5q6ClgfhfjcQUQEycio6vr3KiqDdmG31Q2QBa4UmEzg2eR ywf6tpgloBH4FO4vPQbpeY4JCtLT3sLoinjLqc1+KxirBVlArh8ztxd6fxgYjOqlv/IoyoI 5zjY4fDpr25aAw0E2NHL2zXk0kCrfiLfYAYJidKtKMv1EF4T+z/MCndWUW9zmiZn7hj7E6S xGDX/6b4xx1qnDK1RDK8RG1mqeySVSo7v3wb0XiuWVtPmUpt9Fkp9KV73OGO6OAHh2nWu3D 7ep74Rg6/6aeJFsOrxqdI1z0WYCyR81SjD0ni8W1JcGNiNJg4pY5XA86AadPluPChHR36i/ AByGBB9ULwm1ycx+UtS/YZsfgkE4HXgNJQeEimoZp2sl7O9FVu/Jsj6S44cHwpsOJpVC5sS f9CUZ1TR6aCuVAM1/by8WGSz1JoMxiOhx7JSTqYqsyYMBGPKPfkR9++4wGbcP+PSeOEdw7H 322SPQJoKT8bxP+XHx6TYtIQI6IsUmlGD4s5NSELhMBdbAkyy9RTsyC1LzgXKNq24iCWhWg GCvNpE6R0jI5V52dx6d6gnaaCgAZEFOmbuJkqTGc6xLBwm5uJCRYdBse+dpnI33eI/aFi2y HZ8aH+gUmCdv7nUJsjafnLZBuqrZKP/fPR8+oPMS1YECimxs3PbRJ/hlTWzAiSLuHuEI9Dn 9gaUO5WA== X-QQ-XMRINFO: MPJ6Tf5t3I/ycC2BItcBVIA= 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. The extcon device should still be supported. Signed-off-by: Chaoyi Chen --- drivers/phy/rockchip/phy-rockchip-typec.c | 335 ++++++++++++++++++++-- 1 file changed, 319 insertions(+), 16 deletions(-) diff --git a/drivers/phy/rockchip/phy-rockchip-typec.c b/drivers/phy/rockch= ip/phy-rockchip-typec.c index d9701b6106d5..ce2e710c1738 100644 --- a/drivers/phy/rockchip/phy-rockchip-typec.c +++ b/drivers/phy/rockchip/phy-rockchip-typec.c @@ -54,6 +54,8 @@ =20 #include #include +#include +#include =20 #define CMN_SSM_BANDGAP (0x21 << 2) #define CMN_SSM_BIAS (0x22 << 2) @@ -286,12 +288,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 +340,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 +360,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 +417,22 @@ struct rockchip_typec_phy { struct device *dev; void __iomem *base; struct extcon_dev *extcon; + 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 +503,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 +885,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 +912,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 +958,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 +998,51 @@ static int tcphy_get_mode(struct rockchip_typec_phy *t= cphy) return mode; } =20 +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 int tcphy_setup_orien_switch(struct rockchip_typec_phy *tcphy) +{ + struct typec_switch_desc sw_desc =3D { }; + + sw_desc.drvdata =3D tcphy; + sw_desc.fwnode =3D dev_fwnode(tcphy->dev); + 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)); + return PTR_ERR(tcphy->sw); + } + + 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_cfg_usb3_to_usb2_only(struct rockchip_typec_phy *tcphy, bool value) { @@ -989,14 +1182,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 +1201,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 +1210,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 +1230,68 @@ static const struct phy_ops rockchip_dp_phy_ops =3D { .owner =3D THIS_MODULE, }; =20 +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); + + return 0; +} + +static int tcphy_setup_typec_mux(struct rockchip_typec_phy *tcphy) +{ + struct typec_mux_desc mux_desc =3D {}; + + mux_desc.drvdata =3D tcphy; + mux_desc.fwnode =3D dev_fwnode(tcphy->dev); + 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)); + return PTR_ERR(tcphy->mux); + } + + 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_parse_dt(struct rockchip_typec_phy *tcphy, struct device *dev) { @@ -1095,6 +1350,25 @@ 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 int rockchip_typec_phy_probe(struct platform_device *pdev) { struct device *dev =3D &pdev->dev; @@ -1142,6 +1416,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 +1426,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 +1434,46 @@ static int rockchip_typec_phy_probe(struct platform= _device *pdev) } } =20 + if (device_property_present(dev, "orientation-switch")) { + ret =3D tcphy_setup_orien_switch(tcphy); + if (ret) + return ret; + ret =3D devm_add_action_or_reset(dev, udphy_orien_switch_unregister, + tcphy); + if (ret) + return ret; + } + + if (device_property_present(dev, "mode-switch")) { + ret =3D tcphy_setup_typec_mux(tcphy); + if (ret) + return ret; + + ret =3D devm_add_action_or_reset(dev, tcphy_typec_mux_unregister, tcphy); + if (ret) + return ret; + } + 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 Tue Oct 7 02:01:41 2025 Received: from smtpbgeu2.qq.com (smtpbgeu2.qq.com [18.194.254.142]) (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 1F17C2DE6ED; Tue, 15 Jul 2025 11:25:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=18.194.254.142 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752578733; cv=none; b=hhpPSkd0uyKTR5mdzsqd9otB0tF9KEk39uDUdb6JiV7vSQjhtkgULPOid4vS2LGC4Uo+pU5li8sXHhgbFeanKFzMpc/V6OmZF6dnOJhOEJEpzmrekcSwKboBh1yhYeQNp7+6Ivv5GuuSyy/BiK8+Nlo/eFIMNG0XGS+qE1TSVLg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752578733; c=relaxed/simple; bh=4FsiX6RUU3fRxbqUZRBFaMPrgVBPWcb0ZWgsUliivsc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=osKQmTF/PAm/jeOQ2Ojh/m5eQiVmjYMw+A+ar7dmPW34RdjTAR2CERAyiG6/+oBLSuNyuSWi2yxQhw/spUhAav2pM1ji9ozKy9iLLlLe+mhawl9Ez57TJrEoK1t/Er0VFn5FY3HDSnHVNep+TJWOTOBpO4h9k6ZpSWq6LNtstDc= 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=E8cHG9do; arc=none smtp.client-ip=18.194.254.142 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="E8cHG9do" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=airkyi.com; s=altu2504; t=1752578719; bh=/b/lAhCvsonGE8Z852+2G/07p0p8yhZ5USq40tfyzbw=; h=From:To:Subject:Date:Message-Id; b=E8cHG9doUmvgIe91ixrxp7NGGFU91Z+nfPnlc1kJZvHLL7x3LwPgV0bngLpoPqpJ5 2/zNuTXR+oarxdq2vZKHzqVoO1lPW1JRRcRJPY7v/mETlffiAt62Bgkbb4yrsDkXFa 60x4S0lTEM5+XIuJdAbRfuo3bqguwwLlIeCe6aJc= X-QQ-mid: zesmtpsz3t1752578718t9af83c66 X-QQ-Originating-IP: 9mUY+DgpKeGKBIqUqnlFegV3kCI4AR72owXY37bfQwc= Received: from DESKTOP-8BT1A2O.localdomain ( [58.22.7.114]) by bizesmtp.qq.com (ESMTP) with id ; Tue, 15 Jul 2025 19:25:16 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 15861609550683848417 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 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 4/5] drm/rockchip: cdn-dp: Add support for Type-C TCPM Date: Tue, 15 Jul 2025 19:24:55 +0800 Message-Id: <20250715112456.101-5-kernel@airkyi.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20250715112456.101-1-kernel@airkyi.com> References: <20250715112456.101-1-kernel@airkyi.com> X-QQ-SENDSIZE: 520 Feedback-ID: zesmtpsz:airkyi.com:qybglogicsvrsz:qybglogicsvrsz4a-0 X-QQ-XMAILINFO: NYz8c2bcbB9MQnNn3zMpWCyy1wOJpwH1FI3r+N0Of+zkM4IeDaarohS6 2TB+9N1Q5HxUwcddBd1NwAaMW+owNwEHngX+SJM8ipoVSgPy5GLFccR6d65+flcYIrrKXnD iekzUip/Phux2bJ5vgX22crFnC5moFuaclTB2sOO1RNGAHUX/nFB0mof2uhl5LYHsbdKg3G 66o3ehFXcxXLi+xWgEsJH1aiQxvH8JhCDayo8gj+NowF+V3BzLyJd46qoxFxHfgKr4MoL9J /R4/LhJcNWO+Nm3TtlZqmtSOzp/EQl8MfsEWVMCrUeSn9iqq3BOmwCiiT6H8EVFszGobsho l6WCukfoYv7aLx/egZlBkaZ8gEjLqO4xeTRERq8tc8RSulhbxT9QXnuWa0rhMbgLQH5G3Iu 7W8ZE6YiMlhy7vQbNfp3u5Jfc9TloFaAR3F1RuTPzc4CyNH0qLRSTVcAR9ksrJBu+FXqvTP OBb4IsVwP5jJGPfEpTn3eW71tSByYaMaVJvdUB3zTOSdCIKnIf+Mb8f3qjmNOWAf/l+Enon 7SCv193aALXdKgPToJWOCle2FLzGQko7BSDUVKLqNZZIYHH+R9gw63KmtcUC7z/Nr3+BBjz HW0/xAWVCo3l16Rmwo1PkkLXyWenrLO9jO01pQdC5foHq3y5cwgGIszUE2Bo2cZliGYeoOq FDE/ukclS3z5tl9FqvT3aboEVifNc5RkNCYNJ56BUz9EI2TCRBclPqNxQ/1m82e6YH1z7YO dV2aYYuGUbLF3Z4SvZdCUQC0UCx7LJLYB/SNjpbOy3Ef60c+jOpD5fM1RhGrr8QUErT0ZWG 34SpWsU0Cc6l1VaHPaUC4kgmjpRgvrbch/S/D5EiqaJr6sTDKBouNLXPhPCPvnRr+uFDTHG GZWoN+6l+6o4nPRiqnTDTcM4lJgsKNt9j9ORUCLfUfIi024p/99WRL1qD5R94GDLDK3xTsL OxS7ezP71+E6B96iLeNW/GcBz4SvkasqHG/Q7AQtu/v1yKw== 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 This patch add support for Type-C Port Manager. If the Type-C controller is present, the DP hot plug events can be notified with the help of TCPM and without the need for extcon. The extcon device should still be supported. Signed-off-by: Chaoyi Chen --- drivers/gpu/drm/rockchip/cdn-dp-core.c | 37 ++++++++++++++++++-------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/drivers/gpu/drm/rockchip/cdn-dp-core.c b/drivers/gpu/drm/rockc= hip/cdn-dp-core.c index 24f6b3879f4b..3354d0e4ae4f 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,14 @@ 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); + + 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 +845,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, @@ -938,9 +953,6 @@ static void cdn_dp_pd_event_work(struct work_struct *wo= rk) =20 out: mutex_unlock(&dp->lock); - drm_bridge_hpd_notify(&dp->bridge, - dp->connected ? connector_status_connected - : connector_status_disconnected); } =20 static int cdn_dp_pd_event(struct notifier_block *nb, @@ -1028,6 +1040,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 +1135,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 Tue Oct 7 02:01:41 2025 Received: from smtpbgau1.qq.com (smtpbgau1.qq.com [54.206.16.166]) (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 B8BFB2D9EE4; Tue, 15 Jul 2025 11:25:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=54.206.16.166 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752578729; cv=none; b=eMLT7+W74wWr4T4JFzxeobdnRqKMH1osfWziRPBHHTu7nBGa4i1ZHMljFQEetfNQ7/Wv9QcWD2rFD4BWt16Z3q0ugdvULkU6teVWIH7V3gQl5doD689SYR5DwbjlcuPVrzx8kP5pdt6TY6rqvlLnsSHnyYMplO8/0wPMk4qdqNY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752578729; c=relaxed/simple; bh=9rlfFkpaGE/xNvJ6Q/+q4wWQK5zz/tQKZ0BYTyxV1GI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=ccI+Eho7vaqYC3dySAJlAsiGjteRu3lLmoi2PX0Cmv+/OuwHoNXu/giU86+aWJ11OK3W5gWWCcguKjCpRpSMv3yFpq7MBhjZHeZKSLkcKr/snIIBN09n8H8l2suOBL12p4D43H31TqAi7exber5ZU4E0pXGbc5hpVYsA92aop0c= 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=oTsGq3X4; arc=none smtp.client-ip=54.206.16.166 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="oTsGq3X4" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=airkyi.com; s=altu2504; t=1752578722; bh=7XLP8/2EgWjHsxetg5+9fnw9v4HpdEFPJtMEGTR/Kxc=; h=From:To:Subject:Date:Message-Id; b=oTsGq3X4Qmo9xKb9GmhQEbVxlFmjShxns2jMM9L4z6lnDXiBJ52Q2J1XvIbXQcduB SGQHhRQqnSEFblu6756iv2BZgaZOgjqZpkg6/r1Qz46KGoN5UIoWiHJriqzKZd4lfx HZ+Os9rTY2V6FpZEvTVi5Wo66m7X+1qssG/j3Uwg= X-QQ-mid: zesmtpsz3t1752578721ta9aaee12 X-QQ-Originating-IP: ziPpytnZRUvE2L1gAOs1LkViZuJVWgTk5QV/nyGdLmA= Received: from DESKTOP-8BT1A2O.localdomain ( [58.22.7.114]) by bizesmtp.qq.com (ESMTP) with id ; Tue, 15 Jul 2025 19:25:19 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 3805871955137023780 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 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 5/5] arm64: dts: rockchip: rk3399-evb-ind: Add support for DisplayPort Date: Tue, 15 Jul 2025 19:24:56 +0800 Message-Id: <20250715112456.101-6-kernel@airkyi.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20250715112456.101-1-kernel@airkyi.com> References: <20250715112456.101-1-kernel@airkyi.com> X-QQ-SENDSIZE: 520 Feedback-ID: zesmtpsz:airkyi.com:qybglogicsvrsz:qybglogicsvrsz4a-0 X-QQ-XMAILINFO: MdoRYM9mYrydyPm0BSyRKlE7e3YoDpl5S8t6pg10+rU4hQ7g/4vTYN06 AeUB1eQkWLSZIKg/4e6LIxlxtiBq3TySoJqedUr1QcDdYsH7ZnIO9I1GYHQTvIo262ZRr/8 /PV4gdmIqz6SxkU8a2r0AkYKUvksrB0EBmLLsDO1726JZ5lCzKNySAHrKm6a0uUW9zfm3xY Bz4D/pHsHZ6YcrAVAuVw23CCJPz5tHc8hP3phthmWnP3IQPfrYSinB6zZz8tSHnv+uX6UzB jozotE60rn1Td7L5rAG9RmGfbKRd8mEvCc6Lnav7uKSYF+CbdDrd8vBJOuacd/5vdA8idJg APOgsjV+YvvAYvSbDqrM4CkUmqCbZoiIUWXLup8np5ncxCUeO1Tua6yrXbY9OaW+JyaA7tV XkcaQBh2FGZC2dGNQ8gK7+yzyzeGxdGy4NKhf3leJJXijtfO2UgEoVRmy0Sp+WVlxRnG5xY Ju0dpeE2JAb7A1QCVJrtsIjC4vJph2K2Jb9E/j+kXQSOKB/zJme01+uLFga6aFtzMIs1Eku uM7q0yMOihcpLoXuPT+gIMSpBU7Bf75L3a2mCb21LxJmNQZ+nffFlaHaatPoKoJ3O00ZDjo XPyrj/UB3MC4RPl5o47PPSrurchbSIe/b14im0c3/u0u82qz/38CtF7FjgTZcndKFAEqEcj /aRWir67gjU08G7IrqdfjCDYpU5RYt8IwCi/aodSAocNp+7fAPW48OttNiWy4ImNRHbZ5Gm r6KuOQxfyRRMCfIAO9Ab6pJO5N0YUfYWlWoDpwwSnWeTY+DSSbtu2DVx+82hjFr2cJBhgF4 ATxcXmndmFSicy+hkQKqGiInOO5a8Umg0o6zAQdaOVfiqRLnq41S+/li8ZNomBGlAFUNzCT CywA8PJoJsZP5Sky7qd/UFiJj8vs9G6r4lYD7sEV8Ga/2bPCJCk0seZPr9x+Xi8e/Dq74w+ 5YB/pdL5bwtHXloIlUjOzvceS1bjTTTiTSqPAFfxB9YjnAf/tuhiidNms 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 EVB IND board has a Type-C interface DisplayPort. It use fusb302 chip as Type-C controller. Signed-off-by: Chaoyi Chen --- .../boot/dts/rockchip/rk3399-evb-ind.dts | 119 ++++++++++++++++++ 1 file changed, 119 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..9ceda32456a0 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,16 @@ chosen { stdout-path =3D "serial2:1500000n8"; }; =20 + vbus_typec: vbus-typec-regulator { + 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; @@ -29,6 +40,16 @@ vcc5v0_sys: regulator-vcc5v0-sys { regulator-max-microvolt =3D <5000000>; regulator-min-microvolt =3D <5000000>; }; + + sound: sound { + compatible =3D "rockchip,rk3399-gru-sound"; + rockchip,cpu =3D <&i2s0 &spdif>; + }; +}; + +&cdn_dp { + status =3D "okay"; + phys =3D <&tcphy0_dp>; }; =20 &cpu_b0 { @@ -341,6 +362,66 @@ regulator-state-mem { }; }; =20 +&i2c4 { + i2c-scl-rising-time-ns =3D <475>; + i2c-scl-falling-time-ns =3D <26>; + status =3D "okay"; + + usbc0: fusb302@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>; + status =3D "okay"; + + 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 + ; + + displayport =3D <&cdn_dp>; + + altmodes { + displayport { + svid =3D /bits/ 16 <0xff01>; + vdo =3D <0xffffffff>; + }; + }; + + ports { + #address-cells =3D <1>; + #size-cells =3D <0>; + + port@0 { + reg =3D <0>; + + usbc0_orien_sw: endpoint { + remote-endpoint =3D <&tcphy0_orientation_switch>; + }; + }; + + port@1 { + reg =3D <1>; + + dp_mode_sw: endpoint { + remote-endpoint =3D <&tcphy_dp_altmode_switch>; + }; + }; + }; + }; + }; +}; + &i2s2 { status =3D "okay"; }; @@ -354,6 +435,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,8 +491,35 @@ &sdmmc { status =3D "okay"; }; =20 +&sound { + rockchip,codec =3D <&cdn_dp>; + status =3D "okay"; +}; + +&spdif { + status =3D "okay"; +}; + &tcphy0 { + mode-switch; + orientation-switch; status =3D "okay"; + + port { + #address-cells =3D <1>; + #size-cells =3D <0>; + + tcphy0_orientation_switch: endpoint@0 { + reg =3D <0>; + remote-endpoint =3D <&usbc0_orien_sw>; + }; + + tcphy_dp_altmode_switch: endpoint@1 { + reg =3D <1>; + remote-endpoint =3D <&dp_mode_sw>; + }; + }; + }; =20 &tcphy1 { @@ -461,6 +579,7 @@ &usb_host1_ohci { }; =20 &usbdrd_dwc3_0 { + usb-role-switch; status =3D "okay"; }; =20 --=20 2.49.0