mbox series

[v8,00/11] Add Qualcomm PMIC TPCM support

Message ID 20230515133643.3621656-1-bryan.odonoghue@linaro.org
Headers show
Series Add Qualcomm PMIC TPCM support | expand

Message

Bryan O'Donoghue May 15, 2023, 1:36 p.m. UTC
Bootable tree
Link: https://git.codelinaro.org/bryan.odonoghue/kernel/-/tree/usb-next-23-05-14-qcom-wrapper-typec-mux-bjorn

V8:
- Makes pm8150b_typec::status = disabled by default - bod
- Greg merged the TCPM description and driver to usb-next so two patches less now.
  I've rebased this series on to usb-next using "--base=auto"
  All of the kernel robot dts/yaml checks should now pass against usb-next / a4422ff221429c600c3dc5d0394fb3738b89d040

V7:
- Adds R/B to "dt-bindings: phy: qcom,sc7180-qmp-usb3-dp-phy: Add input and output ports" - Krzysztof
- Fixes indicated, adds R/B to "dt-bindings: usb: Add Qualcomm PMIC Type-C" - Krzysztof
- Fixes indicated, adds R/B to "usb: typec: qcom: Add Qualcomm PMIC Type-C driver" - Guenter
- Fixes indicated, adds R/B to "usb: typec: qcom: Add Qualcomm PMIC Type-C driver" - Caleb
- Adds R/B to "arm64: dts: qcom: sm8250: Define ports for qmpphy orientation-switching" - Konrad
- Adds R/B to "arm64: dts: qcom: qrb5165-rb5: Switch on Type-C VBUS boost" - Konrad
- Fixes indicated, adds R/B to "arm64: dts: qcom: qrb5165-rb5: Switch on basic TCPM" - Jianhua, Konrad
- Connector ports/endpoints left inside of connector
  Documentation/devicetree/bindings/connector/usb-connector.yaml - Jianhua
- dwc3_role_switch_in -> usb_1_dwc3_role_switch_in
  qmpphy_typec_mux_in -> usb_1_qmpphy_typec_mux_in
  Both ports/endpoints defined inside of pm8150b dtsi - Konrad

  I modified the name of both so that the port/endpoint would be directly
  adjacent to the containing node in the dtsi file for code locality/readbility - bod

- Fixes newline indicated "arm64: dts: qcom: qrb5165-rb5: Switch on TCPM usb-role-switching for usb_1" - Jianhua, Konrad
- Fixes newline indicated "arm64: dts: qcom: qrb5165-rb5: Switch on TCPM orientation-switch for usb_1_qmpphy" - Jianhua, Konrad

- connector
  I have left the connector defintion and its ports/endpoints in the platform dts

  The reason for this
  a) Prior art e.g. arch/arm64/boot/dts/qcom/sc8280xp*
  b) The connector is really a non-SoC/PMIC component its something that is defined
     for your platform.

  I'm open to further debate on this topic:
  Link: https://imgflip.com/i/7kw6ck

- port@1 -> port@1 "arm64: dts: qcom: qrb5165-rb5: Switch on TCPM orientation-switch for usb_1_qmpphy" - Jianhua

- OF: graph: no port node found in /soc@0/spmi@c440000/pmic@2/typec@1500

  I left this as-is since the DT model we want is to connect the connector directly to
  the PHY for orientation or controller for data-role switching

  I similarly didn't put this hack in place to remove the warning but "it would work"

V6:
 - I'm dropping the previous V1-V6 log because the text is getting too long
   here's a link to the previous cover letter instead
   Link: https://lore.kernel.org/linux-arm-msm/20230501121111.1058190-1-bryan.odonoghue@linaro.org/


