[PATCH 3/4] arm64: dts: qcom: sc8280xp-x13s: Enable external display

From: Bjorn Andersson
Date: Tue Feb 07 2023 - 22:46:52 EST


Like on the CRD, add the necessary nodes to enable USB Type-C
altmode-based external display on the Lenovo ThinkPad X13s.

Signed-off-by: Bjorn Andersson <quic_bjorande@xxxxxxxxxxx>
---
.../qcom/sc8280xp-lenovo-thinkpad-x13s.dts | 191 +++++++++++++++++-
1 file changed, 189 insertions(+), 2 deletions(-)

diff --git a/arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts b/arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts
index 9f1456fde932..4ef15edd6c0f 100644
--- a/arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts
+++ b/arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts
@@ -77,6 +77,77 @@ switch-lid {
};
};

+ pmic-glink {
+ compatible = "qcom,sc8280xp-pmic-glink", "qcom,pmic-glink";
+
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ connector@0 {
+ compatible = "usb-c-connector";
+ reg = <0>;
+ power-role = "dual";
+ data-role = "dual";
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ port@0 {
+ reg = <0>;
+ pmic_glink_con0_hs: endpoint {
+ remote-endpoint = <&usb_0_role_switch>;
+ };
+ };
+
+ port@1 {
+ reg = <1>;
+ pmic_glink_con0_ss: endpoint {
+ remote-endpoint = <&mdss0_dp0_out>;
+ };
+ };
+
+ port@2 {
+ reg = <2>;
+ pmic_glink_con0_sbu: endpoint {
+ remote-endpoint = <&usb0_sbu_mux>;
+ };
+ };
+ };
+ };
+
+ connector@1 {
+ compatible = "usb-c-connector";
+ reg = <1>;
+ power-role = "dual";
+ data-role = "dual";
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ port@0 {
+ reg = <0>;
+ pmic_glink_con1_hs: endpoint {
+ remote-endpoint = <&usb_1_role_switch>;
+ };
+ };
+
+ port@1 {
+ reg = <1>;
+ pmic_glink_con1_ss: endpoint {
+ remote-endpoint = <&mdss0_dp1_out>;
+ };
+ };
+
+ port@2 {
+ reg = <2>;
+ pmic_glink_con1_sbu: endpoint {
+ remote-endpoint = <&usb1_sbu_mux>;
+ };
+ };
+ };
+ };
+ };
+
vreg_edp_3p3: regulator-edp-3p3 {
compatible = "regulator-fixed";

@@ -238,6 +309,46 @@ map1 {
};
};
};
+
+ usb0-sbu-mux {
+ compatible = "pericom,pi3usb102", "gpio-sbu-mux";
+
+ enable-gpios = <&tlmm 101 GPIO_ACTIVE_LOW>;
+ select-gpios = <&tlmm 164 GPIO_ACTIVE_HIGH>;
+
+ pinctrl-names = "default";
+ pinctrl-0 = <&usb0_sbu_default>;
+
+ mode-switch;
+ orientation-switch;
+ svid = /bits/ 16 <0xff01>;
+
+ port {
+ usb0_sbu_mux: endpoint {
+ remote-endpoint = <&pmic_glink_con0_sbu>;
+ };
+ };
+ };
+
+ usb1-sbu-mux {
+ compatible = "pericom,pi3usb102", "gpio-sbu-mux";
+
+ enable-gpios = <&tlmm 48 GPIO_ACTIVE_LOW>;
+ select-gpios = <&tlmm 47 GPIO_ACTIVE_HIGH>;
+
+ pinctrl-names = "default";
+ pinctrl-0 = <&usb1_sbu_default>;
+
+ mode-switch;
+ orientation-switch;
+ svid = /bits/ 16 <0xff01>;
+
+ port {
+ usb1_sbu_mux: endpoint {
+ remote-endpoint = <&pmic_glink_con1_sbu>;
+ };
+ };
+ };
};

&apps_rsc {
@@ -377,6 +488,36 @@ &mdss0 {
status = "okay";
};

+&mdss0_dp0 {
+ status = "okay";
+
+ data-lanes = <0 1>;
+
+ ports {
+ port@1 {
+ reg = <1>;
+ mdss0_dp0_out: endpoint {
+ remote-endpoint = <&pmic_glink_con0_ss>;
+ };
+ };
+ };
+};
+
+&mdss0_dp1 {
+ status = "okay";
+
+ data-lanes = <0 1>;
+
+ ports {
+ port@1 {
+ reg = <1>;
+ mdss0_dp1_out: endpoint {
+ remote-endpoint = <&pmic_glink_con1_ss>;
+ };
+ };
+ };
+};
+
&mdss0_dp3 {
compatible = "qcom,sc8280xp-edp";

@@ -871,8 +1012,13 @@ &usb_0 {
};

&usb_0_dwc3 {
- /* TODO: Define USB-C connector properly */
dr_mode = "host";
+
+ port {
+ usb_0_role_switch: endpoint {
+ remote-endpoint = <&pmic_glink_con0_hs>;
+ };
+ };
};

&usb_0_hsphy {
@@ -895,8 +1041,13 @@ &usb_1 {
};

&usb_1_dwc3 {
- /* TODO: Define USB-C connector properly */
dr_mode = "host";
+
+ port {
+ usb_1_role_switch: endpoint {
+ remote-endpoint = <&pmic_glink_con1_hs>;
+ };
+ };
};

&usb_1_hsphy {
@@ -1147,6 +1298,42 @@ reset-n-pins {
};
};

+ usb0_sbu_default: usb0-sbu-state {
+ oe-n-pins {
+ pins = "gpio101";
+ function = "gpio";
+ };
+
+ sel-pins {
+ pins = "gpio164";
+ function = "gpio";
+ };
+
+ mode-pins {
+ pins = "gpio167";
+ function = "gpio";
+ output-high;
+ };
+ };
+
+ usb1_sbu_default: usb1-sbu-state {
+ oe-n-pins {
+ pins = "gpio48";
+ function = "gpio";
+ };
+
+ sel-pins {
+ pins = "gpio47";
+ function = "gpio";
+ };
+
+ mode-pins {
+ pins = "gpio50";
+ function = "gpio";
+ output-high;
+ };
+ };
+
wcd_default: wcd-default-state {
reset-pins {
pins = "gpio106";
--
2.39.1