1 # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
4 $id: http://devicetree.org/schemas/iio/adc/st,stm32-dfsdm-adc.yaml#
5 $schema: http://devicetree.org/meta-schemas/core.yaml#
7 title: STMicroelectronics STM32 DFSDM ADC device driver
10 - Fabrice Gasnier <fabrice.gasnier@st.com>
11 - Olivier Moysan <olivier.moysan@st.com>
14 STM32 DFSDM ADC is a sigma delta analog-to-digital converter dedicated to
15 interface external sigma delta modulators to STM32 micro controllers.
16 It is mainly targeted for:
17 - Sigma delta modulators (motor control, metering...)
18 - PDM microphones (audio digital microphone)
20 It features up to 8 serial digital interfaces (SPI or Manchester) and
21 up to 4 filters on stm32h7 or 6 filters on stm32mp1.
23 Each child node matches with a filter instance.
37 Internal clock used for DFSDM digital processing and control blocks.
38 dfsdm clock can also feed CLKOUT, when CLKOUT is used.
39 - description: audio clock can be used as an alternate to feed CLKOUT.
58 SPI clock OUT frequency (Hz). Requested only for SPI master mode.
59 This clock must be set according to the "clock" property.
60 Frequency must be a multiple of the rcc clock frequency.
61 If not, SPI CLKOUT frequency will not be accurate.
72 additionalProperties: false
77 description: child node
86 description: Specifies the DFSDM filter instance used.
94 List of single-ended channels muxed for this ADC.
95 On stm32h7 and stm32mp1:
96 - For st,stm32-dfsdm-adc: up to 8 channels numbered from 0 to 7.
97 - For st,stm32-dfsdm-dmic: 1 channel numbered from 0 to 7.
99 - $ref: /schemas/types.yaml#/definitions/uint32-array
104 st,adc-channel-names:
105 description: List of single-ended channel names.
107 - $ref: /schemas/types.yaml#/definitions/string-array
111 SinC filter order from 0 to 5.
113 - [1-5]: order 1 to 5.
114 For audio purpose it is recommended to use order 3 to 5.
116 - $ref: /schemas/types.yaml#/definitions/uint32
124 st,adc-channel-types:
126 Single-ended channel input type.
127 - "SPI_R": SPI with data on rising edge (default)
128 - "SPI_F": SPI with data on falling edge
129 - "MANCH_R": manchester codec, rising edge = logic 0, falling edge = logic 1
130 - "MANCH_F": manchester codec, rising edge = logic 1, falling edge = logic 0
132 enum: [ SPI_R, SPI_F, MANCH_R, MANCH_F ]
134 - $ref: /schemas/types.yaml#/definitions/non-unique-string-array
136 st,adc-channel-clk-src:
138 Conversion clock source.
139 - "CLKIN": external SPI clock (CLKIN x)
140 - "CLKOUT": internal SPI clock (CLKOUT) (default)
141 - "CLKOUT_F": internal SPI clock divided by 2 (falling edge).
142 - "CLKOUT_R": internal SPI clock divided by 2 (rising edge).
144 enum: [ CLKIN, CLKOUT, CLKOUT_F, CLKOUT_R ]
146 - $ref: /schemas/types.yaml#/definitions/non-unique-string-array
150 Must be defined if two sigma delta modulators are
151 connected on same SPI input.
152 If not set, channel n is connected to SPI input n.
153 If set, channel n is connected to SPI input n + 1.
158 Set to 1 to synchronize with DFSDM filter instance 0.
159 Used for multi microphones synchronization.
174 - st,adc-channel-names
176 - "#io-channel-cells"
183 const: st,stm32-dfsdm-adc
191 st,adc-channel-names:
195 st,adc-channel-types:
199 st,adc-channel-clk-src:
205 From common IIO binding. Used to pipe external sigma delta
206 modulator or internal ADC output to DFSDM channel.
207 This is not required for "st,stm32-dfsdm-pdm" compatibility as
208 PDM microphone is binded in Audio DT node.
217 const: st,stm32-dfsdm-dmic
224 st,adc-channel-names:
227 st,adc-channel-types:
230 st,adc-channel-clk-src:
240 description: child node
248 From common IIO binding. Used to pipe external sigma delta
249 modulator or internal ADC output to DFSDM channel.
260 const: st,stm32h7-dfsdm
275 const: st,stm32mp1-dfsdm
288 #include <dt-bindings/interrupt-controller/arm-gic.h>
289 #include <dt-bindings/clock/stm32mp1-clks.h>
290 dfsdm: dfsdm@4400d000 {
291 compatible = "st,stm32mp1-dfsdm";
292 reg = <0x4400d000 0x800>;
293 clocks = <&rcc DFSDM_K>, <&rcc ADFSDM_K>;
294 clock-names = "dfsdm", "audio";
295 #address-cells = <1>;
299 compatible = "st,stm32-dfsdm-dmic";
301 interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>;
302 dmas = <&dmamux1 101 0x400 0x01>;
304 #io-channel-cells = <1>;
305 st,adc-channels = <1>;
306 st,adc-channel-names = "dmic0";
307 st,adc-channel-types = "SPI_R";
308 st,adc-channel-clk-src = "CLKOUT";
309 st,filter-order = <5>;
311 asoc_pdm0: dfsdm-dai {
312 compatible = "st,stm32h7-dfsdm-dai";
313 #sound-dai-cells = <0>;
314 io-channels = <&dfsdm0 0>;
318 dfsdm_pdm1: filter@1 {
319 compatible = "st,stm32-dfsdm-adc";
321 interrupts = <GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH>;
322 dmas = <&dmamux1 102 0x400 0x01>;
324 #io-channel-cells = <1>;
325 st,adc-channels = <2 3>;
326 st,adc-channel-names = "in2", "in3";
327 st,adc-channel-types = "SPI_R", "SPI_R";
328 st,adc-channel-clk-src = "CLKOUT_F", "CLKOUT_F";
329 io-channels = <&sd_adc2 &sd_adc3>;
330 st,filter-order = <1>;