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@foss.st.com>
11 - Olivier Moysan <olivier.moysan@foss.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.
56 SPI clock OUT frequency (Hz). Requested only for SPI master mode.
57 This clock must be set according to the "clock" property.
58 Frequency must be a multiple of the rcc clock frequency.
59 If not, SPI CLKOUT frequency will not be accurate.
70 additionalProperties: false
75 description: child node
84 description: Specifies the DFSDM filter instance used.
92 List of single-ended channels muxed for this ADC.
93 On stm32h7 and stm32mp1:
94 - For st,stm32-dfsdm-adc: up to 8 channels numbered from 0 to 7.
95 - For st,stm32-dfsdm-dmic: 1 channel numbered from 0 to 7.
96 $ref: /schemas/types.yaml#/definitions/uint32-array
101 st,adc-channel-names:
102 description: List of single-ended channel names.
106 SinC filter order from 0 to 5.
108 - [1-5]: order 1 to 5.
109 For audio purpose it is recommended to use order 3 to 5.
110 $ref: /schemas/types.yaml#/definitions/uint32
116 st,adc-channel-types:
118 Single-ended channel input type.
119 - "SPI_R": SPI with data on rising edge (default)
120 - "SPI_F": SPI with data on falling edge
121 - "MANCH_R": manchester codec, rising edge = logic 0, falling edge = logic 1
122 - "MANCH_F": manchester codec, rising edge = logic 1, falling edge = logic 0
124 enum: [ SPI_R, SPI_F, MANCH_R, MANCH_F ]
125 $ref: /schemas/types.yaml#/definitions/non-unique-string-array
127 st,adc-channel-clk-src:
129 Conversion clock source.
130 - "CLKIN": external SPI clock (CLKIN x)
131 - "CLKOUT": internal SPI clock (CLKOUT) (default)
132 - "CLKOUT_F": internal SPI clock divided by 2 (falling edge).
133 - "CLKOUT_R": internal SPI clock divided by 2 (rising edge).
135 enum: [ CLKIN, CLKOUT, CLKOUT_F, CLKOUT_R ]
136 $ref: /schemas/types.yaml#/definitions/non-unique-string-array
140 Must be defined if two sigma delta modulators are
141 connected on same SPI input.
142 If not set, channel n is connected to SPI input n.
143 If set, channel n is connected to SPI input n + 1.
148 Set to 1 to synchronize with DFSDM filter instance 0.
149 Used for multi microphones synchronization.
164 - st,adc-channel-names
166 - "#io-channel-cells"
173 const: st,stm32-dfsdm-adc
181 st,adc-channel-names:
185 st,adc-channel-types:
189 st,adc-channel-clk-src:
195 From common IIO binding. Used to pipe external sigma delta
196 modulator or internal ADC output to DFSDM channel.
205 const: st,stm32-dfsdm-dmic
212 st,adc-channel-names:
215 st,adc-channel-types:
218 st,adc-channel-clk-src:
228 description: child node
233 - st,stm32h7-dfsdm-dai
240 From common IIO binding. Used to pipe external sigma delta
241 modulator or internal ADC output to DFSDM channel.
253 const: st,stm32h7-dfsdm
268 const: st,stm32mp1-dfsdm
281 #include <dt-bindings/interrupt-controller/arm-gic.h>
282 #include <dt-bindings/clock/stm32mp1-clks.h>
283 dfsdm: dfsdm@4400d000 {
284 compatible = "st,stm32mp1-dfsdm";
285 reg = <0x4400d000 0x800>;
286 clocks = <&rcc DFSDM_K>, <&rcc ADFSDM_K>;
287 clock-names = "dfsdm", "audio";
288 #address-cells = <1>;
292 compatible = "st,stm32-dfsdm-dmic";
294 interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>;
295 dmas = <&dmamux1 101 0x400 0x01>;
297 #io-channel-cells = <1>;
298 st,adc-channels = <1>;
299 st,adc-channel-names = "dmic0";
300 st,adc-channel-types = "SPI_R";
301 st,adc-channel-clk-src = "CLKOUT";
302 st,filter-order = <5>;
304 asoc_pdm0: dfsdm-dai {
305 compatible = "st,stm32h7-dfsdm-dai";
306 #sound-dai-cells = <0>;
307 io-channels = <&dfsdm0 0>;
311 dfsdm_pdm1: filter@1 {
312 compatible = "st,stm32-dfsdm-adc";
314 interrupts = <GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH>;
315 dmas = <&dmamux1 102 0x400 0x01>;
317 #io-channel-cells = <1>;
318 st,adc-channels = <2 3>;
319 st,adc-channel-names = "in2", "in3";
320 st,adc-channel-types = "SPI_R", "SPI_R";
321 st,adc-channel-clk-src = "CLKOUT_F", "CLKOUT_F";
322 io-channels = <&sd_adc2 &sd_adc3>;
323 st,filter-order = <1>;