1c66ec88fSEmmanuel Vadot# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
2c66ec88fSEmmanuel Vadot%YAML 1.2
3c66ec88fSEmmanuel Vadot---
4*cb7aa33aSEmmanuel Vadot$id: http://devicetree.org/schemas/iio/adc/st,stm32-adc.yaml#
5*cb7aa33aSEmmanuel Vadot$schema: http://devicetree.org/meta-schemas/core.yaml#
6c66ec88fSEmmanuel Vadot
78bab661aSEmmanuel Vadottitle: STMicroelectronics STM32 ADC
8c66ec88fSEmmanuel Vadot
9c66ec88fSEmmanuel Vadotdescription: |
10c66ec88fSEmmanuel Vadot  STM32 ADC is a successive approximation analog-to-digital converter.
11c66ec88fSEmmanuel Vadot  It has several multiplexed input channels. Conversions can be performed
12c66ec88fSEmmanuel Vadot  in single, continuous, scan or discontinuous mode. Result of the ADC is
13c66ec88fSEmmanuel Vadot  stored in a left-aligned or right-aligned 32-bit data register.
14c66ec88fSEmmanuel Vadot  Conversions can be launched in software or using hardware triggers.
15c66ec88fSEmmanuel Vadot
16c66ec88fSEmmanuel Vadot  The analog watchdog feature allows the application to detect if the input
17c66ec88fSEmmanuel Vadot  voltage goes beyond the user-defined, higher or lower thresholds.
18c66ec88fSEmmanuel Vadot
19c66ec88fSEmmanuel Vadot  Each STM32 ADC block can have up to 3 ADC instances.
20c66ec88fSEmmanuel Vadot
21c66ec88fSEmmanuel Vadotmaintainers:
228cc087a1SEmmanuel Vadot  - Fabrice Gasnier <fabrice.gasnier@foss.st.com>
23c66ec88fSEmmanuel Vadot
24c66ec88fSEmmanuel Vadotproperties:
25c66ec88fSEmmanuel Vadot  compatible:
26c66ec88fSEmmanuel Vadot    enum:
27c66ec88fSEmmanuel Vadot      - st,stm32f4-adc-core
28c66ec88fSEmmanuel Vadot      - st,stm32h7-adc-core
29c66ec88fSEmmanuel Vadot      - st,stm32mp1-adc-core
308bab661aSEmmanuel Vadot      - st,stm32mp13-adc-core
31c66ec88fSEmmanuel Vadot
32c66ec88fSEmmanuel Vadot  reg:
33c66ec88fSEmmanuel Vadot    maxItems: 1
34c66ec88fSEmmanuel Vadot
35c66ec88fSEmmanuel Vadot  interrupts:
36c66ec88fSEmmanuel Vadot    description: |
37c66ec88fSEmmanuel Vadot      One or more interrupts for ADC block, depending on part used:
38c66ec88fSEmmanuel Vadot        - stm32f4 and stm32h7 share a common ADC interrupt line.
39c66ec88fSEmmanuel Vadot        - stm32mp1 has two separate interrupt lines, one for each ADC within
40c66ec88fSEmmanuel Vadot          ADC block.
418bab661aSEmmanuel Vadot        - stm32mp13 has an interrupt line per ADC block.
42c66ec88fSEmmanuel Vadot    minItems: 1
43c66ec88fSEmmanuel Vadot    maxItems: 2
44c66ec88fSEmmanuel Vadot
45c66ec88fSEmmanuel Vadot  clocks:
465def4c47SEmmanuel Vadot    minItems: 1
475def4c47SEmmanuel Vadot    maxItems: 2
48c66ec88fSEmmanuel Vadot    description: |
49c66ec88fSEmmanuel Vadot      Core can use up to two clocks, depending on part used:
50c66ec88fSEmmanuel Vadot        - "adc" clock: for the analog circuitry, common to all ADCs.
51c66ec88fSEmmanuel Vadot          It's required on stm32f4.
52c66ec88fSEmmanuel Vadot          It's optional on stm32h7 and stm32mp1.
53c66ec88fSEmmanuel Vadot        - "bus" clock: for registers access, common to all ADCs.
54c66ec88fSEmmanuel Vadot          It's not present on stm32f4.
55c66ec88fSEmmanuel Vadot          It's required on stm32h7 and stm32mp1.
56c66ec88fSEmmanuel Vadot
57c66ec88fSEmmanuel Vadot  clock-names: true
58c66ec88fSEmmanuel Vadot
59c66ec88fSEmmanuel Vadot  st,max-clk-rate-hz:
60c66ec88fSEmmanuel Vadot    description:
61c66ec88fSEmmanuel Vadot      Allow to specify desired max clock rate used by analog circuitry.
62c66ec88fSEmmanuel Vadot
63c66ec88fSEmmanuel Vadot  vdda-supply:
64c66ec88fSEmmanuel Vadot    description: Phandle to the vdda input analog voltage.
65c66ec88fSEmmanuel Vadot
66c66ec88fSEmmanuel Vadot  vref-supply:
67c66ec88fSEmmanuel Vadot    description: Phandle to the vref input analog reference voltage.
68c66ec88fSEmmanuel Vadot
69c66ec88fSEmmanuel Vadot  booster-supply:
70c66ec88fSEmmanuel Vadot    description:
71c66ec88fSEmmanuel Vadot      Phandle to the embedded booster regulator that can be used to supply ADC
72c66ec88fSEmmanuel Vadot      analog input switches on stm32h7 and stm32mp1.
73c66ec88fSEmmanuel Vadot
74c66ec88fSEmmanuel Vadot  vdd-supply:
75c66ec88fSEmmanuel Vadot    description:
76c66ec88fSEmmanuel Vadot      Phandle to the vdd input voltage. It can be used to supply ADC analog
77c66ec88fSEmmanuel Vadot      input switches on stm32mp1.
78c66ec88fSEmmanuel Vadot
79c66ec88fSEmmanuel Vadot  st,syscfg:
80c66ec88fSEmmanuel Vadot    description:
81c66ec88fSEmmanuel Vadot      Phandle to system configuration controller. It can be used to control the
82c66ec88fSEmmanuel Vadot      analog circuitry on stm32mp1.
83*cb7aa33aSEmmanuel Vadot    $ref: /schemas/types.yaml#/definitions/phandle-array
84c66ec88fSEmmanuel Vadot
85c66ec88fSEmmanuel Vadot  interrupt-controller: true
86c66ec88fSEmmanuel Vadot
87c66ec88fSEmmanuel Vadot  '#interrupt-cells':
88c66ec88fSEmmanuel Vadot    const: 1
89c66ec88fSEmmanuel Vadot
90c66ec88fSEmmanuel Vadot  '#address-cells':
91c66ec88fSEmmanuel Vadot    const: 1
92c66ec88fSEmmanuel Vadot
93c66ec88fSEmmanuel Vadot  '#size-cells':
94c66ec88fSEmmanuel Vadot    const: 0
95c66ec88fSEmmanuel Vadot
96c66ec88fSEmmanuel VadotallOf:
97c66ec88fSEmmanuel Vadot  - if:
98c66ec88fSEmmanuel Vadot      properties:
99c66ec88fSEmmanuel Vadot        compatible:
100c66ec88fSEmmanuel Vadot          contains:
101c66ec88fSEmmanuel Vadot            const: st,stm32f4-adc-core
102c66ec88fSEmmanuel Vadot
103c66ec88fSEmmanuel Vadot    then:
104c66ec88fSEmmanuel Vadot      properties:
105c66ec88fSEmmanuel Vadot        clocks:
106c66ec88fSEmmanuel Vadot          maxItems: 1
107c66ec88fSEmmanuel Vadot
108c66ec88fSEmmanuel Vadot        clock-names:
109c66ec88fSEmmanuel Vadot          const: adc
110c66ec88fSEmmanuel Vadot
111c66ec88fSEmmanuel Vadot        interrupts:
112c66ec88fSEmmanuel Vadot          items:
113c66ec88fSEmmanuel Vadot            - description: interrupt line common for all ADCs
114c66ec88fSEmmanuel Vadot
115c66ec88fSEmmanuel Vadot        st,max-clk-rate-hz:
116c66ec88fSEmmanuel Vadot          minimum: 600000
117c66ec88fSEmmanuel Vadot          maximum: 36000000
118c66ec88fSEmmanuel Vadot          default: 36000000
119c66ec88fSEmmanuel Vadot
120c66ec88fSEmmanuel Vadot        booster-supply: false
121c66ec88fSEmmanuel Vadot
122c66ec88fSEmmanuel Vadot        vdd-supply: false
123c66ec88fSEmmanuel Vadot
124c66ec88fSEmmanuel Vadot        st,syscfg: false
125c66ec88fSEmmanuel Vadot
126c66ec88fSEmmanuel Vadot  - if:
127c66ec88fSEmmanuel Vadot      properties:
128c66ec88fSEmmanuel Vadot        compatible:
129c66ec88fSEmmanuel Vadot          contains:
130c66ec88fSEmmanuel Vadot            const: st,stm32h7-adc-core
131c66ec88fSEmmanuel Vadot
132c66ec88fSEmmanuel Vadot    then:
133c66ec88fSEmmanuel Vadot      properties:
134c66ec88fSEmmanuel Vadot        clocks:
135c66ec88fSEmmanuel Vadot          minItems: 1
136c66ec88fSEmmanuel Vadot          maxItems: 2
137c66ec88fSEmmanuel Vadot
138c66ec88fSEmmanuel Vadot        clock-names:
139c66ec88fSEmmanuel Vadot          items:
140c66ec88fSEmmanuel Vadot            - const: bus
141c66ec88fSEmmanuel Vadot            - const: adc
142c66ec88fSEmmanuel Vadot          minItems: 1
143c66ec88fSEmmanuel Vadot
144c66ec88fSEmmanuel Vadot        interrupts:
145c66ec88fSEmmanuel Vadot          items:
146c66ec88fSEmmanuel Vadot            - description: interrupt line common for all ADCs
147c66ec88fSEmmanuel Vadot
148c66ec88fSEmmanuel Vadot        st,max-clk-rate-hz:
149c66ec88fSEmmanuel Vadot          minimum: 120000
150c66ec88fSEmmanuel Vadot          maximum: 36000000
151c66ec88fSEmmanuel Vadot          default: 36000000
152c66ec88fSEmmanuel Vadot
153c66ec88fSEmmanuel Vadot        vdd-supply: false
154c66ec88fSEmmanuel Vadot
155c66ec88fSEmmanuel Vadot        st,syscfg: false
156c66ec88fSEmmanuel Vadot
157c66ec88fSEmmanuel Vadot  - if:
158c66ec88fSEmmanuel Vadot      properties:
159c66ec88fSEmmanuel Vadot        compatible:
160c66ec88fSEmmanuel Vadot          contains:
161c66ec88fSEmmanuel Vadot            const: st,stm32mp1-adc-core
162c66ec88fSEmmanuel Vadot
163c66ec88fSEmmanuel Vadot    then:
164c66ec88fSEmmanuel Vadot      properties:
165c66ec88fSEmmanuel Vadot        clocks:
166c66ec88fSEmmanuel Vadot          minItems: 1
167c66ec88fSEmmanuel Vadot          maxItems: 2
168c66ec88fSEmmanuel Vadot
169c66ec88fSEmmanuel Vadot        clock-names:
170c66ec88fSEmmanuel Vadot          items:
171c66ec88fSEmmanuel Vadot            - const: bus
172c66ec88fSEmmanuel Vadot            - const: adc
173c66ec88fSEmmanuel Vadot          minItems: 1
174c66ec88fSEmmanuel Vadot
175c66ec88fSEmmanuel Vadot        interrupts:
176c66ec88fSEmmanuel Vadot          items:
177c66ec88fSEmmanuel Vadot            - description: interrupt line for ADC1
178c66ec88fSEmmanuel Vadot            - description: interrupt line for ADC2
179c66ec88fSEmmanuel Vadot
180c66ec88fSEmmanuel Vadot        st,max-clk-rate-hz:
181c66ec88fSEmmanuel Vadot          minimum: 120000
182c66ec88fSEmmanuel Vadot          maximum: 36000000
183c66ec88fSEmmanuel Vadot          default: 36000000
184c66ec88fSEmmanuel Vadot
1858bab661aSEmmanuel Vadot  - if:
1868bab661aSEmmanuel Vadot      properties:
1878bab661aSEmmanuel Vadot        compatible:
1888bab661aSEmmanuel Vadot          contains:
1898bab661aSEmmanuel Vadot            const: st,stm32mp13-adc-core
1908bab661aSEmmanuel Vadot
1918bab661aSEmmanuel Vadot    then:
1928bab661aSEmmanuel Vadot      properties:
1938bab661aSEmmanuel Vadot        clocks:
1948bab661aSEmmanuel Vadot          minItems: 1
1958bab661aSEmmanuel Vadot          maxItems: 2
1968bab661aSEmmanuel Vadot
1978bab661aSEmmanuel Vadot        clock-names:
1988bab661aSEmmanuel Vadot          items:
1998bab661aSEmmanuel Vadot            - const: bus
2008bab661aSEmmanuel Vadot            - const: adc
2018bab661aSEmmanuel Vadot          minItems: 1
2028bab661aSEmmanuel Vadot
2038bab661aSEmmanuel Vadot        interrupts:
2048bab661aSEmmanuel Vadot          items:
2058bab661aSEmmanuel Vadot            - description: ADC interrupt line
2068bab661aSEmmanuel Vadot
2078bab661aSEmmanuel Vadot        st,max-clk-rate-hz:
2088bab661aSEmmanuel Vadot          minimum: 150000
2098bab661aSEmmanuel Vadot          maximum: 75000000
2108bab661aSEmmanuel Vadot          default: 75000000
2118bab661aSEmmanuel Vadot
212c66ec88fSEmmanuel VadotadditionalProperties: false
213c66ec88fSEmmanuel Vadot
214c66ec88fSEmmanuel Vadotrequired:
215c66ec88fSEmmanuel Vadot  - compatible
216c66ec88fSEmmanuel Vadot  - reg
217c66ec88fSEmmanuel Vadot  - interrupts
218c66ec88fSEmmanuel Vadot  - clocks
219c66ec88fSEmmanuel Vadot  - clock-names
220c66ec88fSEmmanuel Vadot  - vdda-supply
221c66ec88fSEmmanuel Vadot  - vref-supply
222c66ec88fSEmmanuel Vadot  - interrupt-controller
223c66ec88fSEmmanuel Vadot  - '#interrupt-cells'
224c66ec88fSEmmanuel Vadot  - '#address-cells'
225c66ec88fSEmmanuel Vadot  - '#size-cells'
226c66ec88fSEmmanuel Vadot
227c66ec88fSEmmanuel VadotpatternProperties:
228c66ec88fSEmmanuel Vadot  "^adc@[0-9]+$":
229c66ec88fSEmmanuel Vadot    type: object
230c66ec88fSEmmanuel Vadot    description:
231c66ec88fSEmmanuel Vadot      An ADC block node should contain at least one subnode, representing an
232c66ec88fSEmmanuel Vadot      ADC instance available on the machine.
233c66ec88fSEmmanuel Vadot
234c66ec88fSEmmanuel Vadot    properties:
235c66ec88fSEmmanuel Vadot      compatible:
236c66ec88fSEmmanuel Vadot        enum:
237c66ec88fSEmmanuel Vadot          - st,stm32f4-adc
238c66ec88fSEmmanuel Vadot          - st,stm32h7-adc
239c66ec88fSEmmanuel Vadot          - st,stm32mp1-adc
2408bab661aSEmmanuel Vadot          - st,stm32mp13-adc
241c66ec88fSEmmanuel Vadot
242c66ec88fSEmmanuel Vadot      reg:
243c66ec88fSEmmanuel Vadot        description: |
244c66ec88fSEmmanuel Vadot          Offset of ADC instance in ADC block. Valid values are:
245c66ec88fSEmmanuel Vadot            - 0x0:   ADC1
246c66ec88fSEmmanuel Vadot            - 0x100: ADC2
247c66ec88fSEmmanuel Vadot            - 0x200: ADC3 (stm32f4 only)
248c66ec88fSEmmanuel Vadot        maxItems: 1
249c66ec88fSEmmanuel Vadot
250c66ec88fSEmmanuel Vadot      '#io-channel-cells':
251c66ec88fSEmmanuel Vadot        const: 1
252c66ec88fSEmmanuel Vadot
2538cc087a1SEmmanuel Vadot      '#address-cells':
2548cc087a1SEmmanuel Vadot        const: 1
2558cc087a1SEmmanuel Vadot
2568cc087a1SEmmanuel Vadot      '#size-cells':
2578cc087a1SEmmanuel Vadot        const: 0
2588cc087a1SEmmanuel Vadot
259c66ec88fSEmmanuel Vadot      interrupts:
260c66ec88fSEmmanuel Vadot        description: |
261c66ec88fSEmmanuel Vadot          IRQ Line for the ADC instance. Valid values are:
2628bab661aSEmmanuel Vadot            - 0 for adc@0 (single adc for stm32mp13)
263c66ec88fSEmmanuel Vadot            - 1 for adc@100
264c66ec88fSEmmanuel Vadot            - 2 for adc@200 (stm32f4 only)
265c66ec88fSEmmanuel Vadot        maxItems: 1
266c66ec88fSEmmanuel Vadot
267c66ec88fSEmmanuel Vadot      clocks:
268c66ec88fSEmmanuel Vadot        description:
269c66ec88fSEmmanuel Vadot          Input clock private to this ADC instance. It's required only on
270c66ec88fSEmmanuel Vadot          stm32f4, that has per instance clock input for registers access.
271c66ec88fSEmmanuel Vadot        maxItems: 1
272c66ec88fSEmmanuel Vadot
273c66ec88fSEmmanuel Vadot      dmas:
274c66ec88fSEmmanuel Vadot        description: RX DMA Channel
275c66ec88fSEmmanuel Vadot        maxItems: 1
276c66ec88fSEmmanuel Vadot
277c66ec88fSEmmanuel Vadot      dma-names:
278c66ec88fSEmmanuel Vadot        const: rx
279c66ec88fSEmmanuel Vadot
280c66ec88fSEmmanuel Vadot      assigned-resolution-bits:
281c66ec88fSEmmanuel Vadot        description: |
282c66ec88fSEmmanuel Vadot          Resolution (bits) to use for conversions:
2838bab661aSEmmanuel Vadot            - can be 6, 8, 10 or 12 on stm32f4 and stm32mp13
284c66ec88fSEmmanuel Vadot            - can be 8, 10, 12, 14 or 16 on stm32h7 and stm32mp1
285c66ec88fSEmmanuel Vadot
286c66ec88fSEmmanuel Vadot      st,adc-channels:
287c66ec88fSEmmanuel Vadot        description: |
288c66ec88fSEmmanuel Vadot          List of single-ended channels muxed for this ADC. It can have up to:
289c66ec88fSEmmanuel Vadot            - 16 channels, numbered from 0 to 15 (for in0..in15) on stm32f4
2908bab661aSEmmanuel Vadot            - 19 channels, numbered from 0 to 18 (for in0..in18) on stm32mp13.
291c66ec88fSEmmanuel Vadot            - 20 channels, numbered from 0 to 19 (for in0..in19) on stm32h7 and
292c66ec88fSEmmanuel Vadot              stm32mp1.
293c66ec88fSEmmanuel Vadot        $ref: /schemas/types.yaml#/definitions/uint32-array
2948cc087a1SEmmanuel Vadot        deprecated: true
295c66ec88fSEmmanuel Vadot
296c66ec88fSEmmanuel Vadot      st,adc-diff-channels:
297c66ec88fSEmmanuel Vadot        description: |
298c66ec88fSEmmanuel Vadot          List of differential channels muxed for this ADC. Some channels can
299c66ec88fSEmmanuel Vadot          be configured as differential instead of single-ended on stm32h7 and
300c66ec88fSEmmanuel Vadot          on stm32mp1. Positive and negative inputs pairs are listed:
301c66ec88fSEmmanuel Vadot          <vinp vinn>, <vinp vinn>,... vinp and vinn are numbered from 0 to 19.
302c66ec88fSEmmanuel Vadot
303c66ec88fSEmmanuel Vadot          Note: At least one of "st,adc-channels" or "st,adc-diff-channels" is
3048cc087a1SEmmanuel Vadot          required if no adc generic channel is defined. These legacy channel
3058cc087a1SEmmanuel Vadot          properties are exclusive with adc generic channel bindings.
3068cc087a1SEmmanuel Vadot          Both properties can be used together. Some channels can be
307c66ec88fSEmmanuel Vadot          used as single-ended and some other ones as differential (mixed). But
308c66ec88fSEmmanuel Vadot          channels can't be configured both as single-ended and differential.
309c66ec88fSEmmanuel Vadot        $ref: /schemas/types.yaml#/definitions/uint32-matrix
310c66ec88fSEmmanuel Vadot        items:
311c66ec88fSEmmanuel Vadot          items:
312c66ec88fSEmmanuel Vadot            - description: |
313c66ec88fSEmmanuel Vadot                "vinp" indicates positive input number
314c66ec88fSEmmanuel Vadot              minimum: 0
315c66ec88fSEmmanuel Vadot              maximum: 19
316c66ec88fSEmmanuel Vadot            - description: |
317c66ec88fSEmmanuel Vadot                "vinn" indicates negative input number
318c66ec88fSEmmanuel Vadot              minimum: 0
319c66ec88fSEmmanuel Vadot              maximum: 19
3208cc087a1SEmmanuel Vadot        deprecated: true
321c66ec88fSEmmanuel Vadot
322c66ec88fSEmmanuel Vadot      st,min-sample-time-nsecs:
323c66ec88fSEmmanuel Vadot        description:
324c66ec88fSEmmanuel Vadot          Minimum sampling time in nanoseconds. Depending on hardware (board)
325c66ec88fSEmmanuel Vadot          e.g. high/low analog input source impedance, fine tune of ADC
326c66ec88fSEmmanuel Vadot          sampling time may be recommended. This can be either one value or an
327c66ec88fSEmmanuel Vadot          array that matches "st,adc-channels" and/or "st,adc-diff-channels"
328c66ec88fSEmmanuel Vadot          list, to set sample time resp. for all channels, or independently for
329c66ec88fSEmmanuel Vadot          each channel.
330c66ec88fSEmmanuel Vadot        $ref: /schemas/types.yaml#/definitions/uint32-array
3318cc087a1SEmmanuel Vadot        deprecated: true
3328cc087a1SEmmanuel Vadot
3338cc087a1SEmmanuel Vadot      nvmem-cells:
3348cc087a1SEmmanuel Vadot        items:
3358cc087a1SEmmanuel Vadot          - description: Phandle to the calibration vrefint data provided by otp
3368cc087a1SEmmanuel Vadot
3378cc087a1SEmmanuel Vadot      nvmem-cell-names:
3388cc087a1SEmmanuel Vadot        items:
3398cc087a1SEmmanuel Vadot          - const: vrefint
3408cc087a1SEmmanuel Vadot
3418cc087a1SEmmanuel Vadot    patternProperties:
3428cc087a1SEmmanuel Vadot      "^channel@([0-9]|1[0-9])$":
3438cc087a1SEmmanuel Vadot        type: object
344*cb7aa33aSEmmanuel Vadot        $ref: adc.yaml
3458cc087a1SEmmanuel Vadot        description: Represents the external channels which are connected to the ADC.
3468cc087a1SEmmanuel Vadot
3478cc087a1SEmmanuel Vadot        properties:
3488cc087a1SEmmanuel Vadot          reg:
3498cc087a1SEmmanuel Vadot            items:
3508cc087a1SEmmanuel Vadot              minimum: 0
3518cc087a1SEmmanuel Vadot              maximum: 19
3528cc087a1SEmmanuel Vadot
3538cc087a1SEmmanuel Vadot          label:
3548cc087a1SEmmanuel Vadot            description: |
3558cc087a1SEmmanuel Vadot              Unique name to identify which channel this is.
3568bab661aSEmmanuel Vadot              Reserved label names "vddcore", "vddcpu", "vddq_ddr", "vrefint" and "vbat"
3578cc087a1SEmmanuel Vadot              are used to identify internal channels with matching names.
3588cc087a1SEmmanuel Vadot
3598cc087a1SEmmanuel Vadot          diff-channels:
3608cc087a1SEmmanuel Vadot            $ref: /schemas/types.yaml#/definitions/uint32-array
3618cc087a1SEmmanuel Vadot            items:
3628cc087a1SEmmanuel Vadot              minimum: 0
3638cc087a1SEmmanuel Vadot              maximum: 19
3648cc087a1SEmmanuel Vadot
3658cc087a1SEmmanuel Vadot          st,min-sample-time-ns:
3668cc087a1SEmmanuel Vadot            description: |
3678cc087a1SEmmanuel Vadot              Minimum sampling time in nanoseconds. Depending on hardware (board)
3688cc087a1SEmmanuel Vadot              e.g. high/low analog input source impedance, fine tune of ADC
3698cc087a1SEmmanuel Vadot              sampling time may be recommended.
3708cc087a1SEmmanuel Vadot
3718cc087a1SEmmanuel Vadot        required:
3728cc087a1SEmmanuel Vadot          - reg
3738cc087a1SEmmanuel Vadot
3748cc087a1SEmmanuel Vadot        additionalProperties: false
375c66ec88fSEmmanuel Vadot
376c66ec88fSEmmanuel Vadot    allOf:
377c66ec88fSEmmanuel Vadot      - if:
378c66ec88fSEmmanuel Vadot          properties:
379c66ec88fSEmmanuel Vadot            compatible:
380c66ec88fSEmmanuel Vadot              contains:
381c66ec88fSEmmanuel Vadot                const: st,stm32f4-adc
382c66ec88fSEmmanuel Vadot
383c66ec88fSEmmanuel Vadot        then:
384c66ec88fSEmmanuel Vadot          properties:
385c66ec88fSEmmanuel Vadot            reg:
386c66ec88fSEmmanuel Vadot              enum:
387c66ec88fSEmmanuel Vadot                - 0x0
388c66ec88fSEmmanuel Vadot                - 0x100
389c66ec88fSEmmanuel Vadot                - 0x200
390c66ec88fSEmmanuel Vadot
391c66ec88fSEmmanuel Vadot            interrupts:
392c66ec88fSEmmanuel Vadot              minimum: 0
393c66ec88fSEmmanuel Vadot              maximum: 2
394c66ec88fSEmmanuel Vadot
395c66ec88fSEmmanuel Vadot            assigned-resolution-bits:
396c66ec88fSEmmanuel Vadot              enum: [6, 8, 10, 12]
397c66ec88fSEmmanuel Vadot              default: 12
398c66ec88fSEmmanuel Vadot
399c66ec88fSEmmanuel Vadot            st,adc-channels:
400c66ec88fSEmmanuel Vadot              minItems: 1
401c66ec88fSEmmanuel Vadot              maxItems: 16
402c66ec88fSEmmanuel Vadot              items:
403c66ec88fSEmmanuel Vadot                minimum: 0
404c66ec88fSEmmanuel Vadot                maximum: 15
405c66ec88fSEmmanuel Vadot
406c66ec88fSEmmanuel Vadot            st,adc-diff-channels: false
407c66ec88fSEmmanuel Vadot
408c66ec88fSEmmanuel Vadot            st,min-sample-time-nsecs:
409c66ec88fSEmmanuel Vadot              minItems: 1
410c66ec88fSEmmanuel Vadot              maxItems: 16
411c66ec88fSEmmanuel Vadot              items:
412c66ec88fSEmmanuel Vadot                minimum: 80
413c66ec88fSEmmanuel Vadot
414c66ec88fSEmmanuel Vadot          required:
415c66ec88fSEmmanuel Vadot            - clocks
416c66ec88fSEmmanuel Vadot
417c66ec88fSEmmanuel Vadot      - if:
418c66ec88fSEmmanuel Vadot          properties:
419c66ec88fSEmmanuel Vadot            compatible:
420c66ec88fSEmmanuel Vadot              contains:
421c66ec88fSEmmanuel Vadot                enum:
422c66ec88fSEmmanuel Vadot                  - st,stm32h7-adc
423c66ec88fSEmmanuel Vadot                  - st,stm32mp1-adc
424c66ec88fSEmmanuel Vadot
425c66ec88fSEmmanuel Vadot        then:
426c66ec88fSEmmanuel Vadot          properties:
427c66ec88fSEmmanuel Vadot            reg:
428c66ec88fSEmmanuel Vadot              enum:
429c66ec88fSEmmanuel Vadot                - 0x0
430c66ec88fSEmmanuel Vadot                - 0x100
431c66ec88fSEmmanuel Vadot
432c66ec88fSEmmanuel Vadot            interrupts:
433c66ec88fSEmmanuel Vadot              minimum: 0
434c66ec88fSEmmanuel Vadot              maximum: 1
435c66ec88fSEmmanuel Vadot
436c66ec88fSEmmanuel Vadot            assigned-resolution-bits:
437c66ec88fSEmmanuel Vadot              enum: [8, 10, 12, 14, 16]
438c66ec88fSEmmanuel Vadot              default: 16
439c66ec88fSEmmanuel Vadot
440c66ec88fSEmmanuel Vadot            st,adc-channels:
441c66ec88fSEmmanuel Vadot              minItems: 1
442c66ec88fSEmmanuel Vadot              maxItems: 20
443c66ec88fSEmmanuel Vadot              items:
444c66ec88fSEmmanuel Vadot                minimum: 0
445c66ec88fSEmmanuel Vadot                maximum: 19
446c66ec88fSEmmanuel Vadot
447c66ec88fSEmmanuel Vadot            st,min-sample-time-nsecs:
448c66ec88fSEmmanuel Vadot              minItems: 1
449c66ec88fSEmmanuel Vadot              maxItems: 20
450c66ec88fSEmmanuel Vadot              items:
451c66ec88fSEmmanuel Vadot                minimum: 40
452c66ec88fSEmmanuel Vadot
4538bab661aSEmmanuel Vadot
4548bab661aSEmmanuel Vadot      - if:
4558bab661aSEmmanuel Vadot          properties:
4568bab661aSEmmanuel Vadot            compatible:
4578bab661aSEmmanuel Vadot              contains:
4588bab661aSEmmanuel Vadot                const: st,stm32mp13-adc
4598bab661aSEmmanuel Vadot
4608bab661aSEmmanuel Vadot        then:
4618bab661aSEmmanuel Vadot          properties:
4628bab661aSEmmanuel Vadot            reg:
4638bab661aSEmmanuel Vadot              const: 0x0
4648bab661aSEmmanuel Vadot
4658bab661aSEmmanuel Vadot            interrupts:
4668bab661aSEmmanuel Vadot              const: 0
4678bab661aSEmmanuel Vadot
4688bab661aSEmmanuel Vadot            assigned-resolution-bits:
4698bab661aSEmmanuel Vadot              enum: [6, 8, 10, 12]
4708bab661aSEmmanuel Vadot              default: 12
4718bab661aSEmmanuel Vadot
4728bab661aSEmmanuel Vadot            st,adc-channels:
4738bab661aSEmmanuel Vadot              minItems: 1
4748bab661aSEmmanuel Vadot              maxItems: 19
4758bab661aSEmmanuel Vadot              items:
4768bab661aSEmmanuel Vadot                minimum: 0
4778bab661aSEmmanuel Vadot                maximum: 18
4788bab661aSEmmanuel Vadot
4798bab661aSEmmanuel Vadot            st,min-sample-time-nsecs:
4808bab661aSEmmanuel Vadot              minItems: 1
4818bab661aSEmmanuel Vadot              maxItems: 19
4828bab661aSEmmanuel Vadot              items:
4838bab661aSEmmanuel Vadot                minimum: 40
484c66ec88fSEmmanuel Vadot    additionalProperties: false
485c66ec88fSEmmanuel Vadot
486c66ec88fSEmmanuel Vadot    required:
487c66ec88fSEmmanuel Vadot      - compatible
488c66ec88fSEmmanuel Vadot      - reg
489c66ec88fSEmmanuel Vadot      - interrupts
490c66ec88fSEmmanuel Vadot      - '#io-channel-cells'
491c66ec88fSEmmanuel Vadot
492c66ec88fSEmmanuel Vadotexamples:
493c66ec88fSEmmanuel Vadot  - |
494c66ec88fSEmmanuel Vadot    // Example 1: with stm32f429, ADC1, single-ended channel 8
495c66ec88fSEmmanuel Vadot      adc123: adc@40012000 {
496c66ec88fSEmmanuel Vadot        compatible = "st,stm32f4-adc-core";
497c66ec88fSEmmanuel Vadot        reg = <0x40012000 0x400>;
498c66ec88fSEmmanuel Vadot        interrupts = <18>;
499c66ec88fSEmmanuel Vadot        clocks = <&rcc 0 168>;
500c66ec88fSEmmanuel Vadot        clock-names = "adc";
501c66ec88fSEmmanuel Vadot        st,max-clk-rate-hz = <36000000>;
502c66ec88fSEmmanuel Vadot        vdda-supply = <&vdda>;
503c66ec88fSEmmanuel Vadot        vref-supply = <&vref>;
504c66ec88fSEmmanuel Vadot        interrupt-controller;
505c66ec88fSEmmanuel Vadot        #interrupt-cells = <1>;
506c66ec88fSEmmanuel Vadot        #address-cells = <1>;
507c66ec88fSEmmanuel Vadot        #size-cells = <0>;
508c66ec88fSEmmanuel Vadot        adc@0 {
509c66ec88fSEmmanuel Vadot          compatible = "st,stm32f4-adc";
510c66ec88fSEmmanuel Vadot          #io-channel-cells = <1>;
511c66ec88fSEmmanuel Vadot          reg = <0x0>;
512c66ec88fSEmmanuel Vadot          clocks = <&rcc 0 168>;
513c66ec88fSEmmanuel Vadot          interrupt-parent = <&adc123>;
514c66ec88fSEmmanuel Vadot          interrupts = <0>;
515c66ec88fSEmmanuel Vadot          st,adc-channels = <8>;
516c66ec88fSEmmanuel Vadot          dmas = <&dma2 0 0 0x400 0x0>;
517c66ec88fSEmmanuel Vadot          dma-names = "rx";
518c66ec88fSEmmanuel Vadot          assigned-resolution-bits = <8>;
519c66ec88fSEmmanuel Vadot        };
520c66ec88fSEmmanuel Vadot        // ...
521c66ec88fSEmmanuel Vadot        // other adc child nodes follow...
522c66ec88fSEmmanuel Vadot      };
523c66ec88fSEmmanuel Vadot
524c66ec88fSEmmanuel Vadot  - |
525c66ec88fSEmmanuel Vadot    // Example 2: with stm32mp157c to setup ADC1 with:
526c66ec88fSEmmanuel Vadot    // - channels 0 & 1 as single-ended
527c66ec88fSEmmanuel Vadot    // - channels 2 & 3 as differential (with resp. 6 & 7 negative inputs)
528c66ec88fSEmmanuel Vadot      #include <dt-bindings/interrupt-controller/arm-gic.h>
529c66ec88fSEmmanuel Vadot      #include <dt-bindings/clock/stm32mp1-clks.h>
530c66ec88fSEmmanuel Vadot      adc12: adc@48003000 {
531c66ec88fSEmmanuel Vadot        compatible = "st,stm32mp1-adc-core";
532c66ec88fSEmmanuel Vadot        reg = <0x48003000 0x400>;
533c66ec88fSEmmanuel Vadot        interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>,
534c66ec88fSEmmanuel Vadot                     <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>;
535c66ec88fSEmmanuel Vadot        clocks = <&rcc ADC12>, <&rcc ADC12_K>;
536c66ec88fSEmmanuel Vadot        clock-names = "bus", "adc";
537c66ec88fSEmmanuel Vadot        booster-supply = <&booster>;
538c66ec88fSEmmanuel Vadot        vdd-supply = <&vdd>;
539c66ec88fSEmmanuel Vadot        vdda-supply = <&vdda>;
540c66ec88fSEmmanuel Vadot        vref-supply = <&vref>;
541c66ec88fSEmmanuel Vadot        st,syscfg = <&syscfg>;
542c66ec88fSEmmanuel Vadot        interrupt-controller;
543c66ec88fSEmmanuel Vadot        #interrupt-cells = <1>;
544c66ec88fSEmmanuel Vadot        #address-cells = <1>;
545c66ec88fSEmmanuel Vadot        #size-cells = <0>;
546c66ec88fSEmmanuel Vadot        adc@0 {
547c66ec88fSEmmanuel Vadot          compatible = "st,stm32mp1-adc";
548c66ec88fSEmmanuel Vadot          #io-channel-cells = <1>;
549c66ec88fSEmmanuel Vadot          reg = <0x0>;
550c66ec88fSEmmanuel Vadot          interrupt-parent = <&adc12>;
551c66ec88fSEmmanuel Vadot          interrupts = <0>;
552c66ec88fSEmmanuel Vadot          st,adc-channels = <0 1>;
553c66ec88fSEmmanuel Vadot          st,adc-diff-channels = <2 6>, <3 7>;
554c66ec88fSEmmanuel Vadot          st,min-sample-time-nsecs = <5000>;
555c66ec88fSEmmanuel Vadot          dmas = <&dmamux1 9 0x400 0x05>;
556c66ec88fSEmmanuel Vadot          dma-names = "rx";
557c66ec88fSEmmanuel Vadot        };
558c66ec88fSEmmanuel Vadot        // ...
559c66ec88fSEmmanuel Vadot        // other adc child node follow...
560c66ec88fSEmmanuel Vadot      };
561c66ec88fSEmmanuel Vadot
5628cc087a1SEmmanuel Vadot  - |
5638cc087a1SEmmanuel Vadot    // Example 3: with stm32mp157c to setup ADC2 with:
5648cc087a1SEmmanuel Vadot    // - internal channels 13, 14, 15.
5658cc087a1SEmmanuel Vadot      #include <dt-bindings/interrupt-controller/arm-gic.h>
5668cc087a1SEmmanuel Vadot      #include <dt-bindings/clock/stm32mp1-clks.h>
5678cc087a1SEmmanuel Vadot      adc122: adc@48003000 {
5688cc087a1SEmmanuel Vadot        compatible = "st,stm32mp1-adc-core";
5698cc087a1SEmmanuel Vadot        reg = <0x48003000 0x400>;
5708cc087a1SEmmanuel Vadot        interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>,
5718cc087a1SEmmanuel Vadot                     <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>;
5728cc087a1SEmmanuel Vadot        clocks = <&rcc ADC12>, <&rcc ADC12_K>;
5738cc087a1SEmmanuel Vadot        clock-names = "bus", "adc";
5748cc087a1SEmmanuel Vadot        booster-supply = <&booster>;
5758cc087a1SEmmanuel Vadot        vdd-supply = <&vdd>;
5768cc087a1SEmmanuel Vadot        vdda-supply = <&vdda>;
5778cc087a1SEmmanuel Vadot        vref-supply = <&vref>;
5788cc087a1SEmmanuel Vadot        st,syscfg = <&syscfg>;
5798cc087a1SEmmanuel Vadot        interrupt-controller;
5808cc087a1SEmmanuel Vadot        #interrupt-cells = <1>;
5818cc087a1SEmmanuel Vadot        #address-cells = <1>;
5828cc087a1SEmmanuel Vadot        #size-cells = <0>;
5838cc087a1SEmmanuel Vadot        adc@100 {
5848cc087a1SEmmanuel Vadot          compatible = "st,stm32mp1-adc";
5858cc087a1SEmmanuel Vadot          #io-channel-cells = <1>;
5868cc087a1SEmmanuel Vadot          reg = <0x100>;
5878cc087a1SEmmanuel Vadot          interrupts = <1>;
5888cc087a1SEmmanuel Vadot          #address-cells = <1>;
5898cc087a1SEmmanuel Vadot          #size-cells = <0>;
5908cc087a1SEmmanuel Vadot          channel@13 {
5918cc087a1SEmmanuel Vadot            reg = <13>;
5928cc087a1SEmmanuel Vadot            label = "vrefint";
5938cc087a1SEmmanuel Vadot            st,min-sample-time-ns = <9000>;
5948cc087a1SEmmanuel Vadot          };
5958cc087a1SEmmanuel Vadot          channel@14 {
5968cc087a1SEmmanuel Vadot            reg = <14>;
5978cc087a1SEmmanuel Vadot            label = "vddcore";
5988cc087a1SEmmanuel Vadot            st,min-sample-time-ns = <9000>;
5998cc087a1SEmmanuel Vadot          };
6008cc087a1SEmmanuel Vadot          channel@15 {
6018cc087a1SEmmanuel Vadot            reg = <15>;
6028cc087a1SEmmanuel Vadot            label = "vbat";
6038cc087a1SEmmanuel Vadot            st,min-sample-time-ns = <9000>;
6048cc087a1SEmmanuel Vadot          };
6058cc087a1SEmmanuel Vadot        };
6068cc087a1SEmmanuel Vadot      };
6078cc087a1SEmmanuel Vadot
608c66ec88fSEmmanuel Vadot...
609