1# SPDX-License-Identifier: GPL-2.0-only
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/mfd/samsung,s2mps11.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Samsung S2MPS11/13/14/15 and S2MPU02 Power Management IC
8
9maintainers:
10  - Krzysztof Kozlowski <krzk@kernel.org>
11
12description: |
13  This is a part of device tree bindings for S2M and S5M family of Power
14  Management IC (PMIC).
15
16  The Samsung S2MPS11/13/14/15 and S2MPU02 is a family of Power Management IC
17  which include voltage and current regulators, RTC, clock outputs and other
18  sub-blocks.
19
20properties:
21  compatible:
22    enum:
23      - samsung,s2mps11-pmic
24      - samsung,s2mps13-pmic
25      - samsung,s2mps14-pmic
26      - samsung,s2mps15-pmic
27      - samsung,s2mpu02-pmic
28
29  clocks:
30    $ref: ../clock/samsung,s2mps11.yaml
31    description:
32      Child node describing clock provider.
33
34  interrupts:
35    maxItems: 1
36
37  reg:
38    maxItems: 1
39
40  regulators:
41    type: object
42    description:
43      List of child nodes that specify the regulators.
44
45  samsung,s2mps11-acokb-ground:
46    description: |
47      Indicates that ACOKB pin of S2MPS11 PMIC is connected to the ground so
48      the PMIC must manually set PWRHOLD bit in CTRL1 register to turn off the
49      power. Usually the ACOKB is pulled up to VBATT so when PWRHOLD pin goes
50      low, the rising ACOKB will trigger power off.
51    type: boolean
52
53  samsung,s2mps11-wrstbi-ground:
54    description: |
55      Indicates that WRSTBI pin of PMIC is pulled down. When the system is
56      suspended it will always go down thus triggerring unwanted buck warm
57      reset (setting buck voltages to default values).
58    type: boolean
59
60  wakeup-source: true
61
62required:
63  - compatible
64  - reg
65  - regulators
66
67additionalProperties: false
68
69allOf:
70  - if:
71      properties:
72        compatible:
73          contains:
74            const: samsung,s2mps11-pmic
75    then:
76      properties:
77        regulators:
78          $ref: ../regulator/samsung,s2mps11.yaml
79        samsung,s2mps11-wrstbi-ground: false
80
81  - if:
82      properties:
83        compatible:
84          contains:
85            const: samsung,s2mps13-pmic
86    then:
87      properties:
88        regulators:
89          $ref: ../regulator/samsung,s2mps13.yaml
90        samsung,s2mps11-acokb-ground: false
91
92  - if:
93      properties:
94        compatible:
95          contains:
96            const: samsung,s2mps14-pmic
97    then:
98      properties:
99        regulators:
100          $ref: ../regulator/samsung,s2mps14.yaml
101        samsung,s2mps11-acokb-ground: false
102        samsung,s2mps11-wrstbi-ground: false
103
104  - if:
105      properties:
106        compatible:
107          contains:
108            const: samsung,s2mps15-pmic
109    then:
110      properties:
111        regulators:
112          $ref: ../regulator/samsung,s2mps15.yaml
113        samsung,s2mps11-acokb-ground: false
114        samsung,s2mps11-wrstbi-ground: false
115
116  - if:
117      properties:
118        compatible:
119          contains:
120            const: samsung,s2mpu02-pmic
121    then:
122      properties:
123        regulators:
124          $ref: ../regulator/samsung,s2mpu02.yaml
125        samsung,s2mps11-acokb-ground: false
126        samsung,s2mps11-wrstbi-ground: false
127
128examples:
129  - |
130    #include <dt-bindings/interrupt-controller/irq.h>
131
132    i2c {
133        #address-cells = <1>;
134        #size-cells = <0>;
135
136        pmic@66 {
137            compatible = "samsung,s2mps11-pmic";
138            reg = <0x66>;
139
140            interrupt-parent = <&gpx0>;
141            interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
142            pinctrl-names = "default";
143            pinctrl-0 = <&s2mps11_irq>;
144            samsung,s2mps11-acokb-ground;
145            wakeup-source;
146
147            clocks {
148                compatible = "samsung,s2mps11-clk";
149                #clock-cells = <1>;
150                clock-output-names = "s2mps11_ap", "s2mps11_cp", "s2mps11_bt";
151            };
152
153            regulators {
154                LDO1 {
155                    regulator-name = "vdd_ldo1";
156                    regulator-min-microvolt = <1000000>;
157                    regulator-max-microvolt = <1000000>;
158                    regulator-always-on;
159                };
160
161                LDO4 {
162                    regulator-name = "vdd_adc";
163                    regulator-min-microvolt = <1800000>;
164                    regulator-max-microvolt = <1800000>;
165
166                    regulator-state-mem {
167                        regulator-off-in-suspend;
168                    };
169                };
170
171                // ....
172
173                BUCK1 {
174                    regulator-name = "vdd_mif";
175                    regulator-min-microvolt = <800000>;
176                    regulator-max-microvolt = <1300000>;
177                    regulator-always-on;
178                    regulator-boot-on;
179
180                    regulator-state-mem {
181                        regulator-off-in-suspend;
182                    };
183                };
184
185                BUCK2 {
186                    regulator-name = "vdd_arm";
187                    regulator-min-microvolt = <800000>;
188                    regulator-max-microvolt = <1500000>;
189                    regulator-always-on;
190                    regulator-boot-on;
191                    regulator-coupled-with = <&buck3_reg>;
192                    regulator-coupled-max-spread = <300000>;
193
194                    regulator-state-mem {
195                        regulator-off-in-suspend;
196                    };
197                };
198
199                BUCK3 {
200                    regulator-name = "vdd_int";
201                    regulator-min-microvolt = <800000>;
202                    regulator-max-microvolt = <1400000>;
203                    regulator-always-on;
204                    regulator-boot-on;
205                    regulator-coupled-with = <&buck2_reg>;
206                    regulator-coupled-max-spread = <300000>;
207
208                    regulator-state-mem {
209                        regulator-off-in-suspend;
210                    };
211                };
212
213                // ...
214            };
215        };
216    };
217
218  - |
219    #include <dt-bindings/interrupt-controller/irq.h>
220
221    i2c {
222        #address-cells = <1>;
223        #size-cells = <0>;
224
225        pmic@66 {
226            compatible = "samsung,s2mps14-pmic";
227            reg = <0x66>;
228
229            interrupt-parent = <&gpx0>;
230            interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
231            wakeup-source;
232
233            clocks {
234                compatible = "samsung,s2mps14-clk";
235                #clock-cells = <1>;
236                clock-output-names = "s2mps14_ap", "unused", "s2mps14_bt";
237            };
238
239            regulators {
240                LDO1 {
241                    regulator-name = "VLDO1_1.0V";
242                    regulator-min-microvolt = <1000000>;
243                    regulator-max-microvolt = <1000000>;
244                    regulator-always-on;
245
246                    regulator-state-mem {
247                        regulator-on-in-suspend;
248                    };
249                };
250
251                // ...
252
253                BUCK1 {
254                    regulator-name = "VBUCK1_1.0V";
255                    regulator-min-microvolt = <800000>;
256                    regulator-max-microvolt = <1000000>;
257                    regulator-always-on;
258
259                    regulator-state-mem {
260                        regulator-off-in-suspend;
261                    };
262                };
263
264                // ...
265            };
266        };
267    };
268