xref: /linux/Documentation/devicetree/bindings/mfd/qcom,spmi-pmic.yaml (revision bf36793fa260cb68cc817f311f1f683788261796)
1# SPDX-License-Identifier: GPL-2.0-only
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/mfd/qcom,spmi-pmic.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Qualcomm SPMI PMICs multi-function device
8
9description: |
10  Some Qualcomm PMICs used with the Snapdragon series SoCs are interfaced
11  to the chip via the SPMI (System Power Management Interface) bus.
12  Support for multiple independent functions are implemented by splitting the
13  16-bit SPMI peripheral address space into 256 smaller fixed-size regions, 256 bytes
14  each. A function can consume one or more of these fixed-size register regions.
15
16  The Qualcomm SPMI series includes the PM8941, PM8841, PMA8084, PM8998 and other
17  PMICs.  These PMICs use a "QPNP" scheme through SPMI interface.
18  QPNP is effectively a partitioning scheme for dividing the SPMI extended
19  register space up into logical pieces, and set of fixed register
20  locations/definitions within these regions, with some of these regions
21  specifically used for interrupt handling.
22
23maintainers:
24  - Stephen Boyd <sboyd@kernel.org>
25
26properties:
27  $nodename:
28    oneOf:
29      - pattern: '^pmic@.*$'
30      - pattern: '^pm(a|s)?[0-9]*@.*$'
31        deprecated: true
32
33  compatible:
34    items:
35      - enum:
36          - qcom,pm2250
37          - qcom,pm6125
38          - qcom,pm6150
39          - qcom,pm6150l
40          - qcom,pm6350
41          - qcom,pm660
42          - qcom,pm660l
43          - qcom,pm7250b
44          - qcom,pm7550ba
45          - qcom,pm7325
46          - qcom,pm8004
47          - qcom,pm8005
48          - qcom,pm8009
49          - qcom,pm8010
50          - qcom,pm8019
51          - qcom,pm8028
52          - qcom,pm8110
53          - qcom,pm8150
54          - qcom,pm8150b
55          - qcom,pm8150c
56          - qcom,pm8150l
57          - qcom,pm8226
58          - qcom,pm8350
59          - qcom,pm8350b
60          - qcom,pm8350c
61          - qcom,pm8450
62          - qcom,pm8550
63          - qcom,pm8550b
64          - qcom,pm8550ve
65          - qcom,pm8550vs
66          - qcom,pm8841
67          - qcom,pm8909
68          - qcom,pm8916
69          - qcom,pm8937
70          - qcom,pm8941
71          - qcom,pm8950
72          - qcom,pm8953
73          - qcom,pm8994
74          - qcom,pm8998
75          - qcom,pma8084
76          - qcom,pmc8180
77          - qcom,pmc8180c
78          - qcom,pmc8380
79          - qcom,pmd9635
80          - qcom,pmi632
81          - qcom,pmi8950
82          - qcom,pmi8962
83          - qcom,pmi8994
84          - qcom,pmi8998
85          - qcom,pmk8002
86          - qcom,pmk8350
87          - qcom,pmk8550
88          - qcom,pmm8155au
89          - qcom,pmm8654au
90          - qcom,pmp8074
91          - qcom,pmr735a
92          - qcom,pmr735b
93          - qcom,pmr735d
94          - qcom,pms405
95          - qcom,pmx55
96          - qcom,pmx65
97          - qcom,pmx75
98          - qcom,smb2351
99          - qcom,smb2360
100      - const: qcom,spmi-pmic
101
102  reg:
103    minItems: 1
104    maxItems: 2
105
106  '#address-cells':
107    const: 1
108
109  '#size-cells':
110    const: 0
111
112  labibb:
113    type: object
114    $ref: /schemas/regulator/qcom-labibb-regulator.yaml#
115
116  regulators:
117    type: object
118    $ref: /schemas/regulator/qcom,spmi-regulator.yaml#
119
120  pwm:
121    type: object
122    $ref: /schemas/leds/leds-qcom-lpg.yaml#
123
124patternProperties:
125  "^adc@[0-9a-f]+$":
126    type: object
127    oneOf:
128      - $ref: /schemas/iio/adc/qcom,spmi-iadc.yaml#
129      - $ref: /schemas/iio/adc/qcom,spmi-rradc.yaml#
130      - $ref: /schemas/iio/adc/qcom,spmi-vadc.yaml#
131
132  "^adc-tm@[0-9a-f]+$":
133    type: object
134    # ref depends on compatible, see allOf below
135
136  "^audio-codec@[0-9a-f]+$":
137    type: object
138    $ref: /schemas/sound/qcom,pm8916-wcd-analog-codec.yaml#
139
140  "^battery@[0-9a-f]+$":
141    type: object
142    oneOf:
143      - $ref: /schemas/power/supply/qcom,pm8916-bms-vm.yaml#
144
145  "^charger@[0-9a-f]+$":
146    type: object
147    oneOf:
148      - $ref: /schemas/power/supply/qcom,pm8916-lbc.yaml#
149      - $ref: /schemas/power/supply/qcom,pm8941-charger.yaml#
150      - $ref: /schemas/power/supply/qcom,pm8941-coincell.yaml#
151      - $ref: /schemas/power/supply/qcom,pmi8998-charger.yaml#
152
153  "gpio@[0-9a-f]+$":
154    type: object
155    $ref: /schemas/pinctrl/qcom,pmic-gpio.yaml#
156
157  "^led-controller@[0-9a-f]+$":
158    type: object
159    $ref: /schemas/leds/qcom,spmi-flash-led.yaml#
160
161  "^nvram@[0-9a-f]+$":
162    type: object
163    $ref: /schemas/nvmem/qcom,spmi-sdam.yaml#
164
165  "^pbs@[0-9a-f]+$":
166    type: object
167    $ref: /schemas/soc/qcom/qcom,pbs.yaml#
168
169  "phy@[0-9a-f]+$":
170    type: object
171    $ref: /schemas/phy/qcom,snps-eusb2-repeater.yaml#
172
173  "pon@[0-9a-f]+$":
174    type: object
175    $ref: /schemas/power/reset/qcom,pon.yaml#
176
177  "^rtc@[0-9a-f]+$":
178    type: object
179    $ref: /schemas/rtc/qcom-pm8xxx-rtc.yaml#
180
181  "^temp-alarm@[0-9a-f]+$":
182    type: object
183    $ref: /schemas/thermal/qcom,spmi-temp-alarm.yaml#
184
185  "^typec@[0-9a-f]+$":
186    type: object
187    $ref: /schemas/usb/qcom,pmic-typec.yaml#
188
189  "^usb-detect@[0-9a-f]+$":
190    type: object
191    $ref: /schemas/extcon/qcom,pm8941-misc.yaml#
192
193  "^usb-vbus-regulator@[0-9a-f]+$":
194    type: object
195    $ref: /schemas/regulator/qcom,usb-vbus-regulator.yaml#
196
197  "^vibrator@[0-9a-f]+$":
198    type: object
199    $ref: /schemas/input/qcom,pm8xxx-vib.yaml#
200
201  "^mpps@[0-9a-f]+$":
202    type: object
203    $ref: /schemas/pinctrl/qcom,pmic-mpp.yaml#
204
205  "(.*)?(wled|leds)@[0-9a-f]+$":
206    type: object
207    $ref: /schemas/leds/backlight/qcom-wled.yaml#
208    unevaluatedProperties: false
209
210required:
211  - compatible
212  - reg
213
214allOf:
215  - if:
216      properties:
217        compatible:
218          contains:
219            enum:
220              - qcom,pm8998
221    then:
222      patternProperties:
223        "^adc-tm@[0-9a-f]+$":
224          $ref: /schemas/thermal/qcom-spmi-adc-tm-hc.yaml#
225    else:
226      patternProperties:
227        "^adc-tm@[0-9a-f]+$":
228          $ref: /schemas/thermal/qcom-spmi-adc-tm5.yaml#
229
230additionalProperties: false
231
232examples:
233  - |
234    #include <dt-bindings/spmi/spmi.h>
235    #include <dt-bindings/interrupt-controller/irq.h>
236    #include <dt-bindings/interrupt-controller/arm-gic.h>
237
238    spmi@c440000 {
239        compatible = "qcom,spmi-pmic-arb";
240        reg = <0x0c440000 0x1100>,
241              <0x0c600000 0x2000000>,
242              <0x0e600000 0x100000>,
243              <0x0e700000 0xa0000>,
244              <0x0c40a000 0x26000>;
245        reg-names = "core", "chnls", "obsrvr", "intr", "cnfg";
246        interrupt-names = "periph_irq";
247        interrupts = <GIC_SPI 481 IRQ_TYPE_LEVEL_HIGH>;
248        qcom,ee = <0>;
249        qcom,channel = <0>;
250        #address-cells = <2>;
251        #size-cells = <0>;
252        interrupt-controller;
253        #interrupt-cells = <4>;
254
255        pmic@2 {
256            compatible = "qcom,pmi8998", "qcom,spmi-pmic";
257            reg = <0x2 SPMI_USID>;
258            #address-cells = <1>;
259            #size-cells = <0>;
260
261            gpio@c000 {
262                compatible = "qcom,pmi8998-gpio", "qcom,spmi-gpio";
263                reg = <0xc000>;
264                gpio-controller;
265                gpio-ranges = <&pmi8998_gpio 0 0 14>;
266                #gpio-cells = <2>;
267                interrupt-controller;
268                #interrupt-cells = <2>;
269            };
270        };
271    };
272
273  - |
274    #include <dt-bindings/input/input.h>
275    #include <dt-bindings/interrupt-controller/irq.h>
276    #include <dt-bindings/interrupt-controller/arm-gic.h>
277    #include <dt-bindings/iio/qcom,spmi-vadc.h>
278    #include <dt-bindings/spmi/spmi.h>
279
280    pmic@0 {
281        compatible = "qcom,pm6150", "qcom,spmi-pmic";
282        reg = <0x0 SPMI_USID>;
283        #address-cells = <1>;
284        #size-cells = <0>;
285
286        pon@800 {
287            compatible = "qcom,pm8998-pon";
288            reg = <0x800>;
289            mode-bootloader = <0x2>;
290            mode-recovery = <0x1>;
291
292            pwrkey {
293                compatible = "qcom,pm8941-pwrkey";
294                interrupts = <0x0 0x8 0 IRQ_TYPE_EDGE_BOTH>;
295                debounce = <15625>;
296                bias-pull-up;
297                linux,code = <KEY_POWER>;
298            };
299        };
300
301        temp-alarm@2400 {
302            compatible = "qcom,spmi-temp-alarm";
303            reg = <0x2400>;
304            interrupts = <0x0 0x24 0x0 IRQ_TYPE_EDGE_RISING>;
305            io-channels = <&pm6150_adc ADC5_DIE_TEMP>;
306            io-channel-names = "thermal";
307            #thermal-sensor-cells = <0>;
308        };
309
310        pm6150_adc: adc@3100 {
311            compatible = "qcom,spmi-adc5";
312            reg = <0x3100>;
313            interrupts = <0x0 0x31 0x0 IRQ_TYPE_EDGE_RISING>;
314            #address-cells = <1>;
315            #size-cells = <0>;
316            #io-channel-cells = <1>;
317
318            channel@6 {
319                reg = <ADC5_DIE_TEMP>;
320                label = "die_temp";
321            };
322
323            channel@4f {
324                reg = <ADC5_AMUX_THM3_100K_PU>;
325                qcom,ratiometric;
326                qcom,hw-settle-time = <200>;
327            };
328        };
329
330        adc-tm@3500 {
331            compatible = "qcom,spmi-adc-tm5";
332            reg = <0x3500>;
333            interrupts = <0x0 0x35 0x0 IRQ_TYPE_EDGE_RISING>;
334            #thermal-sensor-cells = <1>;
335            #address-cells = <1>;
336            #size-cells = <0>;
337
338            charger-thermistor@0 {
339                reg = <0>;
340                io-channels = <&pm6150_adc ADC5_AMUX_THM3_100K_PU>;
341                qcom,ratiometric;
342                qcom,hw-settle-time-us = <200>;
343            };
344        };
345
346        gpio@c000 {
347            compatible = "qcom,pm6150-gpio", "qcom,spmi-gpio";
348            reg = <0xc000>;
349            gpio-controller;
350            gpio-ranges = <&pm6150_gpio 0 0 10>;
351            #gpio-cells = <2>;
352            interrupt-controller;
353            #interrupt-cells = <2>;
354        };
355    };
356