Bryan O'Donoghue (11):
  dt-bindings: regulator: qcom,usb-vbus-regulator: Mark reg as required
  dt-bindings: regulator: qcom,usb-vbus-regulator: Mark
    regulator-*-microamp required
  dt-bindings: phy: qcom,sc7180-qmp-usb3-dp-phy: Add orientation-switch
    as optional
  dt-bindings: phy: qcom,sc7180-qmp-usb3-dp-phy: Add input and output
    ports
  dt-bindings: mfd: qcom,spmi-pmic: Add typec to SPMI device types
  arm64: dts: qcom: sm8250: Define ports for qmpphy
    orientation-switching
  arm64: dts: qcom: pm8150b: Add a TCPM description
  arm64: dts: qcom: qrb5165-rb5: Switch on Type-C VBUS boost
  arm64: dts: qcom: qrb5165-rb5: Switch on basic TCPM
  arm64: dts: qcom: qrb5165-rb5: Switch on TCPM usb-role-switching for
    usb_1
  arm64: dts: qcom: qrb5165-rb5: Switch on TCPM orientation-switch for
    usb_1_qmpphy

 .../bindings/mfd/qcom,spmi-pmic.yaml          |  4 ++
 .../phy/qcom,sc7180-qmp-usb3-dp-phy.yaml      | 44 +++++++++++++++
 .../regulator/qcom,usb-vbus-regulator.yaml    | 10 +++-
 arch/arm64/boot/dts/qcom/pm8150b.dtsi         | 40 +++++++++++++
 arch/arm64/boot/dts/qcom/qrb5165-rb5.dts      | 56 ++++++++++++++++++-
 arch/arm64/boot/dts/qcom/sm8250.dtsi          | 18 ++++++
 6 files changed, 170 insertions(+), 2 deletions(-)


base-commit: a4422ff221429c600c3dc5d0394fb3738b89d040

Comments

Konrad Dybcio May 18, 2023, 10:01 a.m. UTC | #1
On 15.05.2023 15:36, Bryan O'Donoghue wrote:
> Type-C port management functionality lives inside of the PMIC block on
> pm8150b.
> 
> The Type-C port management logic controls orientation detection, vbus/vconn
> sense and to send/receive Type-C Power Domain messages.
> 
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> ---
Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>

