arm64: dts: qcom: gaokun3: Add Embedded Controller node
authorPengyu Luo <mitltlatltl@gmail.com>
Fri, 14 Feb 2025 18:06:56 +0000 (02:06 +0800)
committerIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Mon, 3 Mar 2025 08:55:38 +0000 (10:55 +0200)
The Embedded Controller in the Huawei Matebook E Go is accessible on &i2c15
and provides battery and adapter status, port orientation status, as well
as HPD event notifications for two USB Type-C port, etc.

Add the EC to the device tree and describe the relationship among
the type-c connectors, role switches, orientation switches and the QMP
combo PHY.

Signed-off-by: Pengyu Luo <mitltlatltl@gmail.com>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Link: https://lore.kernel.org/r/20250214180656.28599-4-mitltlatltl@gmail.com
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
arch/arm64/boot/dts/qcom/sc8280xp-huawei-gaokun3.dts

index 09b95f89ee58058874aad577adbb08bfdc4772ec..1667c7157057825e92c6103c9d8fe03dbf1d2b4c 100644 (file)
@@ -28,6 +28,7 @@
 
        aliases {
                i2c4 = &i2c4;
+               i2c15 = &i2c15;
                serial1 = &uart2;
        };
 
                };
        };
 
+       usb0-sbu-mux {
+               compatible = "pericom,pi3usb102", "gpio-sbu-mux";
+
+               select-gpios = <&tlmm 164 GPIO_ACTIVE_HIGH>;
+
+               pinctrl-0 = <&usb0_sbu_default>;
+               pinctrl-names = "default";
+
+               orientation-switch;
+
+               port {
+                       usb0_sbu_mux: endpoint {
+                               remote-endpoint = <&ucsi0_sbu>;
+                       };
+               };
+       };
+
+       usb1-sbu-mux {
+               compatible = "pericom,pi3usb102", "gpio-sbu-mux";
+
+               select-gpios = <&tlmm 47 GPIO_ACTIVE_HIGH>;
+
+               pinctrl-0 = <&usb1_sbu_default>;
+               pinctrl-names = "default";
+
+               orientation-switch;
+
+               port {
+                       usb1_sbu_mux: endpoint {
+                               remote-endpoint = <&ucsi1_sbu>;
+                       };
+               };
+       };
+
        wcn6855-pmu {
                compatible = "qcom,wcn6855-pmu";
 
 
 };
 
+&i2c15 {
+       clock-frequency = <400000>;
+
+       pinctrl-0 = <&i2c15_default>;
+       pinctrl-names = "default";
+
+       status = "okay";
+
+       embedded-controller@38 {
+               compatible = "huawei,gaokun3-ec";
+               reg = <0x38>;
+
+               interrupts-extended = <&tlmm 107 IRQ_TYPE_LEVEL_LOW>;
+
+               #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>;
+
+                                       ucsi0_hs_in: endpoint {
+                                               remote-endpoint = <&usb_0_dwc3_hs>;
+                                       };
+                               };
+
+                               port@1 {
+                                       reg = <1>;
+
+                                       ucsi0_ss_in: endpoint {
+                                               remote-endpoint = <&usb_0_qmpphy_out>;
+                                       };
+                               };
+
+                               port@2 {
+                                       reg = <2>;
+
+                                       ucsi0_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>;
+
+                                       ucsi1_hs_in: endpoint {
+                                               remote-endpoint = <&usb_1_dwc3_hs>;
+                                       };
+                               };
+
+                               port@1 {
+                                       reg = <1>;
+
+                                       ucsi1_ss_in: endpoint {
+                                               remote-endpoint = <&usb_1_qmpphy_out>;
+                                       };
+                               };
+
+                               port@2 {
+                                       reg = <2>;
+
+                                       ucsi1_sbu: endpoint {
+                                               remote-endpoint = <&usb1_sbu_mux>;
+                                       };
+                               };
+                       };
+               };
+       };
+};
+
 &mdss0 {
        status = "okay";
 };
        dr_mode = "host";
 };
 
+&usb_0_dwc3_hs {
+       remote-endpoint = <&ucsi0_hs_in>;
+};
+
 &usb_0_hsphy {
        vdda-pll-supply = <&vreg_l9d>;
        vdda18-supply = <&vreg_l1c>;
        remote-endpoint = <&mdss0_dp0_out>;
 };
 
+&usb_0_qmpphy_out {
+       remote-endpoint = <&ucsi0_ss_in>;
+};
+
 &usb_1 {
        status = "okay";
 };
        dr_mode = "host";
 };
 
+&usb_1_dwc3_hs {
+       remote-endpoint = <&ucsi1_hs_in>;
+};
+
 &usb_1_hsphy {
        vdda-pll-supply = <&vreg_l4b>;
        vdda18-supply = <&vreg_l1c>;
        remote-endpoint = <&mdss0_dp1_out>;
 };
 
+&usb_1_qmpphy_out {
+       remote-endpoint = <&ucsi1_ss_in>;
+};
+
 &usb_2 {
        status = "okay";
 };
                bias-disable;
        };
 
+       i2c15_default: i2c15-default-state {
+               pins = "gpio36", "gpio37";
+               function = "qup15";
+               drive-strength = <2>;
+               bias-pull-up;
+       };
+
        mode_pin_active: mode-pin-state {
                pins = "gpio26";
                function = "gpio";
                };
        };
 
+       usb0_sbu_default: usb0-sbu-state {
+               pins = "gpio164";
+               function = "gpio";
+               drive-strength = <16>;
+               bias-disable;
+       };
+
+       usb1_sbu_default: usb1-sbu-state {
+               pins = "gpio47";
+               function = "gpio";
+               drive-strength = <16>;
+               bias-disable;
+       };
+
        wcd_default: wcd-default-state {
                reset-pins {
                        pins = "gpio106";