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: Konrad Dybcio <konrad.dybcio@linaro.org>
Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Link: https://lore.kernel.org/r/20240530-fp4-tcpm-v3-3-612d4bbd5e09@fairphone.com
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
This commit is contained in:
Luca Weiss 2024-05-30 17:05:49 +02:00 committed by Bjorn Andersson
parent 6b5b15a1d7
commit 6814d454c2
3 changed files with 108 additions and 1 deletions

View File

@ -375,6 +375,7 @@
};
&usb_1_dwc3 {
/delete-property/ usb-role-switch;
maximum-speed = "super-speed";
dr_mode = "peripheral";
};

View File

@ -1715,10 +1715,39 @@
<&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 @@
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>;
};
};
};
};
};

View File

@ -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 @@
};
};
&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_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 @@
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>;