1# SPDX-License-Identifier: GPL-2.0-only
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/regulator/maxim,max8997.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Maxim MAX8997 Power Management IC
8
9maintainers:
10  - Krzysztof Kozlowski <krzk@kernel.org>
11
12description: |
13  The Maxim MAX8997 is a Power Management IC which includes voltage and current
14  regulators, charger controller with fuel gauge, RTC, clock outputs, haptic
15  motor driver, flash LED driver and Micro-USB Interface Controller.
16
17  The binding here is not complete and describes only regulator and charger
18  controller parts.
19
20properties:
21  compatible:
22    const: maxim,max8997-pmic
23
24  charger-supply:
25    description: |
26      Regulator node for charging current.
27
28  interrupts:
29    items:
30      - description: irq1 interrupt
31      - description: alert interrupt
32
33  max8997,pmic-buck1-dvs-voltage:
34    $ref: /schemas/types.yaml#/definitions/uint32-array
35    minItems: 1
36    maxItems: 8
37    description: |
38      A set of 8 voltage values in micro-volt (uV) units for buck1 when
39      changing voltage using GPIO DVS.
40      If none of max8997,pmic-buck[1/2/5]-uses-gpio-dvs optional property is
41      specified, the max8997,pmic-buck[1/2/5]-dvs-voltage property should
42      specify at least one voltage level (which would be a safe operating
43      voltage).
44
45  max8997,pmic-buck2-dvs-voltage:
46    $ref: /schemas/types.yaml#/definitions/uint32-array
47    minItems: 1
48    maxItems: 8
49    description: |
50      A set of 8 voltage values in micro-volt (uV) units for buck2 when
51      changing voltage using GPIO DVS.
52      If none of max8997,pmic-buck[1/2/5]-uses-gpio-dvs optional property is
53      specified, the max8997,pmic-buck[1/2/5]-dvs-voltage property should
54      specify at least one voltage level (which would be a safe operating
55      voltage).
56
57  max8997,pmic-buck5-dvs-voltage:
58    $ref: /schemas/types.yaml#/definitions/uint32-array
59    minItems: 1
60    maxItems: 8
61    description: |
62      A set of 8 voltage values in micro-volt (uV) units for buck5 when
63      changing voltage using GPIO DVS.
64      If none of max8997,pmic-buck[1/2/5]-uses-gpio-dvs optional property is
65      specified, the max8997,pmic-buck[1/2/5]-dvs-voltage property should
66      specify at least one voltage level (which would be a safe operating
67      voltage).
68
69  max8997,pmic-buck1-uses-gpio-dvs:
70    type: boolean
71    description: |
72      buck1 can be controlled by GPIO DVS.
73
74  max8997,pmic-buck2-uses-gpio-dvs:
75    type: boolean
76    description: |
77      buck2 can be controlled by GPIO DVS.
78
79  max8997,pmic-buck5-uses-gpio-dvs:
80    type: boolean
81    description: |
82      buck5 can be controlled by GPIO DVS.
83
84  max8997,pmic-buck125-default-dvs-idx:
85    $ref: /schemas/types.yaml#/definitions/uint32
86    minimum: 0
87    maximum: 7
88    default: 0
89    description: |
90      Default voltage setting selected from the possible 8 options selectable
91      by the dvs gpios. The value of this property should be between 0 and 7.
92      If not specified or if out of range, the default value of this property
93      is set to 0.
94
95  max8997,pmic-buck125-dvs-gpios:
96    minItems: 3
97    maxItems: 3
98    description: |
99      GPIO specifiers for three host gpio's used for DVS.
100
101  max8997,pmic-ignore-gpiodvs-side-effect:
102    type: boolean
103    description: |
104      When GPIO-DVS mode is used for multiple bucks, changing the voltage value
105      of one of the bucks may affect that of another buck, which is the side
106      effect of the change (set_voltage).  Use this property to ignore such
107      side effects and change the voltage.
108
109  reg:
110    maxItems: 1
111
112  regulators:
113    type: object
114    additionalProperties: false
115    description:
116      List of child nodes that specify the regulators.
117
118    patternProperties:
119      # 1-18 and 21 LDOs
120      "^LDO([1-9]|1[0-8]|21)$":
121        type: object
122        $ref: regulator.yaml#
123        description:
124          Properties for single LDO regulator.
125
126        properties:
127          regulator-name: true
128
129        required:
130          - regulator-name
131
132        unevaluatedProperties: false
133
134      # 7 bucks
135      "^BUCK[1-7]$":
136        type: object
137        $ref: regulator.yaml#
138        description:
139          Properties for single BUCK regulator.
140
141        properties:
142          regulator-name: true
143
144        required:
145          - regulator-name
146
147        unevaluatedProperties: false
148
149      "^EN32KHZ_[AC]P$":
150        type: object
151        $ref: regulator.yaml#
152        description:
153          32768 Hz clock output (modelled as regulator)
154
155        properties:
156          regulator-name: true
157          regulator-always-on: true
158          regulator-boot-on: true
159
160        required:
161          - regulator-name
162
163        additionalProperties: false
164
165    properties:
166      CHARGER:
167        type: object
168        $ref: regulator.yaml#
169        description: main battery charger current control
170
171        properties:
172          regulator-name: true
173
174        required:
175          - regulator-name
176
177        unevaluatedProperties: false
178
179      CHARGER_CV:
180        type: object
181        $ref: regulator.yaml#
182        description: main battery charger voltage control
183
184        properties:
185          regulator-name: true
186
187        required:
188          - regulator-name
189
190        unevaluatedProperties: false
191
192      CHARGER_TOPOFF:
193        type: object
194        $ref: regulator.yaml#
195        description: end of charge current threshold level
196
197        properties:
198          regulator-name: true
199
200        required:
201          - regulator-name
202
203        unevaluatedProperties: false
204
205      ENVICHG:
206        type: object
207        $ref: regulator.yaml#
208        description: |
209          Battery Charging Current Monitor Output. This is a fixed voltage type
210          regulator
211        properties:
212          regulator-name: true
213
214        required:
215          - regulator-name
216
217        unevaluatedProperties: false
218
219      ESAFEOUT1:
220        type: object
221        $ref: regulator.yaml#
222        description: LDO19
223
224        properties:
225          regulator-name: true
226
227        required:
228          - regulator-name
229
230        unevaluatedProperties: false
231
232      ESAFEOUT2:
233        type: object
234        $ref: regulator.yaml#
235        description: LDO20
236
237        properties:
238          regulator-name: true
239
240        required:
241          - regulator-name
242
243        unevaluatedProperties: false
244
245required:
246  - compatible
247  - max8997,pmic-buck1-dvs-voltage
248  - max8997,pmic-buck2-dvs-voltage
249  - max8997,pmic-buck5-dvs-voltage
250  - reg
251  - regulators
252
253dependencies:
254  max8997,pmic-buck1-uses-gpio-dvs: [ 'max8997,pmic-buck125-dvs-gpios' ]
255  max8997,pmic-buck2-uses-gpio-dvs: [ 'max8997,pmic-buck125-dvs-gpios' ]
256  max8997,pmic-buck5-uses-gpio-dvs: [ 'max8997,pmic-buck125-dvs-gpios' ]
257
258additionalProperties: false
259
260if:
261  anyOf:
262    - required:
263        - max8997,pmic-buck1-uses-gpio-dvs
264    - required:
265        - max8997,pmic-buck2-uses-gpio-dvs
266    - required:
267        - max8997,pmic-buck5-uses-gpio-dvs
268then:
269  properties:
270    max8997,pmic-buck1-dvs-voltage:
271      minItems: 8
272      maxItems: 8
273    max8997,pmic-buck2-dvs-voltage:
274      minItems: 8
275      maxItems: 8
276    max8997,pmic-buck5-dvs-voltage:
277      minItems: 8
278      maxItems: 8
279
280examples:
281  - |
282    #include <dt-bindings/gpio/gpio.h>
283    #include <dt-bindings/interrupt-controller/irq.h>
284
285    i2c {
286        #address-cells = <1>;
287        #size-cells = <0>;
288
289        pmic@66 {
290            compatible = "maxim,max8997-pmic";
291            reg = <0x66>;
292
293            interrupts-extended = <&gpx0 7 IRQ_TYPE_LEVEL_LOW>,
294                                  <&gpx2 3 IRQ_TYPE_EDGE_FALLING>;
295
296            max8997,pmic-buck1-uses-gpio-dvs;
297            max8997,pmic-buck2-uses-gpio-dvs;
298            max8997,pmic-buck5-uses-gpio-dvs;
299
300            max8997,pmic-ignore-gpiodvs-side-effect;
301            max8997,pmic-buck125-default-dvs-idx = <0>;
302
303            max8997,pmic-buck125-dvs-gpios = <&gpx0 5 GPIO_ACTIVE_HIGH>,
304                                             <&gpx0 6 GPIO_ACTIVE_HIGH>,
305                                             <&gpl0 0 GPIO_ACTIVE_HIGH>;
306
307            max8997,pmic-buck1-dvs-voltage = <1350000>, <1300000>,
308                                             <1250000>, <1200000>,
309                                             <1150000>, <1100000>,
310                                             <1000000>, <950000>;
311
312            max8997,pmic-buck2-dvs-voltage = <1100000>, <1000000>,
313                                             <950000>,  <900000>,
314                                             <1100000>, <1000000>,
315                                             <950000>,  <900000>;
316
317            max8997,pmic-buck5-dvs-voltage = <1200000>, <1200000>,
318                                             <1200000>, <1200000>,
319                                             <1200000>, <1200000>,
320                                             <1200000>, <1200000>;
321
322            pinctrl-0 = <&max8997_irq>, <&otg_gp>, <&usb_sel>;
323            pinctrl-names = "default";
324
325            charger-supply = <&charger_reg>;
326
327            regulators {
328                LDO1 {
329                    regulator-name = "VADC_3.3V_C210";
330                    regulator-min-microvolt = <3300000>;
331                    regulator-max-microvolt = <3300000>;
332                    regulator-always-on;
333                };
334
335                LDO2 {
336                    regulator-name = "VALIVE_1.1V_C210";
337                    regulator-min-microvolt = <1100000>;
338                    regulator-max-microvolt = <1100000>;
339                    regulator-always-on;
340                };
341
342                BUCK1 {
343                    regulator-name = "VARM_1.2V_C210";
344                    regulator-min-microvolt = <65000>;
345                    regulator-max-microvolt = <2225000>;
346                    regulator-always-on;
347                };
348
349                // ...
350
351                BUCK7 {
352                    regulator-name = "VCC_SUB_2.0V";
353                    regulator-min-microvolt = <2000000>;
354                    regulator-max-microvolt = <2000000>;
355                    regulator-always-on;
356                };
357
358                ESAFEOUT1 {
359                    regulator-name = "SAFEOUT1";
360                };
361
362                ESAFEOUT2 {
363                    regulator-name = "SAFEOUT2";
364                    regulator-boot-on;
365                };
366
367                EN32KHZ_AP {
368                    regulator-name = "EN32KHZ_AP";
369                    regulator-always-on;
370                };
371
372                EN32KHZ_CP {
373                    regulator-name = "EN32KHZ_CP";
374                    regulator-always-on;
375                };
376
377                CHARGER {
378                    regulator-name = "CHARGER";
379                    regulator-min-microamp = <200000>;
380                    regulator-max-microamp = <950000>;
381                };
382
383                CHARGER_CV {
384                    regulator-name = "CHARGER_CV";
385                    regulator-min-microvolt = <4200000>;
386                    regulator-max-microvolt = <4200000>;
387                    regulator-always-on;
388                };
389
390                CHARGER_TOPOFF {
391                    regulator-name = "CHARGER_TOPOFF";
392                    regulator-min-microamp = <200000>;
393                    regulator-max-microamp = <200000>;
394                    regulator-always-on;
395                };
396            };
397        };
398    };
399
400  - |
401    #include <dt-bindings/interrupt-controller/irq.h>
402
403    i2c {
404        #address-cells = <1>;
405        #size-cells = <0>;
406
407        pmic@66 {
408            compatible = "maxim,max8997-pmic";
409            reg = <0x66>;
410
411            interrupt-parent = <&gpx0>;
412            interrupts = <4 IRQ_TYPE_LEVEL_LOW>,
413                         <3 IRQ_TYPE_EDGE_FALLING>;
414            pinctrl-names = "default";
415            pinctrl-0 = <&max8997_irq>;
416
417            max8997,pmic-buck1-dvs-voltage = <1350000>;
418            max8997,pmic-buck2-dvs-voltage = <1100000>;
419            max8997,pmic-buck5-dvs-voltage = <1200000>;
420
421            regulators {
422                LDO1 {
423                    regulator-name = "VDD_ABB_3.3V";
424                    regulator-min-microvolt = <3300000>;
425                    regulator-max-microvolt = <3300000>;
426                };
427
428                // ...
429
430                BUCK1 {
431                    regulator-name = "VDD_ARM_1.2V";
432                    regulator-min-microvolt = <950000>;
433                    regulator-max-microvolt = <1350000>;
434                    regulator-always-on;
435                    regulator-boot-on;
436                };
437
438                // ...
439
440                EN32KHZ_AP {
441                    regulator-name = "EN32KHZ_AP";
442                    regulator-always-on;
443                };
444            };
445        };
446    };
447