[PATCH] arm64: dts: qcom: x1e80100-lenovo-yoga-slim7x: add retimers, dp altmode support

Jens Glathe via B4 Relay posted 1 patch 8 months ago
There is a newer version of this series
.../boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts  | 491 ++++++++++++++++++++-
1 file changed, 485 insertions(+), 6 deletions(-)
[PATCH] arm64: dts: qcom: x1e80100-lenovo-yoga-slim7x: add retimers, dp altmode support
Posted by Jens Glathe via B4 Relay 8 months ago
From: Jens Glathe <jens.glathe@oldschoolsolutions.biz>

comparing with CRD and other dts for a more complete support of the 7X

Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
---
This patch adds the required nodes to support DP Altmode on all three type-c
ports. The definition is derived from the CRD. Since they are all marked 40Gbps,
I assume there are 3 PS8830 retimers. 
This modification is now for ~8 weeks in my tree with little to no complaints. I 
don't have access to a Yoga Slim 7X, however many people on #aarch64-laptops do 
and some are using this patch.
---
 .../boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts  | 491 ++++++++++++++++++++-
 1 file changed, 485 insertions(+), 6 deletions(-)

diff --git a/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts b/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
index 445d97d67d325853b7dcd2060523e7469ed4e6ea..129ab64c0f915e8f361a9300c2919cf69bbfda29 100644
--- a/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
+++ b/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
@@ -7,6 +7,8 @@
 
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/input/gpio-keys.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>
 #include <dt-bindings/regulator/qcom,rpmh-regulator.h>
 
 #include "x1e80100.dtsi"
@@ -72,7 +74,15 @@ port@1 {
 					reg = <1>;
 
 					pmic_glink_ss0_ss_in: endpoint {
-						remote-endpoint = <&usb_1_ss0_qmpphy_out>;
+						remote-endpoint = <&retimer_ss0_ss_out>;
+					};
+				};
+
+				port@2 {
+					reg = <2>;
+
+					pmic_glink_ss0_con_sbu_in: endpoint {
+						remote-endpoint = <&retimer_ss0_con_sbu_out>;
 					};
 				};
 			};
@@ -101,7 +111,15 @@ port@1 {
 					reg = <1>;
 
 					pmic_glink_ss1_ss_in: endpoint {
-						remote-endpoint = <&usb_1_ss1_qmpphy_out>;
+						remote-endpoint = <&retimer_ss1_ss_out>;
+					};
+				};
+
+				port@2 {
+					reg = <2>;
+
+					pmic_glink_ss1_con_sbu_in: endpoint {
+						remote-endpoint = <&retimer_ss1_con_sbu_out>;
 					};
 				};
 			};
@@ -130,7 +148,15 @@ port@1 {
 					reg = <1>;
 
 					pmic_glink_ss2_ss_in: endpoint {
-						remote-endpoint = <&usb_1_ss2_qmpphy_out>;
+						remote-endpoint = <&retimer_ss2_ss_out>;
+					};
+				};
+
+				port@2 {
+					reg = <2>;
+
+					pmic_glink_ss2_con_sbu_in: endpoint {
+						remote-endpoint = <&retimer_ss2_con_sbu_out>;
 					};
 				};
 			};
@@ -226,6 +252,150 @@ vreg_nvme: regulator-nvme {
 		regulator-boot-on;
 	};
 
+	vreg_rtmr0_1p15: regulator-rtmr0-1p15 {
+		compatible = "regulator-fixed";
+
+		regulator-name = "VREG_RTMR0_1P15";
+		regulator-min-microvolt = <1150000>;
+		regulator-max-microvolt = <1150000>;
+
+		gpio = <&pmc8380_5_gpios 8 GPIO_ACTIVE_HIGH>;
+		enable-active-high;
+
+		pinctrl-0 = <&usb0_pwr_1p15_reg_en>;
+		pinctrl-names = "default";
+
+		regulator-boot-on;
+	};
+
+	vreg_rtmr0_1p8: regulator-rtmr0-1p8 {
+		compatible = "regulator-fixed";
+
+		regulator-name = "VREG_RTMR0_1P8";
+		regulator-min-microvolt = <1800000>;
+		regulator-max-microvolt = <1800000>;
+
+		gpio = <&pm8550ve_9_gpios 8 GPIO_ACTIVE_HIGH>;
+		enable-active-high;
+
+		pinctrl-0 = <&usb0_1p8_reg_en>;
+		pinctrl-names = "default";
+
+		regulator-boot-on;
+	};
+
+	vreg_rtmr0_3p3: regulator-rtmr0-3p3 {
+		compatible = "regulator-fixed";
+
+		regulator-name = "VREG_RTMR0_3P3";
+		regulator-min-microvolt = <3300000>;
+		regulator-max-microvolt = <3300000>;
+
+		gpio = <&pm8550_gpios 11 GPIO_ACTIVE_HIGH>;
+		enable-active-high;
+
+		pinctrl-0 = <&usb0_3p3_reg_en>;
+		pinctrl-names = "default";
+
+		regulator-boot-on;
+	};
+
+	vreg_rtmr1_1p15: regulator-rtmr1-1p15 {
+		compatible = "regulator-fixed";
+
+		regulator-name = "VREG_RTMR1_1P15";
+		regulator-min-microvolt = <1150000>;
+		regulator-max-microvolt = <1150000>;
+
+		gpio = <&tlmm 188 GPIO_ACTIVE_HIGH>;
+		enable-active-high;
+
+		pinctrl-0 = <&usb1_pwr_1p15_reg_en>;
+		pinctrl-names = "default";
+
+		regulator-boot-on;
+	};
+
+	vreg_rtmr1_1p8: regulator-rtmr1-1p8 {
+		compatible = "regulator-fixed";
+
+		regulator-name = "VREG_RTMR1_1P8";
+		regulator-min-microvolt = <1800000>;
+		regulator-max-microvolt = <1800000>;
+
+		gpio = <&tlmm 175 GPIO_ACTIVE_HIGH>;
+		enable-active-high;
+
+		pinctrl-0 = <&usb1_pwr_1p8_reg_en>;
+		pinctrl-names = "default";
+
+		regulator-boot-on;
+	};
+
+	vreg_rtmr1_3p3: regulator-rtmr1-3p3 {
+		compatible = "regulator-fixed";
+
+		regulator-name = "VREG_RTMR1_3P3";
+		regulator-min-microvolt = <3300000>;
+		regulator-max-microvolt = <3300000>;
+
+		gpio = <&tlmm 186 GPIO_ACTIVE_HIGH>;
+		enable-active-high;
+
+		pinctrl-0 = <&usb1_pwr_3p3_reg_en>;
+		pinctrl-names = "default";
+
+		regulator-boot-on;
+	};
+
+	vreg_rtmr2_1p15: regulator-rtmr2-1p15 {
+		compatible = "regulator-fixed";
+
+		regulator-name = "VREG_RTMR2_1P15";
+		regulator-min-microvolt = <1150000>;
+		regulator-max-microvolt = <1150000>;
+
+		gpio = <&tlmm 189 GPIO_ACTIVE_HIGH>;
+		enable-active-high;
+
+		pinctrl-0 = <&usb2_pwr_1p15_reg_en>;
+		pinctrl-names = "default";
+
+		regulator-boot-on;
+	};
+
+	vreg_rtmr2_1p8: regulator-rtmr2-1p8 {
+		compatible = "regulator-fixed";
+
+		regulator-name = "VREG_RTMR2_1P8";
+		regulator-min-microvolt = <1800000>;
+		regulator-max-microvolt = <1800000>;
+
+		gpio = <&tlmm 126 GPIO_ACTIVE_HIGH>;
+		enable-active-high;
+
+		pinctrl-0 = <&usb2_pwr_1p8_reg_en>;
+		pinctrl-names = "default";
+
+		regulator-boot-on;
+	};
+
+	vreg_rtmr2_3p3: regulator-rtmr2-3p3 {
+		compatible = "regulator-fixed";
+
+		regulator-name = "VREG_RTMR2_3P3";
+		regulator-min-microvolt = <3300000>;
+		regulator-max-microvolt = <3300000>;
+
+		gpio = <&tlmm 187 GPIO_ACTIVE_HIGH>;
+		enable-active-high;
+
+		pinctrl-0 = <&usb2_pwr_3p3_reg_en>;
+		pinctrl-names = "default";
+
+		regulator-boot-on;
+	};
+
 	vph_pwr: regulator-vph-pwr {
 		compatible = "regulator-fixed";
 
@@ -567,6 +737,178 @@ keyboard@3a {
 	};
 };
 
