Merge tag 'armsoc-defconfig' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc
[sfrench/cifs-2.6.git] / Documentation / devicetree / bindings / power / qcom,rpmpd.txt
1 Qualcomm RPM/RPMh Power domains
2
3 For RPM/RPMh Power domains, we communicate a performance state to RPM/RPMh
4 which then translates it into a corresponding voltage on a rail
5
6 Required Properties:
7  - compatible: Should be one of the following
8         * qcom,msm8996-rpmpd: RPM Power domain for the msm8996 family of SoC
9         * qcom,msm8998-rpmpd: RPM Power domain for the msm8998 family of SoC
10         * qcom,qcs404-rpmpd: RPM Power domain for the qcs404 family of SoC
11         * qcom,sdm845-rpmhpd: RPMh Power domain for the sdm845 family of SoC
12  - #power-domain-cells: number of cells in Power domain specifier
13         must be 1.
14  - operating-points-v2: Phandle to the OPP table for the Power domain.
15         Refer to Documentation/devicetree/bindings/power/power_domain.txt
16         and Documentation/devicetree/bindings/opp/opp.txt for more details
17
18 Refer to <dt-bindings/power/qcom-rpmpd.h> for the level values for
19 various OPPs for different platforms as well as Power domain indexes
20
21 Example: rpmh power domain controller and OPP table
22
23 #include <dt-bindings/power/qcom-rpmhpd.h>
24
25 opp-level values specified in the OPP tables for RPMh power domains
26 should use the RPMH_REGULATOR_LEVEL_* constants from
27 <dt-bindings/power/qcom-rpmhpd.h>
28
29         rpmhpd: power-controller {
30                 compatible = "qcom,sdm845-rpmhpd";
31                 #power-domain-cells = <1>;
32                 operating-points-v2 = <&rpmhpd_opp_table>;
33
34                 rpmhpd_opp_table: opp-table {
35                         compatible = "operating-points-v2";
36
37                         rpmhpd_opp_ret: opp1 {
38                                 opp-level = <RPMH_REGULATOR_LEVEL_RETENTION>;
39                         };
40
41                         rpmhpd_opp_min_svs: opp2 {
42                                 opp-level = <RPMH_REGULATOR_LEVEL_MIN_SVS>;
43                         };
44
45                         rpmhpd_opp_low_svs: opp3 {
46                                 opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS>;
47                         };
48
49                         rpmhpd_opp_svs: opp4 {
50                                 opp-level = <RPMH_REGULATOR_LEVEL_SVS>;
51                         };
52
53                         rpmhpd_opp_svs_l1: opp5 {
54                                 opp-level = <RPMH_REGULATOR_LEVEL_SVS_L1>;
55                         };
56
57                         rpmhpd_opp_nom: opp6 {
58                                 opp-level = <RPMH_REGULATOR_LEVEL_NOM>;
59                         };
60
61                         rpmhpd_opp_nom_l1: opp7 {
62                                 opp-level = <RPMH_REGULATOR_LEVEL_NOM_L1>;
63                         };
64
65                         rpmhpd_opp_nom_l2: opp8 {
66                                 opp-level = <RPMH_REGULATOR_LEVEL_NOM_L2>;
67                         };
68
69                         rpmhpd_opp_turbo: opp9 {
70                                 opp-level = <RPMH_REGULATOR_LEVEL_TURBO>;
71                         };
72
73                         rpmhpd_opp_turbo_l1: opp10 {
74                                 opp-level = <RPMH_REGULATOR_LEVEL_TURBO_L1>;
75                         };
76                 };
77         };
78
79 Example: rpm power domain controller and OPP table
80
81         rpmpd: power-controller {
82                 compatible = "qcom,msm8996-rpmpd";
83                 #power-domain-cells = <1>;
84                 operating-points-v2 = <&rpmpd_opp_table>;
85
86                 rpmpd_opp_table: opp-table {
87                         compatible = "operating-points-v2";
88
89                         rpmpd_opp_low: opp1 {
90                                 opp-level = <1>;
91                         };
92
93                         rpmpd_opp_ret: opp2 {
94                                 opp-level = <2>;
95                         };
96
97                         rpmpd_opp_svs: opp3 {
98                                 opp-level = <3>;
99                         };
100
101                         rpmpd_opp_normal: opp4 {
102                                 opp-level = <4>;
103                         };
104
105                         rpmpd_opp_high: opp5 {
106                                 opp-level = <5>;
107                         };
108
109                         rpmpd_opp_turbo: opp6 {
110                                 opp-level = <6>;
111                         };
112                 };
113         };
114
115 Example: Client/Consumer device using OPP table
116
117         leaky-device0@12350000 {
118                 compatible = "foo,i-leak-current";
119                 reg = <0x12350000 0x1000>;
120                 power-domains = <&rpmhpd SDM845_MX>;
121                 operating-points-v2 = <&leaky_opp_table>;
122         };
123
124
125         leaky_opp_table: opp-table {
126                 compatible = "operating-points-v2";
127
128                 opp1 {
129                         opp-hz = /bits/ 64 <144000>;
130                         required-opps = <&rpmhpd_opp_low>;
131                 };
132
133                 opp2 {
134                         opp-hz = /bits/ 64 <400000>;
135                         required-opps = <&rpmhpd_opp_ret>;
136                 };
137
138                 opp3 {
139                         opp-hz = /bits/ 64 <20000000>;
140                         required-opps = <&rpmpd_opp_svs>;
141                 };
142
143                 opp4 {
144                         opp-hz = /bits/ 64 <25000000>;
145                         required-opps = <&rpmpd_opp_normal>;
146                 };
147         };