GNU Linux-libre 6.8.9-gnu
[releases.git] / Documentation / devicetree / bindings / mfd / qcom,spmi-pmic.yaml
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
7 title: Qualcomm SPMI PMICs multi-function device
8
9 description: |
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
23 maintainers:
24   - Stephen Boyd <sboyd@kernel.org>
25
26 properties:
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,pmd9635
79           - qcom,pmi632
80           - qcom,pmi8950
81           - qcom,pmi8962
82           - qcom,pmi8994
83           - qcom,pmi8998
84           - qcom,pmk8002
85           - qcom,pmk8350
86           - qcom,pmk8550
87           - qcom,pmm8155au
88           - qcom,pmm8654au
89           - qcom,pmp8074
90           - qcom,pmr735a
91           - qcom,pmr735b
92           - qcom,pmr735d
93           - qcom,pms405
94           - qcom,pmx55
95           - qcom,pmx65
96           - qcom,pmx75
97           - qcom,smb2351
98       - const: qcom,spmi-pmic
99
100   reg:
101     minItems: 1
102     maxItems: 2
103
104   '#address-cells':
105     const: 1
106
107   '#size-cells':
108     const: 0
109
110   labibb:
111     type: object
112     $ref: /schemas/regulator/qcom-labibb-regulator.yaml#
113
114   regulators:
115     type: object
116     $ref: /schemas/regulator/qcom,spmi-regulator.yaml#
117
118   pwm:
119     type: object
120     $ref: /schemas/leds/leds-qcom-lpg.yaml#
121
122 patternProperties:
123   "^adc@[0-9a-f]+$":
124     type: object
125     oneOf:
126       - $ref: /schemas/iio/adc/qcom,spmi-iadc.yaml#
127       - $ref: /schemas/iio/adc/qcom,spmi-rradc.yaml#
128       - $ref: /schemas/iio/adc/qcom,spmi-vadc.yaml#
129
130   "^adc-tm@[0-9a-f]+$":
131     type: object
132     # ref depends on compatible, see allOf below
133
134   "^audio-codec@[0-9a-f]+$":
135     type: object
136     $ref: /schemas/sound/qcom,pm8916-wcd-analog-codec.yaml#
137
138   "^battery@[0-9a-f]+$":
139     type: object
140     oneOf:
141       - $ref: /schemas/power/supply/qcom,pm8916-bms-vm.yaml#
142
143   "^charger@[0-9a-f]+$":
144     type: object
145     oneOf:
146       - $ref: /schemas/power/supply/qcom,pm8916-lbc.yaml#
147       - $ref: /schemas/power/supply/qcom,pm8941-charger.yaml#
148       - $ref: /schemas/power/supply/qcom,pm8941-coincell.yaml#
149       - $ref: /schemas/power/supply/qcom,pmi8998-charger.yaml#
150
151   "gpio@[0-9a-f]+$":
152     type: object
153     $ref: /schemas/pinctrl/qcom,pmic-gpio.yaml#
154
155   "^led-controller@[0-9a-f]+$":
156     type: object
157     $ref: /schemas/leds/qcom,spmi-flash-led.yaml#
158
159   "^nvram@[0-9a-f]+$":
160     type: object
161     $ref: /schemas/nvmem/qcom,spmi-sdam.yaml#
162
163   "phy@[0-9a-f]+$":
164     type: object
165     $ref: /schemas/phy/qcom,snps-eusb2-repeater.yaml#
166
167   "pon@[0-9a-f]+$":
168     type: object
169     $ref: /schemas/power/reset/qcom,pon.yaml#
170
171   "^rtc@[0-9a-f]+$":
172     type: object
173     $ref: /schemas/rtc/qcom-pm8xxx-rtc.yaml#
174
175   "^temp-alarm@[0-9a-f]+$":
176     type: object
177     $ref: /schemas/thermal/qcom,spmi-temp-alarm.yaml#
178
179   "^typec@[0-9a-f]+$":
180     type: object
181     $ref: /schemas/usb/qcom,pmic-typec.yaml#
182
183   "^usb-detect@[0-9a-f]+$":
184     type: object
185     $ref: /schemas/extcon/qcom,pm8941-misc.yaml#
186
187   "^usb-vbus-regulator@[0-9a-f]+$":
188     type: object
189     $ref: /schemas/regulator/qcom,usb-vbus-regulator.yaml#
190
191   "^vibrator@[0-9a-f]+$":
192     type: object
193     $ref: /schemas/input/qcom,pm8xxx-vib.yaml#
194
195   "^mpps@[0-9a-f]+$":
196     type: object
197     $ref: /schemas/pinctrl/qcom,pmic-mpp.yaml#
198
199   "(.*)?(wled|leds)@[0-9a-f]+$":
200     type: object
201     $ref: /schemas/leds/backlight/qcom-wled.yaml#
202     unevaluatedProperties: false
203
204 required:
205   - compatible
206   - reg
207
208 allOf:
209   - if:
210       properties:
211         compatible:
212           contains:
213             enum:
214               - qcom,pm8998
215     then:
216       patternProperties:
217         "^adc-tm@[0-9a-f]+$":
218           $ref: /schemas/thermal/qcom-spmi-adc-tm-hc.yaml#
219     else:
220       patternProperties:
221         "^adc-tm@[0-9a-f]+$":
222           $ref: /schemas/thermal/qcom-spmi-adc-tm5.yaml#
223
224 additionalProperties: false
225
226 examples:
227   - |
228     #include <dt-bindings/spmi/spmi.h>
229     #include <dt-bindings/interrupt-controller/irq.h>
230     #include <dt-bindings/interrupt-controller/arm-gic.h>
231
232     spmi@c440000 {
233         compatible = "qcom,spmi-pmic-arb";
234         reg = <0x0c440000 0x1100>,
235               <0x0c600000 0x2000000>,
236               <0x0e600000 0x100000>,
237               <0x0e700000 0xa0000>,
238               <0x0c40a000 0x26000>;
239         reg-names = "core", "chnls", "obsrvr", "intr", "cnfg";
240         interrupt-names = "periph_irq";
241         interrupts = <GIC_SPI 481 IRQ_TYPE_LEVEL_HIGH>;
242         qcom,ee = <0>;
243         qcom,channel = <0>;
244         #address-cells = <2>;
245         #size-cells = <0>;
246         interrupt-controller;
247         #interrupt-cells = <4>;
248
249         pmic@2 {
250             compatible = "qcom,pmi8998", "qcom,spmi-pmic";
251             reg = <0x2 SPMI_USID>;
252             #address-cells = <1>;
253             #size-cells = <0>;
254
255             gpio@c000 {
256                 compatible = "qcom,pmi8998-gpio", "qcom,spmi-gpio";
257                 reg = <0xc000>;
258                 gpio-controller;
259                 gpio-ranges = <&pmi8998_gpio 0 0 14>;
260                 #gpio-cells = <2>;
261                 interrupt-controller;
262                 #interrupt-cells = <2>;
263             };
264         };
265     };
266
267   - |
268     #include <dt-bindings/input/input.h>
269     #include <dt-bindings/interrupt-controller/irq.h>
270     #include <dt-bindings/interrupt-controller/arm-gic.h>
271     #include <dt-bindings/iio/qcom,spmi-vadc.h>
272     #include <dt-bindings/spmi/spmi.h>
273
274     pmic@0 {
275         compatible = "qcom,pm6150", "qcom,spmi-pmic";
276         reg = <0x0 SPMI_USID>;
277         #address-cells = <1>;
278         #size-cells = <0>;
279
280         pon@800 {
281             compatible = "qcom,pm8998-pon";
282             reg = <0x800>;
283             mode-bootloader = <0x2>;
284             mode-recovery = <0x1>;
285
286             pwrkey {
287                 compatible = "qcom,pm8941-pwrkey";
288                 interrupts = <0x0 0x8 0 IRQ_TYPE_EDGE_BOTH>;
289                 debounce = <15625>;
290                 bias-pull-up;
291                 linux,code = <KEY_POWER>;
292             };
293         };
294
295         temp-alarm@2400 {
296             compatible = "qcom,spmi-temp-alarm";
297             reg = <0x2400>;
298             interrupts = <0x0 0x24 0x0 IRQ_TYPE_EDGE_RISING>;
299             io-channels = <&pm6150_adc ADC5_DIE_TEMP>;
300             io-channel-names = "thermal";
301             #thermal-sensor-cells = <0>;
302         };
303
304         pm6150_adc: adc@3100 {
305             compatible = "qcom,spmi-adc5";
306             reg = <0x3100>;
307             interrupts = <0x0 0x31 0x0 IRQ_TYPE_EDGE_RISING>;
308             #address-cells = <1>;
309             #size-cells = <0>;
310             #io-channel-cells = <1>;
311
312             channel@6 {
313                 reg = <ADC5_DIE_TEMP>;
314                 label = "die_temp";
315             };
316
317             channel@4f {
318                 reg = <ADC5_AMUX_THM3_100K_PU>;
319                 qcom,ratiometric;
320                 qcom,hw-settle-time = <200>;
321             };
322         };
323
324         adc-tm@3500 {
325             compatible = "qcom,spmi-adc-tm5";
326             reg = <0x3500>;
327             interrupts = <0x0 0x35 0x0 IRQ_TYPE_EDGE_RISING>;
328             #thermal-sensor-cells = <1>;
329             #address-cells = <1>;
330             #size-cells = <0>;
331
332             charger-thermistor@0 {
333                 reg = <0>;
334                 io-channels = <&pm6150_adc ADC5_AMUX_THM3_100K_PU>;
335                 qcom,ratiometric;
336                 qcom,hw-settle-time-us = <200>;
337             };
338         };
339
340         gpio@c000 {
341             compatible = "qcom,pm6150-gpio", "qcom,spmi-gpio";
342             reg = <0xc000>;
343             gpio-controller;
344             gpio-ranges = <&pm6150_gpio 0 0 10>;
345             #gpio-cells = <2>;
346             interrupt-controller;
347             #interrupt-cells = <2>;
348         };
349     };