Qualcomm RPM/RPMh Power domains For RPM/RPMh Power domains, we communicate a performance state to RPM/RPMh which then translates it into a corresponding voltage on a rail Required Properties: - compatible: Should be one of the following * qcom,msm8996-rpmpd: RPM Power domain for the msm8996 family of SoC * qcom,msm8998-rpmpd: RPM Power domain for the msm8998 family of SoC * qcom,qcs404-rpmpd: RPM Power domain for the qcs404 family of SoC * qcom,sdm845-rpmhpd: RPMh Power domain for the sdm845 family of SoC - #power-domain-cells: number of cells in Power domain specifier must be 1. - operating-points-v2: Phandle to the OPP table for the Power domain. Refer to Documentation/devicetree/bindings/power/power_domain.txt and Documentation/devicetree/bindings/opp/opp.txt for more details Refer to for the level values for various OPPs for different platforms as well as Power domain indexes Example: rpmh power domain controller and OPP table #include opp-level values specified in the OPP tables for RPMh power domains should use the RPMH_REGULATOR_LEVEL_* constants from rpmhpd: power-controller { compatible = "qcom,sdm845-rpmhpd"; #power-domain-cells = <1>; operating-points-v2 = <&rpmhpd_opp_table>; rpmhpd_opp_table: opp-table { compatible = "operating-points-v2"; rpmhpd_opp_ret: opp1 { opp-level = ; }; rpmhpd_opp_min_svs: opp2 { opp-level = ; }; rpmhpd_opp_low_svs: opp3 { opp-level = ; }; rpmhpd_opp_svs: opp4 { opp-level = ; }; rpmhpd_opp_svs_l1: opp5 { opp-level = ; }; rpmhpd_opp_nom: opp6 { opp-level = ; }; rpmhpd_opp_nom_l1: opp7 { opp-level = ; }; rpmhpd_opp_nom_l2: opp8 { opp-level = ; }; rpmhpd_opp_turbo: opp9 { opp-level = ; }; rpmhpd_opp_turbo_l1: opp10 { opp-level = ; }; }; }; Example: rpm power domain controller and OPP table rpmpd: power-controller { compatible = "qcom,msm8996-rpmpd"; #power-domain-cells = <1>; operating-points-v2 = <&rpmpd_opp_table>; rpmpd_opp_table: opp-table { compatible = "operating-points-v2"; rpmpd_opp_low: opp1 { opp-level = <1>; }; rpmpd_opp_ret: opp2 { opp-level = <2>; }; rpmpd_opp_svs: opp3 { opp-level = <3>; }; rpmpd_opp_normal: opp4 { opp-level = <4>; }; rpmpd_opp_high: opp5 { opp-level = <5>; }; rpmpd_opp_turbo: opp6 { opp-level = <6>; }; }; }; Example: Client/Consumer device using OPP table leaky-device0@12350000 { compatible = "foo,i-leak-current"; reg = <0x12350000 0x1000>; power-domains = <&rpmhpd SDM845_MX>; operating-points-v2 = <&leaky_opp_table>; }; leaky_opp_table: opp-table { compatible = "operating-points-v2"; opp1 { opp-hz = /bits/ 64 <144000>; required-opps = <&rpmhpd_opp_low>; }; opp2 { opp-hz = /bits/ 64 <400000>; required-opps = <&rpmhpd_opp_ret>; }; opp3 { opp-hz = /bits/ 64 <20000000>; required-opps = <&rpmpd_opp_svs>; }; opp4 { opp-hz = /bits/ 64 <25000000>; required-opps = <&rpmpd_opp_normal>; }; };