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