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,pm7325
45          - qcom,pm8004
46          - qcom,pm8005
47          - qcom,pm8009
48          - qcom,pm8010
49          - qcom,pm8019
50          - qcom,pm8028
51          - qcom,pm8110
52          - qcom,pm8150
53          - qcom,pm8150b
54          - qcom,pm8150c
55          - qcom,pm8150l
56          - qcom,pm8226
57          - qcom,pm8350
58          - qcom,pm8350b
59          - qcom,pm8350c
60          - qcom,pm8550
61          - qcom,pm8550b
62          - qcom,pm8550ve
63          - qcom,pm8550vs
64          - qcom,pm8841
65          - qcom,pm8909
66          - qcom,pm8916
67          - qcom,pm8941
68          - qcom,pm8950
69          - qcom,pm8953
70          - qcom,pm8994
71          - qcom,pm8998
72          - qcom,pma8084
73          - qcom,pmd9635
74          - qcom,pmi8950
75          - qcom,pmi8962
76          - qcom,pmi8994
77          - qcom,pmi8998
78          - qcom,pmk8002
79          - qcom,pmk8350
80          - qcom,pmk8550
81          - qcom,pmm8155au
82          - qcom,pmm8654au
83          - qcom,pmp8074
84          - qcom,pmr735a
85          - qcom,pmr735b
86          - qcom,pmr735d
87          - qcom,pms405
88          - qcom,pmx55
89          - qcom,pmx65
90          - qcom,smb2351
91      - const: qcom,spmi-pmic
92
93  reg:
94    minItems: 1
95    maxItems: 2
96
97  '#address-cells':
98    const: 1
99
100  '#size-cells':
101    const: 0
102
103  labibb:
104    type: object
105    $ref: /schemas/regulator/qcom-labibb-regulator.yaml#
106
107  regulators:
108    type: object
109    $ref: /schemas/regulator/qcom,spmi-regulator.yaml#
110
111  pwm:
112    type: object
113    $ref: /schemas/leds/leds-qcom-lpg.yaml#
114
115patternProperties:
116  "^adc@[0-9a-f]+$":
117    type: object
118    oneOf:
119      - $ref: /schemas/iio/adc/qcom,spmi-iadc.yaml#
120      - $ref: /schemas/iio/adc/qcom,spmi-rradc.yaml#
121      - $ref: /schemas/iio/adc/qcom,spmi-vadc.yaml#
122
123  "^adc-tm@[0-9a-f]+$":
124    type: object
125    # ref depends on compatible, see allOf below
126
127  "^audio-codec@[0-9a-f]+$":
128    type: object
129    additionalProperties: true # FIXME qcom,pm8916-wcd-analog-codec binding not converted yet
130
131  "^charger@[0-9a-f]+$":
132    type: object
133    oneOf:
134      - $ref: /schemas/power/supply/qcom,pm8941-charger.yaml#
135      - $ref: /schemas/power/supply/qcom,pm8941-coincell.yaml#
136
137  "gpio@[0-9a-f]+$":
138    type: object
139    $ref: /schemas/pinctrl/qcom,pmic-gpio.yaml#
140
141  "^led-controller@[0-9a-f]+$":
142    type: object
143    $ref: /schemas/leds/qcom,spmi-flash-led.yaml#
144
145  "^nvram@[0-9a-f]+$":
146    type: object
147    $ref: /schemas/nvmem/qcom,spmi-sdam.yaml#
148
149  "pon@[0-9a-f]+$":
150    type: object
151    $ref: /schemas/power/reset/qcom,pon.yaml#
152
153  "^rtc@[0-9a-f]+$":
154    type: object
155    $ref: /schemas/rtc/qcom-pm8xxx-rtc.yaml#
156
157  "^temp-alarm@[0-9a-f]+$":
158    type: object
159    $ref: /schemas/thermal/qcom,spmi-temp-alarm.yaml#
160
161  "^usb-detect@[0-9a-f]+$":
162    type: object
163    $ref: /schemas/extcon/qcom,pm8941-misc.yaml#
164
165  "^usb-vbus-regulator@[0-9a-f]+$":
166    type: object
167    $ref: /schemas/regulator/qcom,usb-vbus-regulator.yaml#
168
169  "^vibrator@[0-9a-f]+$":
170    type: object
171    $ref: /schemas/input/qcom,pm8xxx-vib.yaml#
172
173  "^mpps@[0-9a-f]+$":
174    type: object
175    $ref: /schemas/pinctrl/qcom,pmic-mpp.yaml#
176
177  "(.*)?(wled|leds)@[0-9a-f]+$":
178    type: object
179    $ref: /schemas/leds/backlight/qcom-wled.yaml#
180    unevaluatedProperties: false
181
182required:
183  - compatible
184  - reg
185
186allOf:
187  - if:
188      properties:
189        compatible:
190          contains:
191            enum:
192              - qcom,pm8998
193    then:
194      patternProperties:
195        "^adc-tm@[0-9a-f]+$":
196          $ref: /schemas/thermal/qcom-spmi-adc-tm-hc.yaml#
197    else:
198      patternProperties:
199        "^adc-tm@[0-9a-f]+$":
200          $ref: /schemas/thermal/qcom-spmi-adc-tm5.yaml#
201
202additionalProperties: false
203
204examples:
205  - |
206    #include <dt-bindings/spmi/spmi.h>
207    #include <dt-bindings/interrupt-controller/irq.h>
208    #include <dt-bindings/interrupt-controller/arm-gic.h>
209
210    spmi@c440000 {
211        compatible = "qcom,spmi-pmic-arb";
212        reg = <0x0c440000 0x1100>,
213              <0x0c600000 0x2000000>,
214              <0x0e600000 0x100000>,
215              <0x0e700000 0xa0000>,
216              <0x0c40a000 0x26000>;
217        reg-names = "core", "chnls", "obsrvr", "intr", "cnfg";
218        interrupt-names = "periph_irq";
219        interrupts = <GIC_SPI 481 IRQ_TYPE_LEVEL_HIGH>;
220        qcom,ee = <0>;
221        qcom,channel = <0>;
222        #address-cells = <2>;
223        #size-cells = <0>;
224        interrupt-controller;
225        #interrupt-cells = <4>;
226
227        pmi8998_lsid0: pmic@2 {
228            compatible = "qcom,pmi8998", "qcom,spmi-pmic";
229            reg = <0x2 SPMI_USID>;
230            #address-cells = <1>;
231            #size-cells = <0>;
232
233            pmi8998_gpio: gpio@c000 {
234                compatible = "qcom,pmi8998-gpio", "qcom,spmi-gpio";
235                reg = <0xc000>;
236                gpio-controller;
237                gpio-ranges = <&pmi8998_gpio 0 0 14>;
238                #gpio-cells = <2>;
239                interrupt-controller;
240                #interrupt-cells = <2>;
241            };
242        };
243    };
244
245  - |
246    #include <dt-bindings/input/input.h>
247    #include <dt-bindings/interrupt-controller/irq.h>
248    #include <dt-bindings/interrupt-controller/arm-gic.h>
249    #include <dt-bindings/iio/qcom,spmi-vadc.h>
250    #include <dt-bindings/spmi/spmi.h>
251
252    pmic@0 {
253        compatible = "qcom,pm6150", "qcom,spmi-pmic";
254        reg = <0x0 SPMI_USID>;
255        #address-cells = <1>;
256        #size-cells = <0>;
257
258        pon@800 {
259            compatible = "qcom,pm8998-pon";
260            reg = <0x800>;
261            mode-bootloader = <0x2>;
262            mode-recovery = <0x1>;
263
264            pwrkey {
265                compatible = "qcom,pm8941-pwrkey";
266                interrupts = <0x0 0x8 0 IRQ_TYPE_EDGE_BOTH>;
267                debounce = <15625>;
268                bias-pull-up;
269                linux,code = <KEY_POWER>;
270            };
271        };
272
273        temp-alarm@2400 {
274            compatible = "qcom,spmi-temp-alarm";
275            reg = <0x2400>;
276            interrupts = <0x0 0x24 0x0 IRQ_TYPE_EDGE_RISING>;
277            io-channels = <&pm6150_adc ADC5_DIE_TEMP>;
278            io-channel-names = "thermal";
279            #thermal-sensor-cells = <0>;
280        };
281
282        pm6150_adc: adc@3100 {
283            compatible = "qcom,spmi-adc5";
284            reg = <0x3100>;
285            interrupts = <0x0 0x31 0x0 IRQ_TYPE_EDGE_RISING>;
286            #address-cells = <1>;
287            #size-cells = <0>;
288            #io-channel-cells = <1>;
289
290            channel@6 {
291                reg = <ADC5_DIE_TEMP>;
292                label = "die_temp";
293            };
294
295            channel@4f {
296                reg = <ADC5_AMUX_THM3_100K_PU>;
297                qcom,ratiometric;
298                qcom,hw-settle-time = <200>;
299            };
300        };
301
302        adc-tm@3500 {
303            compatible = "qcom,spmi-adc-tm5";
304            reg = <0x3500>;
305            interrupts = <0x0 0x35 0x0 IRQ_TYPE_EDGE_RISING>;
306            #thermal-sensor-cells = <1>;
307            #address-cells = <1>;
308            #size-cells = <0>;
309
310            charger-thermistor@0 {
311                reg = <0>;
312                io-channels = <&pm6150_adc ADC5_AMUX_THM3_100K_PU>;
313                qcom,ratiometric;
314                qcom,hw-settle-time-us = <200>;
315            };
316        };
317
318        pm6150_gpio: gpio@c000 {
319            compatible = "qcom,pm6150-gpio", "qcom,spmi-gpio";
320            reg = <0xc000>;
321            gpio-controller;
322            gpio-ranges = <&pm6150_gpio 0 0 10>;
323            #gpio-cells = <2>;
324            interrupt-controller;
325            #interrupt-cells = <2>;
326        };
327    };
328