blob: a2b2fbf77d5cb877297df33cdf659449b2a8cf27 [file] [log] [blame]
Tom Rini53633a82024-02-29 12:33:36 -05001# 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
Tom Rini93743d22024-04-01 09:08:13 -040069 - qcom,pm8937
Tom Rini53633a82024-02-29 12:33:36 -050070 - qcom,pm8941
71 - qcom,pm8950
72 - qcom,pm8953
73 - qcom,pm8994
74 - qcom,pm8998
75 - qcom,pma8084
76 - qcom,pmc8180
77 - qcom,pmc8180c
Tom Rini6b642ac2024-10-01 12:20:28 -060078 - qcom,pmc8380
Tom Rini53633a82024-02-29 12:33:36 -050079 - 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
Tom Rini6b642ac2024-10-01 12:20:28 -060099 - qcom,smb2360
Tom Rini53633a82024-02-29 12:33:36 -0500100 - 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
Tom Rini93743d22024-04-01 09:08:13 -0400140 "^battery@[0-9a-f]+$":
141 type: object
142 oneOf:
143 - $ref: /schemas/power/supply/qcom,pm8916-bms-vm.yaml#
144
Tom Rini53633a82024-02-29 12:33:36 -0500145 "^charger@[0-9a-f]+$":
146 type: object
147 oneOf:
Tom Rini93743d22024-04-01 09:08:13 -0400148 - $ref: /schemas/power/supply/qcom,pm8916-lbc.yaml#
Tom Rini53633a82024-02-29 12:33:36 -0500149 - $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
Tom Rini762f85b2024-07-20 11:15:10 -0600165 "^pbs@[0-9a-f]+$":
166 type: object
167 $ref: /schemas/soc/qcom/qcom,pbs.yaml#
168
Tom Rini53633a82024-02-29 12:33:36 -0500169 "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 };