1# SPDX-License-Identifier: GPL-2.0-only
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/iio/adc/qcom,spmi-vadc.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Qualcomm's SPMI PMIC ADC
8
9maintainers:
10  - Andy Gross <agross@kernel.org>
11  - Bjorn Andersson <bjorn.andersson@linaro.org>
12
13description: |
14  SPMI PMIC voltage ADC (VADC) provides interface to clients to read
15  voltage. The VADC is a 15-bit sigma-delta ADC.
16  SPMI PMIC5/PMIC7 voltage ADC (ADC) provides interface to clients to read
17  voltage. The VADC is a 16-bit sigma-delta ADC.
18
19properties:
20  compatible:
21    oneOf:
22      - items:
23          - const: qcom,pms405-adc
24          - const: qcom,spmi-adc-rev2
25
26      - items:
27          - enum:
28              - qcom,spmi-vadc
29              - qcom,spmi-adc5
30              - qcom,spmi-adc-rev2
31              - qcom,spmi-adc7
32
33  reg:
34    description: VADC base address in the SPMI PMIC register map
35    maxItems: 1
36
37  '#address-cells':
38    const: 1
39
40  '#size-cells':
41    const: 0
42
43  '#io-channel-cells':
44    const: 1
45
46  interrupts:
47    maxItems: 1
48    description:
49      End of conversion interrupt.
50
51required:
52  - compatible
53  - reg
54  - '#address-cells'
55  - '#size-cells'
56  - '#io-channel-cells'
57
58patternProperties:
59  "^.*@[0-9a-f]+$":
60    type: object
61    description: |
62      Represents the external channels which are connected to the ADC.
63      For compatible property "qcom,spmi-vadc" following channels, also known as
64      reference point channels, are used for result calibration and their channel
65      configuration nodes should be defined:
66      VADC_REF_625MV and/or VADC_SPARE1(based on PMIC version) VADC_REF_1250MV,
67      VADC_GND_REF and VADC_VDD_VADC.
68
69    properties:
70      reg:
71        maxItems: 1
72        description: |
73          ADC channel number.
74          See include/dt-bindings/iio/qcom,spmi-vadc.h
75          For PMIC7 ADC, the channel numbers are specified separately per PMIC
76          in the PMIC-specific files in include/dt-bindings/iio/.
77
78      label:
79        $ref: /schemas/types.yaml#/definitions/string
80        description: |
81            ADC input of the platform as seen in the schematics.
82            For thermistor inputs connected to generic AMUX or GPIO inputs
83            these can vary across platform for the same pins. Hence select
84            the platform schematics name for this channel.
85
86      qcom,decimation:
87        $ref: /schemas/types.yaml#/definitions/uint32
88        description: |
89            This parameter is used to decrease ADC sampling rate.
90            Quicker measurements can be made by reducing decimation ratio.
91
92      qcom,pre-scaling:
93        description: |
94            Used for scaling the channel input signal before the signal is
95            fed to VADC. The configuration for this node is to know the
96            pre-determined ratio and use it for post scaling. It is a pair of
97            integers, denoting the numerator and denominator of the fraction by which
98            input signal is multiplied. For example, <1 3> indicates the signal is scaled
99            down to 1/3 of its value before ADC measurement.
100            If property is not found default value depending on chip will be used.
101        $ref: /schemas/types.yaml#/definitions/uint32-array
102        oneOf:
103          - items:
104              - const: 1
105              - enum: [ 1, 3, 4, 6, 20, 8, 10 ]
106          - items:
107              - const: 10
108              - const: 81
109
110      qcom,ratiometric:
111        description: |
112            Channel calibration type.
113            - For compatible property "qcom,spmi-vadc", if this property is
114              specified VADC will use the VDD reference (1.8V) and GND for
115              channel calibration. If property is not found, channel will be
116              calibrated with 0.625V and 1.25V reference channels, also
117              known as absolute calibration.
118            - For compatible property "qcom,spmi-adc5", "qcom,spmi-adc7" and
119              "qcom,spmi-adc-rev2", if this property is specified VADC will use
120              the VDD reference (1.875V) and GND for channel calibration. If
121              property is not found, channel will be calibrated with 0V and 1.25V
122              reference channels, also known as absolute calibration.
123        type: boolean
124
125      qcom,hw-settle-time:
126        $ref: /schemas/types.yaml#/definitions/uint32
127        description: |
128            Time between AMUX getting configured and the ADC starting
129            conversion. The 'hw_settle_time' is an index used from valid values
130            and programmed in hardware to achieve the hardware settling delay.
131
132      qcom,avg-samples:
133        $ref: /schemas/types.yaml#/definitions/uint32
134        description: |
135            Number of samples to be used for measurement.
136            Averaging provides the option to obtain a single measurement
137            from the ADC that is an average of multiple samples. The value
138            selected is 2^(value).
139
140    required:
141      - reg
142
143allOf:
144  - if:
145      properties:
146        compatible:
147          contains:
148            const: qcom,spmi-vadc
149
150    then:
151      patternProperties:
152        "^.*@[0-9a-f]+$":
153          properties:
154            qcom,decimation:
155              enum: [ 512, 1024, 2048, 4096 ]
156              default: 512
157
158            qcom,hw-settle-time:
159              enum: [ 0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1, 2,
160                      4, 6, 8, 10 ]
161              default: 0
162
163            qcom,avg-samples:
164              enum: [ 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 ]
165              default: 1
166
167  - if:
168      properties:
169        compatible:
170          contains:
171            const: qcom,spmi-adc-rev2
172
173    then:
174      patternProperties:
175        "^.*@[0-9a-f]+$":
176          properties:
177            qcom,decimation:
178              enum: [ 256, 512, 1024 ]
179              default: 1024
180
181            qcom,hw-settle-time:
182              enum: [ 0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1, 2,
183                      4, 6, 8, 10 ]
184              default: 0
185
186            qcom,avg-samples:
187              enum: [ 1, 2, 4, 8, 16 ]
188              default: 1
189
190  - if:
191      properties:
192        compatible:
193          contains:
194            const: qcom,spmi-adc5
195
196    then:
197      patternProperties:
198        "^.*@[0-9a-f]+$":
199          properties:
200            qcom,decimation:
201              enum: [ 250, 420, 840 ]
202              default: 840
203
204            qcom,hw-settle-time:
205              enum: [ 15, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1, 2,
206                      4, 6, 8, 10, 16, 32, 64, 128 ]
207              default: 15
208
209            qcom,avg-samples:
210              enum: [ 1, 2, 4, 8, 16 ]
211              default: 1
212
213  - if:
214      properties:
215        compatible:
216          contains:
217            const: qcom,spmi-adc7
218
219    then:
220      patternProperties:
221        "^.*@[0-9a-f]+$":
222          properties:
223            qcom,decimation:
224              enum: [ 85, 340, 1360 ]
225              default: 1360
226
227            qcom,hw-settle-time:
228              enum: [ 15, 100, 200, 300, 400, 500, 600, 700, 1000, 2000, 4000,
229                      8000, 16000, 32000, 64000, 128000 ]
230              default: 15
231
232            qcom,avg-samples:
233              enum: [ 1, 2, 4, 8, 16 ]
234              default: 1
235
236additionalProperties: false
237
238examples:
239  - |
240    spmi_bus {
241      #address-cells = <1>;
242      #size-cells = <0>;
243      /* VADC node */
244      pmic_vadc: adc@3100 {
245        compatible = "qcom,spmi-vadc";
246        reg = <0x3100>;
247        interrupts = <0x0 0x31 0x0 0x1>;
248        #address-cells = <1>;
249        #size-cells = <0>;
250        #io-channel-cells = <1>;
251
252        /* Channel node */
253        adc-chan@39 {
254          reg = <0x39>;
255          qcom,decimation = <512>;
256          qcom,ratiometric;
257          qcom,hw-settle-time = <200>;
258          qcom,avg-samples = <1>;
259          qcom,pre-scaling = <1 3>;
260        };
261
262        adc-chan@9 {
263          reg = <0x9>;
264        };
265
266        adc-chan@a {
267          reg = <0xa>;
268        };
269
270        adc-chan@e {
271          reg = <0xe>;
272        };
273
274        adc-chan@f {
275          reg = <0xf>;
276        };
277      };
278    };
279