Commit 6814d454 authored by Luca Weiss's avatar Luca Weiss Committed by Bjorn Andersson
Browse files

arm64: dts: qcom: sm7225-fairphone-fp4: Enable USB role switching



Configure the Type-C and VBUS regulator on PM7250B and wire it up to the
USB PHY, so that USB role and orientation switching works.

For now USB Power Delivery properties are skipped / disabled, so that
the (presumably) bootloader-configured charger doesn't get messed with
and we can charge the phone with at least some amount of power.

Reviewed-by: default avatarKonrad Dybcio <konrad.dybcio@linaro.org>
Signed-off-by: default avatarLuca Weiss <luca.weiss@fairphone.com>
Reviewed-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Link: https://lore.kernel.org/r/20240530-fp4-tcpm-v3-3-612d4bbd5e09@fairphone.com


Signed-off-by: default avatarBjorn Andersson <andersson@kernel.org>
parent 6b5b15a1
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -375,6 +375,7 @@ &usb_1 {
};

&usb_1_dwc3 {
	/delete-property/ usb-role-switch;
	maximum-speed = "super-speed";
	dr_mode = "peripheral";
};
+50 −0
Original line number Diff line number Diff line
@@ -1715,10 +1715,39 @@ usb_1_qmpphy: phy@88e8000 {
				 <&gcc GCC_USB3_DP_PHY_PRIM_BCR>;
			reset-names = "phy", "common";

			orientation-switch;

			#clock-cells = <1>;
			#phy-cells = <1>;

			status = "disabled";

			ports {
				#address-cells = <1>;
				#size-cells = <0>;

				port@0 {
					reg = <0>;

					usb_1_qmpphy_out: endpoint {
					};
				};

				port@1 {
					reg = <1>;

					usb_1_qmpphy_usb_ss_in: endpoint {
						remote-endpoint = <&usb_1_dwc3_ss_out>;
					};
				};

				port@2 {
					reg = <2>;

					usb_1_qmpphy_dp_in: endpoint {
					};
				};
			};
		};

		dc_noc: interconnect@9160000 {
@@ -1894,6 +1923,27 @@ usb_1_dwc3: usb@a600000 {
				snps,hird-threshold = /bits/ 8 <0x10>;
				phys = <&usb_1_hsphy>, <&usb_1_qmpphy QMP_USB43DP_USB3_PHY>;
				phy-names = "usb2-phy", "usb3-phy";
				usb-role-switch;

				ports {
					#address-cells = <1>;
					#size-cells = <0>;

					port@0 {
						reg = <0>;

						usb_1_dwc3_hs_out: endpoint {
						};
					};

					port@1 {
						reg = <1>;

						usb_1_dwc3_ss_out: endpoint {
							remote-endpoint = <&usb_1_qmpphy_usb_ss_in>;
						};
					};
				};
			};
		};

+57 −1
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@
#include <dt-bindings/leds/common.h>
#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>
#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
#include <dt-bindings/usb/pd.h>
#include "sm7225.dtsi"
#include "pm6150l.dtsi"
#include "pm6350.dtsi"
@@ -543,6 +544,53 @@ conn-therm@1 {
	};
};

&pm7250b_typec {
	vdd-pdphy-supply = <&vreg_l3a>;

	status = "okay";

	connector {
		compatible = "usb-c-connector";

		power-role = "dual";
		data-role = "dual";
		self-powered;

		/*
		 * Disable USB Power Delivery for now, seems to need extra work
		 * to support role switching while also letting the battery
		 * charge still - without charger driver
		 */
		typec-power-opmode = "default";
		pd-disable;

		ports {
			#address-cells = <1>;
			#size-cells = <0>;

			port@0 {
				reg = <0>;
				pm7250b_hs_in: endpoint {
					remote-endpoint = <&usb_1_dwc3_hs_out>;
				};
			};

			port@1 {
				reg = <1>;
				pm7250b_ss_in: endpoint {
					remote-endpoint = <&usb_1_qmpphy_out>;
				};
			};
		};
	};
};

&pm7250b_vbus {
	regulator-min-microamp = <500000>;
	regulator-max-microamp = <1500000>;
	status = "okay";
};

&pmk8350_rtc {
	status = "okay";
};
@@ -726,7 +774,11 @@ &usb_1 {

&usb_1_dwc3 {
	maximum-speed = "super-speed";
	dr_mode = "peripheral";
	dr_mode = "otg";
};

&usb_1_dwc3_hs_out {
	remote-endpoint = <&pm7250b_hs_in>;
};

&usb_1_hsphy {
@@ -744,6 +796,10 @@ &usb_1_qmpphy {
	status = "okay";
};

&usb_1_qmpphy_out {
	remote-endpoint = <&pm7250b_ss_in>;
};

&wifi {
	vdd-0.8-cx-mx-supply = <&vreg_l4a>;
	vdd-1.8-xo-supply = <&vreg_l7a>;