Merge tag 'mfd-next-6.2' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd
[platform/kernel/linux-rpi.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,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
106 patternProperties:
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
164 required:
165   - compatible
166   - reg
167
168 allOf:
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
184 additionalProperties: false
185
186 examples:
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     };