Konrad
>  arch/arm64/boot/dts/qcom/pm8150b.dtsi | 40 +++++++++++++++++++++++++++
>  1 file changed, 40 insertions(+)
> 
> diff --git a/arch/arm64/boot/dts/qcom/pm8150b.dtsi b/arch/arm64/boot/dts/qcom/pm8150b.dtsi
> index 66752cc063d60..136e5f96a3d53 100644
> --- a/arch/arm64/boot/dts/qcom/pm8150b.dtsi
> +++ b/arch/arm64/boot/dts/qcom/pm8150b.dtsi
> @@ -59,6 +59,46 @@ pm8150b_vbus: usb-vbus-regulator@1100 {
>  			reg = <0x1100>;
>  		};
>  
> +		pm8150b_typec: typec@1500 {
> +			compatible = "qcom,pm8150b-typec";
> +			status = "disabled";
> +			reg = <0x1500>,
> +			      <0x1700>;
> +			interrupts = <0x2 0x15 0x00 IRQ_TYPE_EDGE_RISING>,
> +				     <0x2 0x15 0x01 IRQ_TYPE_EDGE_BOTH>,
> +				     <0x2 0x15 0x02 IRQ_TYPE_EDGE_RISING>,
> +				     <0x2 0x15 0x03 IRQ_TYPE_EDGE_BOTH>,
> +				     <0x2 0x15 0x04 IRQ_TYPE_EDGE_RISING>,
> +				     <0x2 0x15 0x05 IRQ_TYPE_EDGE_RISING>,
> +				     <0x2 0x15 0x06 IRQ_TYPE_EDGE_BOTH>,
> +				     <0x2 0x15 0x07 IRQ_TYPE_EDGE_RISING>,
> +				     <0x2 0x17 0x00 IRQ_TYPE_EDGE_RISING>,
> +				     <0x2 0x17 0x01 IRQ_TYPE_EDGE_RISING>,
> +				     <0x2 0x17 0x02 IRQ_TYPE_EDGE_RISING>,
> +				     <0x2 0x17 0x03 IRQ_TYPE_EDGE_RISING>,
> +				     <0x2 0x17 0x04 IRQ_TYPE_EDGE_RISING>,
> +				     <0x2 0x17 0x05 IRQ_TYPE_EDGE_RISING>,
> +				     <0x2 0x17 0x06 IRQ_TYPE_EDGE_RISING>,
> +				     <0x2 0x17 0x07 IRQ_TYPE_EDGE_RISING>;
> +			interrupt-names = "or-rid-detect-change",
> +					  "vpd-detect",
> +					  "cc-state-change",
> +					  "vconn-oc",
> +					  "vbus-change",
> +					  "attach-detach",
> +					  "legacy-cable-detect",
> +					  "try-snk-src-detect",
> +					  "sig-tx",
> +					  "sig-rx",
> +					  "msg-tx",
> +					  "msg-rx",
> +					  "msg-tx-failed",
> +					  "msg-tx-discarded",
> +					  "msg-rx-discarded",
> +					  "fr-swap";
> +			vdd-vbus-supply = <&pm8150b_vbus>;
> +		};
> +
>  		pm8150b_temp: temp-alarm@2400 {
>  			compatible = "qcom,spmi-temp-alarm";
>  			reg = <0x2400>;
Dmitry Baryshkov July 8, 2023, 11:48 p.m. UTC | #2
On 15/05/2023 16:36, Bryan O'Donoghue wrote:
> Switch on usb-role-switching for usb_1 via TCPM. We need to declare
> usb-role-switch in &usb_1 and associate with the remote-endpoint in TCPM
> which provides the necessary signal.
> 
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> ---
>   arch/arm64/boot/dts/qcom/qrb5165-rb5.dts | 19 ++++++++++++++++++-
>   arch/arm64/boot/dts/qcom/sm8250.dtsi     |  4 ++++
>   2 files changed, 22 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts b/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts
> index d80a22bff7969..580ed63c6fb54 100644
> --- a/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts
> +++ b/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts
> @@ -1273,7 +1273,12 @@ &usb_1 {
>   };
>   
>   &usb_1_dwc3 {
> -	dr_mode = "peripheral";
> +	dr_mode = "otg";
> +	usb-role-switch;
> +};
> +
> +&usb_1_dwc3_role_switch_in {
> +	remote-endpoint = <&pm8150b_role_switch_out>;
>   };
>   
>   &usb_1_hsphy {
> @@ -1362,5 +1367,17 @@ connector {
>   					 PDO_FIXED_DUAL_ROLE |
>   					 PDO_FIXED_USB_COMM |
>   					 PDO_FIXED_DATA_SWAP)>;
> +
> +		ports {
> +			#address-cells = <1>;
> +			#size-cells = <0>;
> +
> +			port@0 {
> +				reg = <0>;

Empty line before the child node, please.

> +				pm8150b_role_switch_out: endpoint {
> +					remote-endpoint = <&usb_1_dwc3_role_switch_in>;
> +				};
> +			};
> +		};
>   	};
>   };
> diff --git a/arch/arm64/boot/dts/qcom/sm8250.dtsi b/arch/arm64/boot/dts/qcom/sm8250.dtsi
> index 0bc7486e59e54..b9f55a9ef89f8 100644
> --- a/arch/arm64/boot/dts/qcom/sm8250.dtsi
> +++ b/arch/arm64/boot/dts/qcom/sm8250.dtsi
> @@ -3740,6 +3740,10 @@ usb_1_dwc3: usb@a600000 {
>   				snps,dis_enblslpm_quirk;
>   				phys = <&usb_1_hsphy>, <&usb_1_ssphy>;
>   				phy-names = "usb2-phy", "usb3-phy";
> +
> +				port {
> +					usb_1_dwc3_role_switch_in: endpoint {};
> +				};
>   			};
>   		};
>
Dmitry Baryshkov July 8, 2023, 11:48 p.m. UTC | #3
On 15/05/2023 16:36, Bryan O'Donoghue wrote:
> Switch on USB orientation-switching for usb_1_qmp via TCPM. Detecting the
> orientation switch is required to get the PHY to reset and bring-up the PHY
> with the CC lines set to the appropriate lane.
> 
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> ---
>   arch/arm64/boot/dts/qcom/qrb5165-rb5.dts | 11 +++++++++++
>   arch/arm64/boot/dts/qcom/sm8250.dtsi     |  1 +
>   2 files changed, 12 insertions(+)
> 
> diff --git a/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts b/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts
> index 580ed63c6fb54..9b314c390e3f8 100644
> --- a/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts
> +++ b/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts
> @@ -1294,6 +1294,11 @@ &usb_1_qmpphy {
>   
>   	vdda-phy-supply = <&vreg_l9a_1p2>;
>   	vdda-pll-supply = <&vreg_l18a_0p92>;
> +	orientation-switch;
> +};
> +
> +&usb_1_qmpphy_typec_mux_in {
> +	remote-endpoint = <&pm8150b_typec_mux_out>;
>   };
>   
>   &usb_2 {
> @@ -1378,6 +1383,12 @@ pm8150b_role_switch_out: endpoint {
>   					remote-endpoint = <&usb_1_dwc3_role_switch_in>;
>   				};
>   			};
> +			port@1 {
> +				reg = <1>;

Empty line before the child node, please.

> +				pm8150b_typec_mux_out: endpoint {
> +					remote-endpoint = <&usb_1_qmpphy_typec_mux_in>;
> +				};
> +			};
>   		};
>   	};
>   };
> diff --git a/arch/arm64/boot/dts/qcom/sm8250.dtsi b/arch/arm64/boot/dts/qcom/sm8250.dtsi
> index b9f55a9ef89f8..f538216f3704f 100644
> --- a/arch/arm64/boot/dts/qcom/sm8250.dtsi
> +++ b/arch/arm64/boot/dts/qcom/sm8250.dtsi
> @@ -3588,6 +3588,7 @@ ports {
>   
>   				port@0 {
>   					reg = <0>;

And maybe here too.

> +					usb_1_qmpphy_typec_mux_in: endpoint {};
>   				};
>   
>   				port@1 {
Dmitry Baryshkov July 8, 2023, 11:49 p.m. UTC | #4
On 15/05/2023 16:36, Bryan O'Donoghue wrote:
> Bootable tree
> Link: https://git.codelinaro.org/bryan.odonoghue/kernel/-/tree/usb-next-23-05-14-qcom-wrapper-typec-mux-bjorn
> 
> V8:
> - Makes pm8150b_typec::status = disabled by default - bod
> - Greg merged the TCPM description and driver to usb-next so two patches less now.
>    I've rebased this series on to usb-next using "--base=auto"
>    All of the kernel robot dts/yaml checks should now pass against usb-next / a4422ff221429c600c3dc5d0394fb3738b89d040
> 
> V7:
> - Adds R/B to "dt-bindings: phy: qcom,sc7180-qmp-usb3-dp-phy: Add input and output ports" - Krzysztof
> - Fixes indicated, adds R/B to "dt-bindings: usb: Add Qualcomm PMIC Type-C" - Krzysztof
> - Fixes indicated, adds R/B to "usb: typec: qcom: Add Qualcomm PMIC Type-C driver" - Guenter
> - Fixes indicated, adds R/B to "usb: typec: qcom: Add Qualcomm PMIC Type-C driver" - Caleb
> - Adds R/B to "arm64: dts: qcom: sm8250: Define ports for qmpphy orientation-switching" - Konrad
> - Adds R/B to "arm64: dts: qcom: qrb5165-rb5: Switch on Type-C VBUS boost" - Konrad
> - Fixes indicated, adds R/B to "arm64: dts: qcom: qrb5165-rb5: Switch on basic TCPM" - Jianhua, Konrad
> - Connector ports/endpoints left inside of connector
>    Documentation/devicetree/bindings/connector/usb-connector.yaml - Jianhua
> - dwc3_role_switch_in -> usb_1_dwc3_role_switch_in
>    qmpphy_typec_mux_in -> usb_1_qmpphy_typec_mux_in
>    Both ports/endpoints defined inside of pm8150b dtsi - Konrad
> 
>    I modified the name of both so that the port/endpoint would be directly
>    adjacent to the containing node in the dtsi file for code locality/readbility - bod
> 
> - Fixes newline indicated "arm64: dts: qcom: qrb5165-rb5: Switch on TCPM usb-role-switching for usb_1" - Jianhua, Konrad
> - Fixes newline indicated "arm64: dts: qcom: qrb5165-rb5: Switch on TCPM orientation-switch for usb_1_qmpphy" - Jianhua, Konrad
> 
> - connector
>    I have left the connector defintion and its ports/endpoints in the platform dts
> 
>    The reason for this
>    a) Prior art e.g. arch/arm64/boot/dts/qcom/sc8280xp*
>    b) The connector is really a non-SoC/PMIC component its something that is defined
>       for your platform.
> 
>    I'm open to further debate on this topic:
>    Link: https://imgflip.com/i/7kw6ck
> 
> - port@1 -> port@1 "arm64: dts: qcom: qrb5165-rb5: Switch on TCPM orientation-switch for usb_1_qmpphy" - Jianhua
> 
> - OF: graph: no port node found in /soc@0/spmi@c440000/pmic@2/typec@1500
> 
>    I left this as-is since the DT model we want is to connect the connector directly to
>    the PHY for orientation or controller for data-role switching
> 
>    I similarly didn't put this hack in place to remove the warning but "it would work"
> 
> V6:
>   - I'm dropping the previous V1-V6 log because the text is getting too long
>     here's a link to the previous cover letter instead
>     Link: https://lore.kernel.org/linux-arm-msm/20230501121111.1058190-1-bryan.odonoghue@linaro.org/
> 
> 
> Bryan O'Donoghue (11):
>    dt-bindings: regulator: qcom,usb-vbus-regulator: Mark reg as required
>    dt-bindings: regulator: qcom,usb-vbus-regulator: Mark
>      regulator-*-microamp required
>    dt-bindings: phy: qcom,sc7180-qmp-usb3-dp-phy: Add orientation-switch
>      as optional
>    dt-bindings: phy: qcom,sc7180-qmp-usb3-dp-phy: Add input and output
>      ports
>    dt-bindings: mfd: qcom,spmi-pmic: Add typec to SPMI device types
>    arm64: dts: qcom: sm8250: Define ports for qmpphy
>      orientation-switching
>    arm64: dts: qcom: pm8150b: Add a TCPM description
>    arm64: dts: qcom: qrb5165-rb5: Switch on Type-C VBUS boost
>    arm64: dts: qcom: qrb5165-rb5: Switch on basic TCPM
>    arm64: dts: qcom: qrb5165-rb5: Switch on TCPM usb-role-switching for
>      usb_1
>    arm64: dts: qcom: qrb5165-rb5: Switch on TCPM orientation-switch for
>      usb_1_qmpphy
> 
>   .../bindings/mfd/qcom,spmi-pmic.yaml          |  4 ++
>   .../phy/qcom,sc7180-qmp-usb3-dp-phy.yaml      | 44 +++++++++++++++
>   .../regulator/qcom,usb-vbus-regulator.yaml    | 10 +++-
>   arch/arm64/boot/dts/qcom/pm8150b.dtsi         | 40 +++++++++++++
>   arch/arm64/boot/dts/qcom/qrb5165-rb5.dts      | 56 ++++++++++++++++++-
>   arch/arm64/boot/dts/qcom/sm8250.dtsi          | 18 ++++++
>   6 files changed, 170 insertions(+), 2 deletions(-)

Tested-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Dmitry Baryshkov July 9, 2023, 12:17 a.m. UTC | #5
On 15/05/2023 16:36, Bryan O'Donoghue wrote:
> Switch on VBUS for the Type-C port. We need to support a higher amperage
> than the bootloader set 2 Amps.
> 
> Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> ---
>   arch/arm64/boot/dts/qcom/qrb5165-rb5.dts | 6 ++++++
>   1 file changed, 6 insertions(+)
> 
> diff --git a/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts b/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts
> index dd924331b0eea..b326bdeeb7742 100644
> --- a/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts
> +++ b/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts
> @@ -1338,3 +1338,9 @@ &qup_spi0_data_clk {
>   	drive-strength = <6>;
>   	bias-disable;
>   };
> +
> +&pm8150b_vbus {
> +	regulator-min-microamp = <500000>;
> +	regulator-max-microamp = <3000000>;
> +	status = "okay";
> +};

Note, you are placing this declaration (and further changes in the next 
patches) at the end of the file, in the pinctrl area. Please move them 
up into a correct place.