1# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/mfd/samsung,s5m8767.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Samsung S5M8767 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 S5M8767 is a Power Management IC which includes voltage
17  and current regulators, RTC, clock outputs and other sub-blocks.
18
19properties:
20  compatible:
21    const: samsung,s5m8767-pmic
22
23  clocks:
24    $ref: ../clock/samsung,s2mps11.yaml
25    description:
26      Child node describing clock provider.
27
28  interrupts:
29    maxItems: 1
30
31  reg:
32    maxItems: 1
33
34  regulators:
35    $ref: ../regulator/samsung,s5m8767.yaml
36    description:
37      List of child nodes that specify the regulators.
38
39  s5m8767,pmic-buck2-dvs-voltage:
40    $ref: /schemas/types.yaml#/definitions/uint32-array
41    minItems: 8
42    maxItems: 8
43    description: |
44      A set of 8 voltage values in micro-volt (uV) units for buck2 when
45      changing voltage using gpio dvs.
46
47  s5m8767,pmic-buck3-dvs-voltage:
48    $ref: /schemas/types.yaml#/definitions/uint32-array
49    minItems: 8
50    maxItems: 8
51    description: |
52      A set of 8 voltage values in micro-volt (uV) units for buck3 when
53      changing voltage using gpio dvs.
54
55  s5m8767,pmic-buck4-dvs-voltage:
56    $ref: /schemas/types.yaml#/definitions/uint32-array
57    minItems: 8
58    maxItems: 8
59    description: |
60      A set of 8 voltage values in micro-volt (uV) units for buck4 when
61      changing voltage using gpio dvs.
62
63  s5m8767,pmic-buck-ds-gpios:
64    minItems: 3
65    maxItems: 3
66    description: |
67      GPIO specifiers for three host gpio's used for selecting GPIO DVS lines.
68      It is one-to-one mapped to dvs gpio lines.
69
70  s5m8767,pmic-buck2-uses-gpio-dvs:
71    type: boolean
72    description: buck2 can be controlled by gpio dvs.
73
74  s5m8767,pmic-buck3-uses-gpio-dvs:
75    type: boolean
76    description: buck3 can be controlled by gpio dvs.
77
78  s5m8767,pmic-buck4-uses-gpio-dvs:
79    type: boolean
80    description: buck4 can be controlled by gpio dvs.
81
82  s5m8767,pmic-buck-default-dvs-idx:
83    $ref: /schemas/types.yaml#/definitions/uint32-array
84    minimum: 0
85    maximum: 7
86    default: 0
87    description: |
88      Default voltage setting selected from the possible 8 options selectable
89      by the dvs gpios. The value of this property should be between 0 and 7.
90      If not specified or if out of range, the default value of this property
91      is set to 0.
92
93  s5m8767,pmic-buck-dvs-gpios:
94    minItems: 3
95    maxItems: 3
96    description: |
97      GPIO specifiers for three host gpio's used for dvs.
98
99  vinb1-supply:
100    description: Power supply for buck1
101  vinb2-supply:
102    description: Power supply for buck2
103  vinb3-supply:
104    description: Power supply for buck3
105  vinb4-supply:
106    description: Power supply for buck4
107  vinb5-supply:
108    description: Power supply for buck5
109  vinb6-supply:
110    description: Power supply for buck6
111  vinb7-supply:
112    description: Power supply for buck7
113  vinb8-supply:
114    description: Power supply for buck8
115  vinb9-supply:
116    description: Power supply for buck9
117
118  vinl1-supply:
119    description: Power supply for LDO3, LDO10, LDO26, LDO27
120  vinl2-supply:
121    description: Power supply for LDO13, LDO16, LDO25, LDO28
122  vinl3-supply:
123    description: Power supply for LDO11, LDO14
124  vinl4-supply:
125    description: Power supply for LDO4, LDO9
126  vinl5-supply:
127    description: Power supply for LDO12, LDO17, LDO19, LDO23
128  vinl6-supply:
129    description: Power supply for LDO18, LDO20, LDO21, LDO24
130  vinl7-supply:
131    description: Power supply for LDO5, LDO22
132  vinl8-supply:
133    description: Power supply for LDO1, LDO6, LDO7, LDO8, LDO15
134  vinl9-supply:
135    description: Power supply for LDO2
136
137  wakeup-source: true
138
139required:
140  - compatible
141  - reg
142  - regulators
143  - s5m8767,pmic-buck-ds-gpios
144
145dependencies:
146  s5m8767,pmic-buck2-dvs-voltage: [ 's5m8767,pmic-buck-dvs-gpios' ]
147  s5m8767,pmic-buck3-dvs-voltage: [ 's5m8767,pmic-buck-dvs-gpios' ]
148  s5m8767,pmic-buck4-dvs-voltage: [ 's5m8767,pmic-buck-dvs-gpios' ]
149  s5m8767,pmic-buck2-uses-gpio-dvs: [ 's5m8767,pmic-buck-dvs-gpios', 's5m8767,pmic-buck2-dvs-voltage' ]
150  s5m8767,pmic-buck3-uses-gpio-dvs: [ 's5m8767,pmic-buck-dvs-gpios', 's5m8767,pmic-buck3-dvs-voltage' ]
151  s5m8767,pmic-buck4-uses-gpio-dvs: [ 's5m8767,pmic-buck-dvs-gpios', 's5m8767,pmic-buck4-dvs-voltage' ]
152
153additionalProperties: false
154
155allOf:
156  - if:
157      required:
158        - s5m8767,pmic-buck2-uses-gpio-dvs
159    then:
160      properties:
161        s5m8767,pmic-buck3-uses-gpio-dvs: false
162        s5m8767,pmic-buck4-uses-gpio-dvs: false
163
164  - if:
165      required:
166        - s5m8767,pmic-buck3-uses-gpio-dvs
167    then:
168      properties:
169        s5m8767,pmic-buck2-uses-gpio-dvs: false
170        s5m8767,pmic-buck4-uses-gpio-dvs: false
171
172  - if:
173      required:
174        - s5m8767,pmic-buck4-uses-gpio-dvs
175    then:
176      properties:
177        s5m8767,pmic-buck2-uses-gpio-dvs: false
178        s5m8767,pmic-buck3-uses-gpio-dvs: false
179
180examples:
181  - |
182    #include <dt-bindings/gpio/gpio.h>
183    #include <dt-bindings/interrupt-controller/irq.h>
184
185    i2c {
186        #address-cells = <1>;
187        #size-cells = <0>;
188
189        pmic@66 {
190            compatible = "samsung,s5m8767-pmic";
191            reg = <0x66>;
192
193            interrupt-parent = <&gpx3>;
194            interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
195            pinctrl-names = "default";
196            pinctrl-0 = <&s5m8767_irq &s5m8767_dvs &s5m8767_ds>;
197            wakeup-source;
198
199            s5m8767,pmic-buck-default-dvs-idx = <3>;
200            s5m8767,pmic-buck2-uses-gpio-dvs;
201
202            s5m8767,pmic-buck-dvs-gpios = <&gpd1 0 GPIO_ACTIVE_LOW>,
203                                          <&gpd1 1 GPIO_ACTIVE_LOW>,
204                                          <&gpd1 2 GPIO_ACTIVE_LOW>;
205
206            s5m8767,pmic-buck-ds-gpios = <&gpx2 3 GPIO_ACTIVE_LOW>,
207                                         <&gpx2 4 GPIO_ACTIVE_LOW>,
208                                         <&gpx2 5 GPIO_ACTIVE_LOW>;
209
210            s5m8767,pmic-buck2-dvs-voltage = <1350000>, <1300000>,
211                                             <1250000>, <1200000>,
212                                             <1150000>, <1100000>,
213                                             <1000000>, <950000>;
214
215            s5m8767,pmic-buck3-dvs-voltage = <1100000>, <1100000>,
216                                             <1100000>, <1100000>,
217                                             <1000000>, <1000000>,
218                                             <1000000>, <1000000>;
219
220            s5m8767,pmic-buck4-dvs-voltage = <1200000>, <1200000>,
221                                             <1200000>, <1200000>,
222                                             <1200000>, <1200000>,
223                                             <1200000>, <1200000>;
224
225            clocks {
226                compatible = "samsung,s5m8767-clk";
227                #clock-cells = <1>;
228                clock-output-names = "en32khz_ap", "en32khz_cp", "en32khz_bt";
229            };
230
231            regulators {
232                LDO1 {
233                    regulator-name = "VDD_ALIVE";
234                    regulator-min-microvolt = <1100000>;
235                    regulator-max-microvolt = <1100000>;
236                    regulator-always-on;
237                    regulator-boot-on;
238                    op_mode = <1>; /* Normal Mode */
239                };
240
241                // ...
242
243                BUCK1 {
244                    regulator-name = "VDD_MIF";
245                    regulator-min-microvolt = <950000>;
246                    regulator-max-microvolt = <1100000>;
247                    regulator-always-on;
248                    regulator-boot-on;
249                    op_mode = <1>; /* Normal Mode */
250                };
251
252                BUCK2 {
253                    regulator-name = "VDD_ARM";
254                    regulator-min-microvolt = <900000>;
255                    regulator-max-microvolt = <1350000>;
256                    regulator-always-on;
257                    regulator-boot-on;
258                    op_mode = <1>; /* Normal Mode */
259                };
260
261                // ...
262            };
263        };
264    };
265
266  - |
267    #include <dt-bindings/gpio/gpio.h>
268    #include <dt-bindings/interrupt-controller/irq.h>
269
270    i2c {
271        #address-cells = <1>;
272        #size-cells = <0>;
273
274        pmic@66 {
275            compatible = "samsung,s5m8767-pmic";
276            reg = <0x66>;
277
278            interrupt-parent = <&gpx3>;
279            interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
280            pinctrl-names = "default";
281            pinctrl-0 = <&s5m8767_irq &s5m8767_dvs &s5m8767_ds>;
282            wakeup-source;
283
284            s5m8767,pmic-buck-ds-gpios = <&gpx2 3 GPIO_ACTIVE_LOW>,
285                                         <&gpx2 4 GPIO_ACTIVE_LOW>,
286                                         <&gpx2 5 GPIO_ACTIVE_LOW>;
287
288            clocks {
289                compatible = "samsung,s5m8767-clk";
290                #clock-cells = <1>;
291                clock-output-names = "en32khz_ap", "en32khz_cp", "en32khz_bt";
292            };
293
294            regulators {
295                LDO1 {
296                    regulator-name = "VDD_ALIVE";
297                    regulator-min-microvolt = <1100000>;
298                    regulator-max-microvolt = <1100000>;
299                    regulator-always-on;
300                    regulator-boot-on;
301                    op_mode = <1>; /* Normal Mode */
302                };
303
304                // ...
305            };
306        };
307    };
308