+&i2c1 {
+	clock-frequency = <400000>;
+
+	status = "okay";
+
+	typec-mux@8 {
+		compatible = "parade,ps8830";
+		reg = <0x08>;
+
+		clocks = <&rpmhcc RPMH_RF_CLK5>;
+
+		vdd-supply = <&vreg_rtmr2_1p15>;
+		vdd33-supply = <&vreg_rtmr2_3p3>;
+		vdd33-cap-supply = <&vreg_rtmr2_3p3>;
+		vddar-supply = <&vreg_rtmr2_1p15>;
+		vddat-supply = <&vreg_rtmr2_1p15>;
+		vddio-supply = <&vreg_rtmr2_1p8>;
+
+		reset-gpios = <&tlmm 185 GPIO_ACTIVE_LOW>;
+
+		pinctrl-0 = <&rtmr2_default>;
+		pinctrl-names = "default";
+
+		orientation-switch;
+		retimer-switch;
+
+		ports {
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			port@0 {
+				reg = <0>;
+
+				retimer_ss2_ss_out: endpoint {
+					remote-endpoint = <&pmic_glink_ss2_ss_in>;
+				};
+			};
+
+			port@1 {
+				reg = <1>;
+
+				retimer_ss2_ss_in: endpoint {
+					remote-endpoint = <&usb_1_ss2_qmpphy_out>;
+				};
+			};
+
+			port@2 {
+				reg = <2>;
+
+				retimer_ss2_con_sbu_out: endpoint {
+					remote-endpoint = <&pmic_glink_ss2_con_sbu_in>;
+				};
+			};
+		};
+	};
+};
+
+&i2c3 {
+	clock-frequency = <400000>;
+
+	status = "okay";
+
+	typec-mux@8 {
+		compatible = "parade,ps8830";
+		reg = <0x08>;
+
+		clocks = <&rpmhcc RPMH_RF_CLK3>;
+
+		vdd-supply = <&vreg_rtmr0_1p15>;
+		vdd33-supply = <&vreg_rtmr0_3p3>;
+		vdd33-cap-supply = <&vreg_rtmr0_3p3>;
+		vddar-supply = <&vreg_rtmr0_1p15>;
+		vddat-supply = <&vreg_rtmr0_1p15>;
+		vddio-supply = <&vreg_rtmr0_1p8>;
+
+		reset-gpios = <&pm8550_gpios 10 GPIO_ACTIVE_LOW>;
+
+		pinctrl-0 = <&rtmr0_default>;
+		pinctrl-names = "default";
+
+		retimer-switch;
+		orientation-switch;
+
+		ports {
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			port@0 {
+				reg = <0>;
+
+				retimer_ss0_ss_out: endpoint {
+					remote-endpoint = <&pmic_glink_ss0_ss_in>;
+				};
+			};
+
+			port@1 {
+				reg = <1>;
+
+				retimer_ss0_ss_in: endpoint {
+					remote-endpoint = <&usb_1_ss0_qmpphy_out>;
+				};
+			};
+
+			port@2 {
+				reg = <2>;
+
+				retimer_ss0_con_sbu_out: endpoint {
+					remote-endpoint = <&pmic_glink_ss0_con_sbu_in>;
+				};
+			};
+		};
+	};
+};
+
+&i2c7 {
+	clock-frequency = <400000>;
+
+	status = "okay";
+
+	typec-mux@8 {
+		compatible = "parade,ps8830";
+		reg = <0x8>;
+
+		clocks = <&rpmhcc RPMH_RF_CLK4>;
+
+		vdd-supply = <&vreg_rtmr1_1p15>;
+		vdd33-supply = <&vreg_rtmr1_3p3>;
+		vdd33-cap-supply = <&vreg_rtmr1_3p3>;
+		vddar-supply = <&vreg_rtmr1_1p15>;
+		vddat-supply = <&vreg_rtmr1_1p15>;
+		vddio-supply = <&vreg_rtmr1_1p8>;
+
+		reset-gpios = <&tlmm 176 GPIO_ACTIVE_LOW>;
+
+		pinctrl-0 = <&rtmr1_default>;
+		pinctrl-names = "default";
+
+		retimer-switch;
+		orientation-switch;
+
+		ports {
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			port@0 {
+				reg = <0>;
+
+				retimer_ss1_ss_out: endpoint {
+					remote-endpoint = <&pmic_glink_ss1_ss_in>;
+				};
+			};
+
+			port@1 {
+				reg = <1>;
+
+				retimer_ss1_ss_in: endpoint {
+					remote-endpoint = <&usb_1_ss1_qmpphy_out>;
+				};
+			};
+
+			port@2 {
+				reg = <2>;
+
+				retimer_ss1_con_sbu_out: endpoint {
+					remote-endpoint = <&pmic_glink_ss1_con_sbu_in>;
+				};
+			};
+
+		};
+	};
+};
+
 &i2c8 {
 	clock-frequency = <400000>;
 
@@ -614,6 +956,33 @@ &mdss {
 	status = "okay";
 };
 
+&mdss_dp0 {
+	status = "okay";
+};
+
+&mdss_dp0_out {
+	data-lanes = <0 1>;
+	link-frequencies = /bits/ 64 <1620000000 2700000000 5400000000 8100000000>;
+};
+
+&mdss_dp1 {
+	status = "okay";
+};
+
+&mdss_dp1_out {
+	data-lanes = <0 1>;
+	link-frequencies = /bits/ 64 <1620000000 2700000000 5400000000 8100000000>;
+};
+
+&mdss_dp2 {
+	status = "okay";
+};
+
+&mdss_dp2_out {
+	data-lanes = <0 1>;
+	link-frequencies = /bits/ 64 <1620000000 2700000000 5400000000 8100000000>;
+};
+
 &mdss_dp3 {
 	compatible = "qcom,x1e80100-dp";
 	/delete-property/ #sound-dai-cells;
@@ -701,6 +1070,50 @@ &pcie6a_phy {
 	status = "okay";
 };
 
+&pm8550_gpios {
+	rtmr0_default: rtmr0-reset-n-active-state {
+		pins = "gpio10";
+		function = "normal";
+		power-source = <1>; /* 1.8V */
+		bias-disable;
+		input-disable;
+		output-enable;
+	};
+
+	usb0_3p3_reg_en: usb0-3p3-reg-en-state {
+		pins = "gpio11";
+		function = "normal";
+		power-source = <1>; /* 1.8V */
+		bias-disable;
+		input-disable;
+		output-enable;
+	};
+};
+
+&pm8550ve_8_gpios {
+	misc_3p3_reg_en: misc-3p3-reg-en-state {
+		pins = "gpio6";
+		function = "normal";
+		bias-disable;
+		input-disable;
+		output-enable;
+		drive-push-pull;
+		power-source = <1>; /* 1.8 V */
+		qcom,drive-strength = <PMIC_GPIO_STRENGTH_LOW>;
+	};
+};
+
+&pm8550ve_9_gpios {
+	usb0_1p8_reg_en: usb0-1p8-reg-en-state {
+		pins = "gpio8";
+		function = "normal";
+		power-source = <1>; /* 1.8V */
+		bias-disable;
+		input-disable;
+		output-enable;
+	};
+};
+
 &pmc8380_3_gpios {
 	edp_bl_en: edp-bl-en-state {
 		pins = "gpio4";
@@ -711,6 +1124,17 @@ edp_bl_en: edp-bl-en-state {
 	};
 };
 
+&pmc8380_5_gpios {
+	usb0_pwr_1p15_reg_en: usb0-pwr-1p15-reg-en-state {
+		pins = "gpio8";
+		function = "normal";
+		power-source = <1>; /* 1.8V */
+		bias-disable;
+		input-disable;
+		output-enable;
+	};
+};
+
 &qupv3_0 {
 	status = "okay";
 };
@@ -919,6 +1343,20 @@ wake-n-pins {
 		};
 	};
 
+	rtmr1_default: rtmr1-reset-n-active-state {
+		pins = "gpio176";
+		function = "gpio";
+		drive-strength = <2>;
+		bias-disable;
+	};
+
+	rtmr2_default: rtmr2-reset-n-active-state {
+		pins = "gpio185";
+		function = "gpio";
+		drive-strength = <2>;
+		bias-disable;
+	};
+
 	tpad_default: tpad-default-state {
 		pins = "gpio3";
 		function = "gpio";
@@ -940,6 +1378,47 @@ reset-n-pins {
 		};
 	};
 
+	usb1_pwr_1p15_reg_en: usb1-pwr-1p15-reg-en-state {
+		pins = "gpio188";
+		function = "gpio";
+		drive-strength = <2>;
+		bias-disable;
+	};
+
+	usb1_pwr_1p8_reg_en: usb1-pwr-1p8-reg-en-state {
+		pins = "gpio175";
+		function = "gpio";
+		drive-strength = <2>;
+		bias-disable;
+	};
+
+	usb1_pwr_3p3_reg_en: usb1-pwr-3p3-reg-en-state {
+		pins = "gpio186";
+		function = "gpio";
+		drive-strength = <2>;
+		bias-disable;
+	};
+
+	usb2_pwr_1p15_reg_en: usb2-pwr-1p15-reg-en-state {
+		pins = "gpio189";
+		function = "gpio";
+		drive-strength = <2>;
+		bias-disable;
+	};
+
+	usb2_pwr_1p8_reg_en: usb2-pwr-1p8-reg-en-state {
+		pins = "gpio126";
+		function = "gpio";
+		drive-strength = <2>;
+		bias-disable;
+	};
+
+	usb2_pwr_3p3_reg_en: usb2-pwr-3p3-reg-en-state {
+		pins = "gpio187";
+		function = "gpio";
+		drive-strength = <2>;
+		bias-disable;
+	};
 };
 
 &uart21 {
@@ -976,7 +1455,7 @@ &usb_1_ss0_dwc3_hs {
 };
 
 &usb_1_ss0_qmpphy_out {
-	remote-endpoint = <&pmic_glink_ss0_ss_in>;
+	remote-endpoint = <&retimer_ss0_ss_in>;
 };
 
 &usb_1_ss1_hsphy {
@@ -1008,7 +1487,7 @@ &usb_1_ss1_dwc3_hs {
 };
 
 &usb_1_ss1_qmpphy_out {
-	remote-endpoint = <&pmic_glink_ss1_ss_in>;
+	remote-endpoint = <&retimer_ss1_ss_in>;
 };
 
 &usb_1_ss2_hsphy {
@@ -1040,5 +1519,5 @@ &usb_1_ss2_dwc3_hs {
 };
 
 &usb_1_ss2_qmpphy_out {
-	remote-endpoint = <&pmic_glink_ss2_ss_in>;
+	remote-endpoint = <&retimer_ss2_ss_in>;
 };

---
base-commit: f660850bc246fef15ba78c81f686860324396628
change-id: 20250416-slim7x-retimer-70b1e67b1d42

Best regards,
-- 
Jens Glathe <jens.glathe@oldschoolsolutions.biz>
Re: [PATCH] arm64: dts: qcom: x1e80100-lenovo-yoga-slim7x: add retimers, dp altmode support
Posted by Rob Clark 8 months ago
On Thu, Apr 17, 2025 at 4:39 AM Jens Glathe via B4 Relay
<devnull+jens.glathe.oldschoolsolutions.biz@kernel.org> wrote:
>
> From: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
>
> comparing with CRD and other dts for a more complete support of the 7X
>
> Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>

The two left ports work for me.  The right port does not, although
sometimes it at least manages to detect the display and read EDID.
Others on #aarch64-laptops have seen the right side port work.  Same
behavior with both an 27" HP (2560x1440, dp) and 27" lenovo
(2560x1440, usb-c) displays.

So, at least the two left ports are:

Tested-by: Rob Clark <robdclark@gmail.com>

> ---
> This patch adds the required nodes to support DP Altmode on all three type-c
> ports. The definition is derived from the CRD. Since they are all marked 40Gbps,
> I assume there are 3 PS8830 retimers.
> This modification is now for ~8 weeks in my tree with little to no complaints. I
> don't have access to a Yoga Slim 7X, however many people on #aarch64-laptops do
> and some are using this patch.
> ---
>  .../boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts  | 491 ++++++++++++++++++++-
>  1 file changed, 485 insertions(+), 6 deletions(-)
>
> diff --git a/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts b/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
> index 445d97d67d325853b7dcd2060523e7469ed4e6ea..129ab64c0f915e8f361a9300c2919cf69bbfda29 100644
> --- a/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
> +++ b/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
> @@ -7,6 +7,8 @@
>
>  #include <dt-bindings/gpio/gpio.h>
>  #include <dt-bindings/input/gpio-keys.h>
> +#include <dt-bindings/input/input.h>
> +#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>
>  #include <dt-bindings/regulator/qcom,rpmh-regulator.h>
>
>  #include "x1e80100.dtsi"
> @@ -72,7 +74,15 @@ port@1 {
>                                         reg = <1>;
>
>                                         pmic_glink_ss0_ss_in: endpoint {
> -                                               remote-endpoint = <&usb_1_ss0_qmpphy_out>;
> +                                               remote-endpoint = <&retimer_ss0_ss_out>;
> +                                       };
> +                               };
> +
> +                               port@2 {
> +                                       reg = <2>;
> +
> +                                       pmic_glink_ss0_con_sbu_in: endpoint {
> +                                               remote-endpoint = <&retimer_ss0_con_sbu_out>;
>                                         };
>                                 };
>                         };
> @@ -101,7 +111,15 @@ port@1 {
>                                         reg = <1>;
>
>                                         pmic_glink_ss1_ss_in: endpoint {
> -                                               remote-endpoint = <&usb_1_ss1_qmpphy_out>;
> +                                               remote-endpoint = <&retimer_ss1_ss_out>;
> +                                       };
> +                               };
> +
> +                               port@2 {
> +                                       reg = <2>;
> +
> +                                       pmic_glink_ss1_con_sbu_in: endpoint {
> +                                               remote-endpoint = <&retimer_ss1_con_sbu_out>;
>                                         };
>                                 };
>                         };
> @@ -130,7 +148,15 @@ port@1 {
>                                         reg = <1>;
>
>                                         pmic_glink_ss2_ss_in: endpoint {
> -                                               remote-endpoint = <&usb_1_ss2_qmpphy_out>;
> +                                               remote-endpoint = <&retimer_ss2_ss_out>;
> +                                       };
> +                               };
> +
> +                               port@2 {
> +                                       reg = <2>;
> +
> +                                       pmic_glink_ss2_con_sbu_in: endpoint {
> +                                               remote-endpoint = <&retimer_ss2_con_sbu_out>;
>                                         };
>                                 };
>                         };
> @@ -226,6 +252,150 @@ vreg_nvme: regulator-nvme {
>                 regulator-boot-on;
>         };
>
> +       vreg_rtmr0_1p15: regulator-rtmr0-1p15 {
> +               compatible = "regulator-fixed";
> +
> +               regulator-name = "VREG_RTMR0_1P15";
> +               regulator-min-microvolt = <1150000>;
> +               regulator-max-microvolt = <1150000>;
> +
> +               gpio = <&pmc8380_5_gpios 8 GPIO_ACTIVE_HIGH>;
> +               enable-active-high;
> +
> +               pinctrl-0 = <&usb0_pwr_1p15_reg_en>;
> +               pinctrl-names = "default";
> +
> +               regulator-boot-on;
> +       };
> +
> +       vreg_rtmr0_1p8: regulator-rtmr0-1p8 {
> +               compatible = "regulator-fixed";
> +
> +               regulator-name = "VREG_RTMR0_1P8";
> +               regulator-min-microvolt = <1800000>;
> +               regulator-max-microvolt = <1800000>;
> +
> +               gpio = <&pm8550ve_9_gpios 8 GPIO_ACTIVE_HIGH>;
> +               enable-active-high;
> +
> +               pinctrl-0 = <&usb0_1p8_reg_en>;
> +               pinctrl-names = "default";
> +
> +               regulator-boot-on;
> +       };
> +
> +       vreg_rtmr0_3p3: regulator-rtmr0-3p3 {
> +               compatible = "regulator-fixed";
> +
> +               regulator-name = "VREG_RTMR0_3P3";
> +               regulator-min-microvolt = <3300000>;
> +               regulator-max-microvolt = <3300000>;
> +
> +               gpio = <&pm8550_gpios 11 GPIO_ACTIVE_HIGH>;
> +               enable-active-high;
> +
> +               pinctrl-0 = <&usb0_3p3_reg_en>;
> +               pinctrl-names = "default";
> +
> +               regulator-boot-on;
> +       };
> +
> +       vreg_rtmr1_1p15: regulator-rtmr1-1p15 {
> +               compatible = "regulator-fixed";
> +
> +               regulator-name = "VREG_RTMR1_1P15";
> +               regulator-min-microvolt = <1150000>;
> +               regulator-max-microvolt = <1150000>;
> +
> +               gpio = <&tlmm 188 GPIO_ACTIVE_HIGH>;
> +               enable-active-high;
> +
> +               pinctrl-0 = <&usb1_pwr_1p15_reg_en>;
> +               pinctrl-names = "default";
> +
> +               regulator-boot-on;
> +       };
> +
> +       vreg_rtmr1_1p8: regulator-rtmr1-1p8 {
> +               compatible = "regulator-fixed";
> +
> +               regulator-name = "VREG_RTMR1_1P8";
> +               regulator-min-microvolt = <1800000>;
> +               regulator-max-microvolt = <1800000>;
> +
> +               gpio = <&tlmm 175 GPIO_ACTIVE_HIGH>;
> +               enable-active-high;
> +
> +               pinctrl-0 = <&usb1_pwr_1p8_reg_en>;
> +               pinctrl-names = "default";
> +
> +               regulator-boot-on;
> +       };
> +
> +       vreg_rtmr1_3p3: regulator-rtmr1-3p3 {
> +               compatible = "regulator-fixed";
> +
> +               regulator-name = "VREG_RTMR1_3P3";
> +               regulator-min-microvolt = <3300000>;
> +               regulator-max-microvolt = <3300000>;
> +
> +               gpio = <&tlmm 186 GPIO_ACTIVE_HIGH>;
> +               enable-active-high;
> +
> +               pinctrl-0 = <&usb1_pwr_3p3_reg_en>;
> +               pinctrl-names = "default";
> +
> +               regulator-boot-on;
> +       };
> +
> +       vreg_rtmr2_1p15: regulator-rtmr2-1p15 {
> +               compatible = "regulator-fixed";
> +
> +               regulator-name = "VREG_RTMR2_1P15";
> +               regulator-min-microvolt = <1150000>;
> +               regulator-max-microvolt = <1150000>;
> +
> +               gpio = <&tlmm 189 GPIO_ACTIVE_HIGH>;
> +               enable-active-high;
> +
> +               pinctrl-0 = <&usb2_pwr_1p15_reg_en>;
> +               pinctrl-names = "default";
> +
> +               regulator-boot-on;
> +       };
> +
> +       vreg_rtmr2_1p8: regulator-rtmr2-1p8 {
> +               compatible = "regulator-fixed";
> +
> +               regulator-name = "VREG_RTMR2_1P8";
> +               regulator-min-microvolt = <1800000>;
> +               regulator-max-microvolt = <1800000>;
> +
> +               gpio = <&tlmm 126 GPIO_ACTIVE_HIGH>;
> +               enable-active-high;
> +
> +               pinctrl-0 = <&usb2_pwr_1p8_reg_en>;
> +               pinctrl-names = "default";
> +
> +               regulator-boot-on;
> +       };
> +
> +       vreg_rtmr2_3p3: regulator-rtmr2-3p3 {
> +               compatible = "regulator-fixed";
> +
> +               regulator-name = "VREG_RTMR2_3P3";
> +               regulator-min-microvolt = <3300000>;
> +               regulator-max-microvolt = <3300000>;
> +
> +               gpio = <&tlmm 187 GPIO_ACTIVE_HIGH>;
> +               enable-active-high;
> +
> +               pinctrl-0 = <&usb2_pwr_3p3_reg_en>;
> +               pinctrl-names = "default";
> +
> +               regulator-boot-on;
> +       };
> +
>         vph_pwr: regulator-vph-pwr {
>                 compatible = "regulator-fixed";
>
> @@ -567,6 +737,178 @@ keyboard@3a {
>         };
>  };
>
> +&i2c1 {
> +       clock-frequency = <400000>;
> +
> +       status = "okay";
> +
> +       typec-mux@8 {
> +               compatible = "parade,ps8830";
> +               reg = <0x08>;
> +
> +               clocks = <&rpmhcc RPMH_RF_CLK5>;
> +
> +               vdd-supply = <&vreg_rtmr2_1p15>;
> +               vdd33-supply = <&vreg_rtmr2_3p3>;
> +               vdd33-cap-supply = <&vreg_rtmr2_3p3>;
> +               vddar-supply = <&vreg_rtmr2_1p15>;
> +               vddat-supply = <&vreg_rtmr2_1p15>;
> +               vddio-supply = <&vreg_rtmr2_1p8>;
> +
> +               reset-gpios = <&tlmm 185 GPIO_ACTIVE_LOW>;
> +
> +               pinctrl-0 = <&rtmr2_default>;
> +               pinctrl-names = "default";
> +
> +               orientation-switch;
> +               retimer-switch;
> +
> +               ports {
> +                       #address-cells = <1>;
> +                       #size-cells = <0>;
> +
> +                       port@0 {
> +                               reg = <0>;
> +
> +                               retimer_ss2_ss_out: endpoint {
> +                                       remote-endpoint = <&pmic_glink_ss2_ss_in>;
> +                               };
> +                       };
> +
> +                       port@1 {
> +                               reg = <1>;
> +
> +                               retimer_ss2_ss_in: endpoint {
> +                                       remote-endpoint = <&usb_1_ss2_qmpphy_out>;
> +                               };
> +                       };
> +
> +                       port@2 {
> +                               reg = <2>;
> +
> +                               retimer_ss2_con_sbu_out: endpoint {
> +                                       remote-endpoint = <&pmic_glink_ss2_con_sbu_in>;
> +                               };
> +                       };
> +               };
> +       };
> +};
> +
> +&i2c3 {
> +       clock-frequency = <400000>;
> +
> +       status = "okay";
> +
> +       typec-mux@8 {
> +               compatible = "parade,ps8830";
> +               reg = <0x08>;
> +
> +               clocks = <&rpmhcc RPMH_RF_CLK3>;
> +
> +               vdd-supply = <&vreg_rtmr0_1p15>;
> +               vdd33-supply = <&vreg_rtmr0_3p3>;
> +               vdd33-cap-supply = <&vreg_rtmr0_3p3>;
> +               vddar-supply = <&vreg_rtmr0_1p15>;
> +               vddat-supply = <&vreg_rtmr0_1p15>;
> +               vddio-supply = <&vreg_rtmr0_1p8>;
> +
> +               reset-gpios = <&pm8550_gpios 10 GPIO_ACTIVE_LOW>;
> +
> +               pinctrl-0 = <&rtmr0_default>;
> +               pinctrl-names = "default";
> +
> +               retimer-switch;
> +               orientation-switch;
> +
> +               ports {
> +                       #address-cells = <1>;
> +                       #size-cells = <0>;
> +
> +                       port@0 {
> +                               reg = <0>;
> +
> +                               retimer_ss0_ss_out: endpoint {
> +                                       remote-endpoint = <&pmic_glink_ss0_ss_in>;
> +                               };
> +                       };
> +
> +                       port@1 {
> +                               reg = <1>;
> +
> +                               retimer_ss0_ss_in: endpoint {
> +                                       remote-endpoint = <&usb_1_ss0_qmpphy_out>;
> +                               };
> +                       };
> +
> +                       port@2 {
> +                               reg = <2>;
> +
> +                               retimer_ss0_con_sbu_out: endpoint {
> +                                       remote-endpoint = <&pmic_glink_ss0_con_sbu_in>;
> +                               };
> +                       };
> +               };
> +       };
> +};
> +
> +&i2c7 {
> +       clock-frequency = <400000>;
> +
> +       status = "okay";
> +
> +       typec-mux@8 {
> +               compatible = "parade,ps8830";
> +               reg = <0x8>;
> +
> +               clocks = <&rpmhcc RPMH_RF_CLK4>;
> +
> +               vdd-supply = <&vreg_rtmr1_1p15>;
> +               vdd33-supply = <&vreg_rtmr1_3p3>;
> +               vdd33-cap-supply = <&vreg_rtmr1_3p3>;
> +               vddar-supply = <&vreg_rtmr1_1p15>;
> +               vddat-supply = <&vreg_rtmr1_1p15>;
> +               vddio-supply = <&vreg_rtmr1_1p8>;
> +
> +               reset-gpios = <&tlmm 176 GPIO_ACTIVE_LOW>;
> +
> +               pinctrl-0 = <&rtmr1_default>;
> +               pinctrl-names = "default";
> +
> +               retimer-switch;
> +               orientation-switch;
> +
> +               ports {
> +                       #address-cells = <1>;
> +                       #size-cells = <0>;
> +
> +                       port@0 {
> +                               reg = <0>;
> +
> +                               retimer_ss1_ss_out: endpoint {
> +                                       remote-endpoint = <&pmic_glink_ss1_ss_in>;
> +                               };
> +                       };
> +
> +                       port@1 {
> +                               reg = <1>;
> +
> +                               retimer_ss1_ss_in: endpoint {
> +                                       remote-endpoint = <&usb_1_ss1_qmpphy_out>;
> +                               };
> +                       };
> +
> +                       port@2 {
> +                               reg = <2>;
> +
> +                               retimer_ss1_con_sbu_out: endpoint {
> +                                       remote-endpoint = <&pmic_glink_ss1_con_sbu_in>;
> +                               };
> +                       };
> +
> +               };
> +       };
> +};
> +
>  &i2c8 {
>         clock-frequency = <400000>;
>
> @@ -614,6 +956,33 @@ &mdss {
>         status = "okay";
>  };
>
> +&mdss_dp0 {
> +       status = "okay";
> +};
> +
> +&mdss_dp0_out {
> +       data-lanes = <0 1>;
> +       link-frequencies = /bits/ 64 <1620000000 2700000000 5400000000 8100000000>;
> +};
> +
> +&mdss_dp1 {
> +       status = "okay";
> +};
> +
> +&mdss_dp1_out {
> +       data-lanes = <0 1>;
> +       link-frequencies = /bits/ 64 <1620000000 2700000000 5400000000 8100000000>;
> +};
> +
> +&mdss_dp2 {
> +       status = "okay";
> +};
> +
> +&mdss_dp2_out {
> +       data-lanes = <0 1>;
> +       link-frequencies = /bits/ 64 <1620000000 2700000000 5400000000 8100000000>;
> +};
> +
>  &mdss_dp3 {
>         compatible = "qcom,x1e80100-dp";
>         /delete-property/ #sound-dai-cells;
> @@ -701,6 +1070,50 @@ &pcie6a_phy {
>         status = "okay";
>  };
>
> +&pm8550_gpios {
> +       rtmr0_default: rtmr0-reset-n-active-state {
> +               pins = "gpio10";
> +               function = "normal";
> +               power-source = <1>; /* 1.8V */
> +               bias-disable;
> +               input-disable;
> +               output-enable;
> +       };
> +
> +       usb0_3p3_reg_en: usb0-3p3-reg-en-state {
> +               pins = "gpio11";
> +               function = "normal";
> +               power-source = <1>; /* 1.8V */
> +               bias-disable;
> +               input-disable;
> +               output-enable;
> +       };
> +};
> +
> +&pm8550ve_8_gpios {
> +       misc_3p3_reg_en: misc-3p3-reg-en-state {
> +               pins = "gpio6";
> +               function = "normal";
> +               bias-disable;
> +               input-disable;
> +               output-enable;
> +               drive-push-pull;
> +               power-source = <1>; /* 1.8 V */
> +               qcom,drive-strength = <PMIC_GPIO_STRENGTH_LOW>;
> +       };
> +};
> +
> +&pm8550ve_9_gpios {
> +       usb0_1p8_reg_en: usb0-1p8-reg-en-state {
> +               pins = "gpio8";
> +               function = "normal";
> +               power-source = <1>; /* 1.8V */
> +               bias-disable;
> +               input-disable;
> +               output-enable;
> +       };
> +};
> +
>  &pmc8380_3_gpios {
>         edp_bl_en: edp-bl-en-state {
>                 pins = "gpio4";
> @@ -711,6 +1124,17 @@ edp_bl_en: edp-bl-en-state {
>         };
>  };
>
> +&pmc8380_5_gpios {
> +       usb0_pwr_1p15_reg_en: usb0-pwr-1p15-reg-en-state {
> +               pins = "gpio8";
> +               function = "normal";
> +               power-source = <1>; /* 1.8V */
> +               bias-disable;
> +               input-disable;
> +               output-enable;
> +       };
> +};
> +
>  &qupv3_0 {
>         status = "okay";
>  };
> @@ -919,6 +1343,20 @@ wake-n-pins {
>                 };
>         };
>
> +       rtmr1_default: rtmr1-reset-n-active-state {
> +               pins = "gpio176";
> +               function = "gpio";
> +               drive-strength = <2>;
> +               bias-disable;
> +       };
> +
> +       rtmr2_default: rtmr2-reset-n-active-state {
> +               pins = "gpio185";
> +               function = "gpio";
> +               drive-strength = <2>;
> +               bias-disable;
> +       };
> +
>         tpad_default: tpad-default-state {
>                 pins = "gpio3";
>                 function = "gpio";
> @@ -940,6 +1378,47 @@ reset-n-pins {
>                 };
>         };
>
> +       usb1_pwr_1p15_reg_en: usb1-pwr-1p15-reg-en-state {
> +               pins = "gpio188";
> +               function = "gpio";
> +               drive-strength = <2>;
> +               bias-disable;
> +       };
> +
> +       usb1_pwr_1p8_reg_en: usb1-pwr-1p8-reg-en-state {
> +               pins = "gpio175";
> +               function = "gpio";
> +               drive-strength = <2>;
> +               bias-disable;
> +       };
> +
> +       usb1_pwr_3p3_reg_en: usb1-pwr-3p3-reg-en-state {
> +               pins = "gpio186";
> +               function = "gpio";
> +               drive-strength = <2>;
> +               bias-disable;
> +       };
> +
> +       usb2_pwr_1p15_reg_en: usb2-pwr-1p15-reg-en-state {
> +               pins = "gpio189";
> +               function = "gpio";
> +               drive-strength = <2>;
> +               bias-disable;
> +       };
> +
> +       usb2_pwr_1p8_reg_en: usb2-pwr-1p8-reg-en-state {
> +               pins = "gpio126";
> +               function = "gpio";
> +               drive-strength = <2>;
> +               bias-disable;
> +       };
> +
> +       usb2_pwr_3p3_reg_en: usb2-pwr-3p3-reg-en-state {
> +               pins = "gpio187";
> +               function = "gpio";
> +               drive-strength = <2>;
> +               bias-disable;
> +       };
>  };
>
>  &uart21 {
> @@ -976,7 +1455,7 @@ &usb_1_ss0_dwc3_hs {
>  };
>
>  &usb_1_ss0_qmpphy_out {
> -       remote-endpoint = <&pmic_glink_ss0_ss_in>;
> +       remote-endpoint = <&retimer_ss0_ss_in>;
>  };
>
>  &usb_1_ss1_hsphy {
> @@ -1008,7 +1487,7 @@ &usb_1_ss1_dwc3_hs {
>  };
>
>  &usb_1_ss1_qmpphy_out {
> -       remote-endpoint = <&pmic_glink_ss1_ss_in>;
> +       remote-endpoint = <&retimer_ss1_ss_in>;
>  };
>
>  &usb_1_ss2_hsphy {
> @@ -1040,5 +1519,5 @@ &usb_1_ss2_dwc3_hs {
>  };
>
>  &usb_1_ss2_qmpphy_out {
> -       remote-endpoint = <&pmic_glink_ss2_ss_in>;
> +       remote-endpoint = <&retimer_ss2_ss_in>;
>  };
>
> ---
> base-commit: f660850bc246fef15ba78c81f686860324396628
> change-id: 20250416-slim7x-retimer-70b1e67b1d42
>
> Best regards,
> --
> Jens Glathe <jens.glathe@oldschoolsolutions.biz>
>
>
>
Re: [PATCH] arm64: dts: qcom: x1e80100-lenovo-yoga-slim7x: add retimers, dp altmode support
Posted by Rob Clark 7 months, 3 weeks ago
On Thu, Apr 17, 2025 at 9:29 AM Rob Clark <robdclark@gmail.com> wrote:
>
> On Thu, Apr 17, 2025 at 4:39 AM Jens Glathe via B4 Relay
> <devnull+jens.glathe.oldschoolsolutions.biz@kernel.org> wrote:
> >
> > From: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
> >
> > comparing with CRD and other dts for a more complete support of the 7X
> >
> > Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
>
> The two left ports work for me.  The right port does not, although
> sometimes it at least manages to detect the display and read EDID.
> Others on #aarch64-laptops have seen the right side port work.  Same
> behavior with both an 27" HP (2560x1440, dp) and 27" lenovo
> (2560x1440, usb-c) displays.
>
> So, at least the two left ports are:
>
> Tested-by: Rob Clark <robdclark@gmail.com>

To follow-up, with the addition of
https://lore.kernel.org/all/20250417021349.148911-1-alex.vinarskis@gmail.com/#r
all three usb-c ports are working (in either orientation)

BR,
-R

> > ---
> > This patch adds the required nodes to support DP Altmode on all three type-c
> > ports. The definition is derived from the CRD. Since they are all marked 40Gbps,
> > I assume there are 3 PS8830 retimers.
> > This modification is now for ~8 weeks in my tree with little to no complaints. I
> > don't have access to a Yoga Slim 7X, however many people on #aarch64-laptops do
> > and some are using this patch.
> > ---
> >  .../boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts  | 491 ++++++++++++++++++++-
> >  1 file changed, 485 insertions(+), 6 deletions(-)
> >
> > diff --git a/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts b/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
> > index 445d97d67d325853b7dcd2060523e7469ed4e6ea..129ab64c0f915e8f361a9300c2919cf69bbfda29 100644
> > --- a/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
> > +++ b/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
> > @@ -7,6 +7,8 @@
> >
> >  #include <dt-bindings/gpio/gpio.h>
> >  #include <dt-bindings/input/gpio-keys.h>
> > +#include <dt-bindings/input/input.h>
> > +#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>
> >  #include <dt-bindings/regulator/qcom,rpmh-regulator.h>
> >
> >  #include "x1e80100.dtsi"
> > @@ -72,7 +74,15 @@ port@1 {
> >                                         reg = <1>;
> >
> >                                         pmic_glink_ss0_ss_in: endpoint {
> > -                                               remote-endpoint = <&usb_1_ss0_qmpphy_out>;
> > +                                               remote-endpoint = <&retimer_ss0_ss_out>;
> > +                                       };
> > +                               };
> > +
> > +                               port@2 {
> > +                                       reg = <2>;
> > +
> > +                                       pmic_glink_ss0_con_sbu_in: endpoint {
> > +                                               remote-endpoint = <&retimer_ss0_con_sbu_out>;
> >                                         };
> >                                 };
> >                         };
> > @@ -101,7 +111,15 @@ port@1 {
> >                                         reg = <1>;
> >
> >                                         pmic_glink_ss1_ss_in: endpoint {
> > -                                               remote-endpoint = <&usb_1_ss1_qmpphy_out>;
> > +                                               remote-endpoint = <&retimer_ss1_ss_out>;
> > +                                       };
> > +                               };
> > +
> > +                               port@2 {
> > +                                       reg = <2>;
> > +
> > +                                       pmic_glink_ss1_con_sbu_in: endpoint {
> > +                                               remote-endpoint = <&retimer_ss1_con_sbu_out>;
> >                                         };
> >                                 };
> >                         };
> > @@ -130,7 +148,15 @@ port@1 {
> >                                         reg = <1>;
> >
> >                                         pmic_glink_ss2_ss_in: endpoint {
> > -                                               remote-endpoint = <&usb_1_ss2_qmpphy_out>;
> > +                                               remote-endpoint = <&retimer_ss2_ss_out>;
> > +                                       };
> > +                               };
> > +
> > +                               port@2 {
> > +                                       reg = <2>;
> > +
> > +                                       pmic_glink_ss2_con_sbu_in: endpoint {
> > +                                               remote-endpoint = <&retimer_ss2_con_sbu_out>;
> >                                         };
> >                                 };
> >                         };
> > @@ -226,6 +252,150 @@ vreg_nvme: regulator-nvme {
> >                 regulator-boot-on;
> >         };
> >
> > +       vreg_rtmr0_1p15: regulator-rtmr0-1p15 {
> > +               compatible = "regulator-fixed";
> > +
> > +               regulator-name = "VREG_RTMR0_1P15";
> > +               regulator-min-microvolt = <1150000>;
> > +               regulator-max-microvolt = <1150000>;
> > +
> > +               gpio = <&pmc8380_5_gpios 8 GPIO_ACTIVE_HIGH>;
> > +               enable-active-high;
> > +
> > +               pinctrl-0 = <&usb0_pwr_1p15_reg_en>;
> > +               pinctrl-names = "default";
> > +
> > +               regulator-boot-on;
> > +       };
> > +
> > +       vreg_rtmr0_1p8: regulator-rtmr0-1p8 {
> > +               compatible = "regulator-fixed";
> > +
> > +               regulator-name = "VREG_RTMR0_1P8";
> > +               regulator-min-microvolt = <1800000>;
> > +               regulator-max-microvolt = <1800000>;
> > +
> > +               gpio = <&pm8550ve_9_gpios 8 GPIO_ACTIVE_HIGH>;
> > +               enable-active-high;
> > +
> > +               pinctrl-0 = <&usb0_1p8_reg_en>;
> > +               pinctrl-names = "default";
> > +
> > +               regulator-boot-on;
> > +       };
> > +
> > +       vreg_rtmr0_3p3: regulator-rtmr0-3p3 {
> > +               compatible = "regulator-fixed";
> > +
> > +               regulator-name = "VREG_RTMR0_3P3";
> > +               regulator-min-microvolt = <3300000>;
> > +               regulator-max-microvolt = <3300000>;
> > +
> > +               gpio = <&pm8550_gpios 11 GPIO_ACTIVE_HIGH>;
> > +               enable-active-high;
> > +
> > +               pinctrl-0 = <&usb0_3p3_reg_en>;
> > +               pinctrl-names = "default";
> > +
> > +               regulator-boot-on;
> > +       };
> > +
> > +       vreg_rtmr1_1p15: regulator-rtmr1-1p15 {
> > +               compatible = "regulator-fixed";
> > +
> > +               regulator-name = "VREG_RTMR1_1P15";
> > +               regulator-min-microvolt = <1150000>;
> > +               regulator-max-microvolt = <1150000>;
> > +
> > +               gpio = <&tlmm 188 GPIO_ACTIVE_HIGH>;
> > +               enable-active-high;
> > +
> > +               pinctrl-0 = <&usb1_pwr_1p15_reg_en>;
> > +               pinctrl-names = "default";
> > +
> > +               regulator-boot-on;
> > +       };
> > +
> > +       vreg_rtmr1_1p8: regulator-rtmr1-1p8 {
> > +               compatible = "regulator-fixed";
> > +
> > +               regulator-name = "VREG_RTMR1_1P8";
> > +               regulator-min-microvolt = <1800000>;
> > +               regulator-max-microvolt = <1800000>;
> > +
> > +               gpio = <&tlmm 175 GPIO_ACTIVE_HIGH>;
> > +               enable-active-high;
> > +
> > +               pinctrl-0 = <&usb1_pwr_1p8_reg_en>;
> > +               pinctrl-names = "default";
> > +
> > +               regulator-boot-on;
> > +       };
> > +
> > +       vreg_rtmr1_3p3: regulator-rtmr1-3p3 {
> > +               compatible = "regulator-fixed";
> > +
> > +               regulator-name = "VREG_RTMR1_3P3";
> > +               regulator-min-microvolt = <3300000>;
> > +               regulator-max-microvolt = <3300000>;
> > +
> > +               gpio = <&tlmm 186 GPIO_ACTIVE_HIGH>;
> > +               enable-active-high;
> > +
> > +               pinctrl-0 = <&usb1_pwr_3p3_reg_en>;
> > +               pinctrl-names = "default";
> > +
> > +               regulator-boot-on;
> > +       };
> > +
> > +       vreg_rtmr2_1p15: regulator-rtmr2-1p15 {
> > +               compatible = "regulator-fixed";
> > +
> > +               regulator-name = "VREG_RTMR2_1P15";
> > +               regulator-min-microvolt = <1150000>;
> > +               regulator-max-microvolt = <1150000>;
> > +
> > +               gpio = <&tlmm 189 GPIO_ACTIVE_HIGH>;
> > +               enable-active-high;
> > +
> > +               pinctrl-0 = <&usb2_pwr_1p15_reg_en>;
> > +               pinctrl-names = "default";
> > +
> > +               regulator-boot-on;
> > +       };
> > +
> > +       vreg_rtmr2_1p8: regulator-rtmr2-1p8 {
> > +               compatible = "regulator-fixed";
> > +
> > +               regulator-name = "VREG_RTMR2_1P8";
> > +               regulator-min-microvolt = <1800000>;
> > +               regulator-max-microvolt = <1800000>;
> > +
> > +               gpio = <&tlmm 126 GPIO_ACTIVE_HIGH>;
> > +               enable-active-high;
> > +
> > +               pinctrl-0 = <&usb2_pwr_1p8_reg_en>;
> > +               pinctrl-names = "default";
> > +
> > +               regulator-boot-on;
> > +       };
> > +
> > +       vreg_rtmr2_3p3: regulator-rtmr2-3p3 {
> > +               compatible = "regulator-fixed";
> > +
> > +               regulator-name = "VREG_RTMR2_3P3";
> > +               regulator-min-microvolt = <3300000>;
> > +               regulator-max-microvolt = <3300000>;
> > +
> > +               gpio = <&tlmm 187 GPIO_ACTIVE_HIGH>;
> > +               enable-active-high;
> > +
> > +               pinctrl-0 = <&usb2_pwr_3p3_reg_en>;
> > +               pinctrl-names = "default";
> > +
> > +               regulator-boot-on;
> > +       };
> > +
> >         vph_pwr: regulator-vph-pwr {
> >                 compatible = "regulator-fixed";
> >
> > @@ -567,6 +737,178 @@ keyboard@3a {
> >         };
> >  };
> >
> > +&i2c1 {
> > +       clock-frequency = <400000>;
> > +
> > +       status = "okay";
> > +
> > +       typec-mux@8 {
> > +               compatible = "parade,ps8830";
> > +               reg = <0x08>;
> > +
> > +               clocks = <&rpmhcc RPMH_RF_CLK5>;
> > +
> > +               vdd-supply = <&vreg_rtmr2_1p15>;
> > +               vdd33-supply = <&vreg_rtmr2_3p3>;
> > +               vdd33-cap-supply = <&vreg_rtmr2_3p3>;
> > +               vddar-supply = <&vreg_rtmr2_1p15>;
> > +               vddat-supply = <&vreg_rtmr2_1p15>;
> > +               vddio-supply = <&vreg_rtmr2_1p8>;
> > +
> > +               reset-gpios = <&tlmm 185 GPIO_ACTIVE_LOW>;
> > +
> > +               pinctrl-0 = <&rtmr2_default>;
> > +               pinctrl-names = "default";
> > +
> > +               orientation-switch;
> > +               retimer-switch;
> > +
> > +               ports {
> > +                       #address-cells = <1>;
> > +                       #size-cells = <0>;
> > +
> > +                       port@0 {
> > +                               reg = <0>;
> > +
> > +                               retimer_ss2_ss_out: endpoint {
> > +                                       remote-endpoint = <&pmic_glink_ss2_ss_in>;
> > +                               };
> > +                       };
> > +
> > +                       port@1 {
> > +                               reg = <1>;
> > +
> > +                               retimer_ss2_ss_in: endpoint {
> > +                                       remote-endpoint = <&usb_1_ss2_qmpphy_out>;
> > +                               };
> > +                       };
> > +
> > +                       port@2 {
> > +                               reg = <2>;
> > +
> > +                               retimer_ss2_con_sbu_out: endpoint {
> > +                                       remote-endpoint = <&pmic_glink_ss2_con_sbu_in>;
> > +                               };
> > +                       };
> > +               };
> > +       };
> > +};
> > +
> > +&i2c3 {
> > +       clock-frequency = <400000>;
> > +
> > +       status = "okay";
> > +
> > +       typec-mux@8 {
> > +               compatible = "parade,ps8830";
> > +               reg = <0x08>;
> > +
> > +               clocks = <&rpmhcc RPMH_RF_CLK3>;
> > +
> > +               vdd-supply = <&vreg_rtmr0_1p15>;
> > +               vdd33-supply = <&vreg_rtmr0_3p3>;
> > +               vdd33-cap-supply = <&vreg_rtmr0_3p3>;
> > +               vddar-supply = <&vreg_rtmr0_1p15>;
> > +               vddat-supply = <&vreg_rtmr0_1p15>;
> > +               vddio-supply = <&vreg_rtmr0_1p8>;
> > +
> > +               reset-gpios = <&pm8550_gpios 10 GPIO_ACTIVE_LOW>;
> > +
> > +               pinctrl-0 = <&rtmr0_default>;
> > +               pinctrl-names = "default";
> > +
> > +               retimer-switch;
> > +               orientation-switch;
> > +
> > +               ports {
> > +                       #address-cells = <1>;
> > +                       #size-cells = <0>;
> > +
> > +                       port@0 {
> > +                               reg = <0>;
> > +
> > +                               retimer_ss0_ss_out: endpoint {
> > +                                       remote-endpoint = <&pmic_glink_ss0_ss_in>;
> > +                               };
> > +                       };
> > +
> > +                       port@1 {
> > +                               reg = <1>;
> > +
> > +                               retimer_ss0_ss_in: endpoint {
> > +                                       remote-endpoint = <&usb_1_ss0_qmpphy_out>;
> > +                               };
> > +                       };
> > +
> > +                       port@2 {
> > +                               reg = <2>;
> > +
> > +                               retimer_ss0_con_sbu_out: endpoint {
> > +                                       remote-endpoint = <&pmic_glink_ss0_con_sbu_in>;
> > +                               };
> > +                       };
> > +               };
> > +       };
> > +};
> > +
> > +&i2c7 {
> > +       clock-frequency = <400000>;
> > +
> > +       status = "okay";
> > +
> > +       typec-mux@8 {
> > +               compatible = "parade,ps8830";
> > +               reg = <0x8>;
> > +
> > +               clocks = <&rpmhcc RPMH_RF_CLK4>;
> > +
> > +               vdd-supply = <&vreg_rtmr1_1p15>;
> > +               vdd33-supply = <&vreg_rtmr1_3p3>;
> > +               vdd33-cap-supply = <&vreg_rtmr1_3p3>;
> > +               vddar-supply = <&vreg_rtmr1_1p15>;
> > +               vddat-supply = <&vreg_rtmr1_1p15>;
> > +               vddio-supply = <&vreg_rtmr1_1p8>;
> > +
> > +               reset-gpios = <&tlmm 176 GPIO_ACTIVE_LOW>;
> > +
> > +               pinctrl-0 = <&rtmr1_default>;
> > +               pinctrl-names = "default";
> > +
> > +               retimer-switch;
> > +               orientation-switch;
> > +
> > +               ports {
> > +                       #address-cells = <1>;
> > +                       #size-cells = <0>;
> > +
> > +                       port@0 {
> > +                               reg = <0>;
> > +
> > +                               retimer_ss1_ss_out: endpoint {
> > +                                       remote-endpoint = <&pmic_glink_ss1_ss_in>;
> > +                               };
> > +                       };
> > +
> > +                       port@1 {
> > +                               reg = <1>;
> > +
> > +                               retimer_ss1_ss_in: endpoint {
> > +                                       remote-endpoint = <&usb_1_ss1_qmpphy_out>;
> > +                               };
> > +                       };
> > +
> > +                       port@2 {
> > +                               reg = <2>;
> > +
> > +                               retimer_ss1_con_sbu_out: endpoint {
> > +                                       remote-endpoint = <&pmic_glink_ss1_con_sbu_in>;
> > +                               };
> > +                       };
> > +
> > +               };
> > +       };
> > +};
> > +
> >  &i2c8 {
> >         clock-frequency = <400000>;
> >
> > @@ -614,6 +956,33 @@ &mdss {
> >         status = "okay";
> >  };
> >
> > +&mdss_dp0 {
> > +       status = "okay";
> > +};
> > +
> > +&mdss_dp0_out {
> > +       data-lanes = <0 1>;
> > +       link-frequencies = /bits/ 64 <1620000000 2700000000 5400000000 8100000000>;
> > +};
> > +
> > +&mdss_dp1 {
> > +       status = "okay";
> > +};
> > +
> > +&mdss_dp1_out {
> > +       data-lanes = <0 1>;
> > +       link-frequencies = /bits/ 64 <1620000000 2700000000 5400000000 8100000000>;
> > +};
> > +
> > +&mdss_dp2 {
> > +       status = "okay";
> > +};
> > +
> > +&mdss_dp2_out {
> > +       data-lanes = <0 1>;
> > +       link-frequencies = /bits/ 64 <1620000000 2700000000 5400000000 8100000000>;
> > +};
> > +
> >  &mdss_dp3 {
> >         compatible = "qcom,x1e80100-dp";
> >         /delete-property/ #sound-dai-cells;
> > @@ -701,6 +1070,50 @@ &pcie6a_phy {
> >         status = "okay";
> >  };
> >
> > +&pm8550_gpios {
> > +       rtmr0_default: rtmr0-reset-n-active-state {
> > +               pins = "gpio10";
> > +               function = "normal";
> > +               power-source = <1>; /* 1.8V */
> > +               bias-disable;
> > +               input-disable;
> > +               output-enable;
> > +       };
> > +
> > +       usb0_3p3_reg_en: usb0-3p3-reg-en-state {
> > +               pins = "gpio11";
> > +               function = "normal";
> > +               power-source = <1>; /* 1.8V */
> > +               bias-disable;
> > +               input-disable;
> > +               output-enable;
> > +       };
> > +};
> > +
> > +&pm8550ve_8_gpios {
> > +       misc_3p3_reg_en: misc-3p3-reg-en-state {
> > +               pins = "gpio6";
> > +               function = "normal";
> > +               bias-disable;
> > +               input-disable;
> > +               output-enable;
> > +               drive-push-pull;
> > +               power-source = <1>; /* 1.8 V */
> > +               qcom,drive-strength = <PMIC_GPIO_STRENGTH_LOW>;
> > +       };
> > +};
> > +
> > +&pm8550ve_9_gpios {
> > +       usb0_1p8_reg_en: usb0-1p8-reg-en-state {
> > +               pins = "gpio8";
> > +               function = "normal";
> > +               power-source = <1>; /* 1.8V */
> > +               bias-disable;
> > +               input-disable;
> > +               output-enable;
> > +       };
> > +};
> > +
> >  &pmc8380_3_gpios {
> >         edp_bl_en: edp-bl-en-state {
> >                 pins = "gpio4";
> > @@ -711,6 +1124,17 @@ edp_bl_en: edp-bl-en-state {
> >         };
> >  };
> >
> > +&pmc8380_5_gpios {
> > +       usb0_pwr_1p15_reg_en: usb0-pwr-1p15-reg-en-state {
> > +               pins = "gpio8";
> > +               function = "normal";
> > +               power-source = <1>; /* 1.8V */
> > +               bias-disable;
> > +               input-disable;
> > +               output-enable;
> > +       };
> > +};
> > +
> >  &qupv3_0 {
> >         status = "okay";
> >  };
> > @@ -919,6 +1343,20 @@ wake-n-pins {
> >                 };
> >         };
> >
> > +       rtmr1_default: rtmr1-reset-n-active-state {
> > +               pins = "gpio176";
> > +               function = "gpio";
> > +               drive-strength = <2>;
> > +               bias-disable;
> > +       };
> > +
> > +       rtmr2_default: rtmr2-reset-n-active-state {
> > +               pins = "gpio185";
> > +               function = "gpio";
> > +               drive-strength = <2>;
> > +               bias-disable;
> > +       };
> > +
> >         tpad_default: tpad-default-state {
> >                 pins = "gpio3";
> >                 function = "gpio";
> > @@ -940,6 +1378,47 @@ reset-n-pins {
> >                 };
> >         };
> >
> > +       usb1_pwr_1p15_reg_en: usb1-pwr-1p15-reg-en-state {
> > +               pins = "gpio188";
> > +               function = "gpio";
> > +               drive-strength = <2>;
> > +               bias-disable;
> > +       };
> > +
> > +       usb1_pwr_1p8_reg_en: usb1-pwr-1p8-reg-en-state {
> > +               pins = "gpio175";
> > +               function = "gpio";
> > +               drive-strength = <2>;
> > +               bias-disable;
> > +       };
> > +
> > +       usb1_pwr_3p3_reg_en: usb1-pwr-3p3-reg-en-state {
> > +               pins = "gpio186";
> > +               function = "gpio";
> > +               drive-strength = <2>;
> > +               bias-disable;
> > +       };
> > +
> > +       usb2_pwr_1p15_reg_en: usb2-pwr-1p15-reg-en-state {
> > +               pins = "gpio189";
> > +               function = "gpio";
> > +               drive-strength = <2>;
> > +               bias-disable;
> > +       };
> > +
> > +       usb2_pwr_1p8_reg_en: usb2-pwr-1p8-reg-en-state {
> > +               pins = "gpio126";
> > +               function = "gpio";
> > +               drive-strength = <2>;
> > +               bias-disable;
> > +       };
> > +
> > +       usb2_pwr_3p3_reg_en: usb2-pwr-3p3-reg-en-state {
> > +               pins = "gpio187";
> > +               function = "gpio";
> > +               drive-strength = <2>;
> > +               bias-disable;
> > +       };
> >  };
> >
> >  &uart21 {
> > @@ -976,7 +1455,7 @@ &usb_1_ss0_dwc3_hs {
> >  };
> >
> >  &usb_1_ss0_qmpphy_out {
> > -       remote-endpoint = <&pmic_glink_ss0_ss_in>;
> > +       remote-endpoint = <&retimer_ss0_ss_in>;
> >  };
> >
> >  &usb_1_ss1_hsphy {
> > @@ -1008,7 +1487,7 @@ &usb_1_ss1_dwc3_hs {
> >  };
> >
> >  &usb_1_ss1_qmpphy_out {
> > -       remote-endpoint = <&pmic_glink_ss1_ss_in>;
> > +       remote-endpoint = <&retimer_ss1_ss_in>;
> >  };
> >
> >  &usb_1_ss2_hsphy {
> > @@ -1040,5 +1519,5 @@ &usb_1_ss2_dwc3_hs {
> >  };
> >
> >  &usb_1_ss2_qmpphy_out {
> > -       remote-endpoint = <&pmic_glink_ss2_ss_in>;
> > +       remote-endpoint = <&retimer_ss2_ss_in>;
> >  };
> >
> > ---
> > base-commit: f660850bc246fef15ba78c81f686860324396628
> > change-id: 20250416-slim7x-retimer-70b1e67b1d42
> >
> > Best regards,
> > --
> > Jens Glathe <jens.glathe@oldschoolsolutions.biz>
> >
> >
> >
Re: [PATCH] arm64: dts: qcom: x1e80100-lenovo-yoga-slim7x: add retimers, dp altmode support
Posted by Johan Hovold 8 months ago
On Thu, Apr 17, 2025 at 01:38:39PM +0200, Jens Glathe via B4 Relay wrote:
> From: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
> 
> comparing with CRD and other dts for a more complete support of the 7X
> 
> Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
 
>  #include <dt-bindings/gpio/gpio.h>
>  #include <dt-bindings/input/gpio-keys.h>
> +#include <dt-bindings/input/input.h>

Unrelated change.

> +#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>

Not needed with another unrelated change further down dropped.

>  #include <dt-bindings/regulator/qcom,rpmh-regulator.h>
>  
>  #include "x1e80100.dtsi"

> +&pm8550ve_8_gpios {
> +	misc_3p3_reg_en: misc-3p3-reg-en-state {
> +		pins = "gpio6";
> +		function = "normal";
> +		bias-disable;
> +		input-disable;
> +		output-enable;
> +		drive-push-pull;
> +		power-source = <1>; /* 1.8 V */
> +		qcom,drive-strength = <PMIC_GPIO_STRENGTH_LOW>;
> +	};
> +};

Unrelated change.

Johan
Re: [PATCH] arm64: dts: qcom: x1e80100-lenovo-yoga-slim7x: add retimers, dp altmode support
Posted by Jos Dehaes 8 months ago
> From: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
> 
> comparing with CRD and other dts for a more complete support of the 7X
> 
> Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
> ---
> This patch adds the required nodes to support DP Altmode on all three type-c
> ports. The definition is derived from the CRD. Since they are all marked 40Gbps,
> I assume there are 3 PS8830 retimers. 
> This modification is now for ~8 weeks in my tree with little to no complaints. I 
> don't have access to a Yoga Slim 7X, however many people on #aarch64-laptops do 
> and some are using this patch.
> ---

Tested-by: Jos Dehaes <jos.dehaes@gmail.com>

Tested on yoga slim 7x with a USB C cable to Iiyama screen@1440p. Was able to extend the screen on GNOME desktop.