Merge tag 'soc-5.15' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc
[linux-2.6-microblaze.git] / Documentation / devicetree / bindings / power / qcom,rpmpd.yaml
1 # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2 %YAML 1.2
3 ---
4 $id: http://devicetree.org/schemas/power/qcom,rpmpd.yaml#
5 $schema: http://devicetree.org/meta-schemas/core.yaml#
6
7 title: Qualcomm RPM/RPMh Power domains
8
9 maintainers:
10   - Rajendra Nayak <rnayak@codeaurora.org>
11
12 description:
13   For RPM/RPMh Power domains, we communicate a performance state to RPM/RPMh
14   which then translates it into a corresponding voltage on a rail.
15
16 properties:
17   compatible:
18     enum:
19       - qcom,mdm9607-rpmpd
20       - qcom,msm8916-rpmpd
21       - qcom,msm8939-rpmpd
22       - qcom,msm8976-rpmpd
23       - qcom,msm8994-rpmpd
24       - qcom,msm8996-rpmpd
25       - qcom,msm8998-rpmpd
26       - qcom,qcs404-rpmpd
27       - qcom,sdm660-rpmpd
28       - qcom,sc7180-rpmhpd
29       - qcom,sc7280-rpmhpd
30       - qcom,sc8180x-rpmhpd
31       - qcom,sdm845-rpmhpd
32       - qcom,sdx55-rpmhpd
33       - qcom,sm8150-rpmhpd
34       - qcom,sm8250-rpmhpd
35       - qcom,sm8350-rpmhpd
36
37   '#power-domain-cells':
38     const: 1
39
40   operating-points-v2: true
41
42   opp-table:
43     type: object
44
45 required:
46   - compatible
47   - '#power-domain-cells'
48   - operating-points-v2
49
50 additionalProperties: false
51
52 examples:
53   - |
54
55     // Example 1 (rpmh power domain controller and OPP table):
56
57     #include <dt-bindings/power/qcom-rpmpd.h>
58
59     rpmhpd: power-controller {
60       compatible = "qcom,sdm845-rpmhpd";
61       #power-domain-cells = <1>;
62       operating-points-v2 = <&rpmhpd_opp_table>;
63
64       rpmhpd_opp_table: opp-table {
65         compatible = "operating-points-v2";
66
67         rpmhpd_opp_ret: opp1 {
68           opp-level = <RPMH_REGULATOR_LEVEL_RETENTION>;
69         };
70
71         rpmhpd_opp_min_svs: opp2 {
72           opp-level = <RPMH_REGULATOR_LEVEL_MIN_SVS>;
73         };
74
75         rpmhpd_opp_low_svs: opp3 {
76           opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS>;
77         };
78
79         rpmhpd_opp_svs: opp4 {
80           opp-level = <RPMH_REGULATOR_LEVEL_SVS>;
81         };
82
83         rpmhpd_opp_svs_l1: opp5 {
84           opp-level = <RPMH_REGULATOR_LEVEL_SVS_L1>;
85         };
86
87         rpmhpd_opp_nom: opp6 {
88           opp-level = <RPMH_REGULATOR_LEVEL_NOM>;
89         };
90
91         rpmhpd_opp_nom_l1: opp7 {
92           opp-level = <RPMH_REGULATOR_LEVEL_NOM_L1>;
93         };
94
95         rpmhpd_opp_nom_l2: opp8 {
96           opp-level = <RPMH_REGULATOR_LEVEL_NOM_L2>;
97         };
98
99         rpmhpd_opp_turbo: opp9 {
100           opp-level = <RPMH_REGULATOR_LEVEL_TURBO>;
101         };
102
103         rpmhpd_opp_turbo_l1: opp10 {
104           opp-level = <RPMH_REGULATOR_LEVEL_TURBO_L1>;
105         };
106       };
107     };
108
109   - |
110
111     // Example 2 (rpm power domain controller and OPP table):
112
113     rpmpd: power-controller {
114       compatible = "qcom,msm8996-rpmpd";
115       #power-domain-cells = <1>;
116       operating-points-v2 = <&rpmpd_opp_table>;
117
118       rpmpd_opp_table: opp-table {
119         compatible = "operating-points-v2";
120
121         rpmpd_opp_low: opp1 {
122           opp-level = <1>;
123         };
124
125         rpmpd_opp_ret: opp2 {
126           opp-level = <2>;
127         };
128
129         rpmpd_opp_svs: opp3 {
130           opp-level = <3>;
131         };
132
133         rpmpd_opp_normal: opp4 {
134           opp-level = <4>;
135         };
136
137         rpmpd_opp_high: opp5 {
138           opp-level = <5>;
139         };
140
141         rpmpd_opp_turbo: opp6 {
142           opp-level = <6>;
143         };
144       };
145     };
146
147   - |
148
149     // Example 3 (Client/Consumer device using OPP table):
150
151     leaky-device0@12350000 {
152       compatible = "foo,i-leak-current";
153       reg = <0x12350000 0x1000>;
154       power-domains = <&rpmhpd 0>;
155       operating-points-v2 = <&leaky_opp_table>;
156     };
157
158     leaky_opp_table: opp-table {
159       compatible = "operating-points-v2";
160       opp1 {
161         opp-hz = /bits/ 64 <144000>;
162         required-opps = <&rpmhpd_opp_low>;
163       };
164
165       opp2 {
166         opp-hz = /bits/ 64 <400000>;
167         required-opps = <&rpmhpd_opp_ret>;
168       };
169
170       opp3 {
171         opp-hz = /bits/ 64 <20000000>;
172         required-opps = <&rpmpd_opp_svs>;
173       };
174
175       opp4 {
176         opp-hz = /bits/ 64 <25000000>;
177         required-opps = <&rpmpd_opp_normal>;
178       };
179     };
180 ...