1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2%YAML 1.2 3--- 4$id: http://devicetree.org/schemas/iio/adc/st,stm32-dfsdm-adc.yaml# 5$schema: http://devicetree.org/meta-schemas/core.yaml# 6 7title: STMicroelectronics STM32 DFSDM ADC device driver 8 9maintainers: 10 - Fabrice Gasnier <fabrice.gasnier@st.com> 11 - Olivier Moysan <olivier.moysan@st.com> 12 13description: | 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) 19 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. 22 23 Each child node matches with a filter instance. 24 25properties: 26 compatible: 27 enum: 28 - st,stm32h7-dfsdm 29 - st,stm32mp1-dfsdm 30 31 reg: 32 maxItems: 1 33 34 clocks: 35 items: 36 - description: 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. 40 minItems: 1 41 maxItems: 2 42 43 clock-names: 44 items: 45 - const: dfsdm 46 - const: audio 47 minItems: 1 48 maxItems: 2 49 50 "#address-cells": 51 const: 1 52 53 "#size-cells": 54 const: 0 55 56 spi-max-frequency: 57 description: 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. 62 maximum: 20000000 63 64required: 65 - compatible 66 - reg 67 - clocks 68 - clock-names 69 - "#address-cells" 70 - "#size-cells" 71 72additionalProperties: false 73 74patternProperties: 75 "^filter@[0-9]+$": 76 type: object 77 description: child node 78 79 properties: 80 compatible: 81 enum: 82 - st,stm32-dfsdm-adc 83 - st,stm32-dfsdm-dmic 84 85 reg: 86 description: Specifies the DFSDM filter instance used. 87 maxItems: 1 88 89 interrupts: 90 maxItems: 1 91 92 st,adc-channels: 93 description: | 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. 98 $ref: /schemas/types.yaml#/definitions/uint32-array 99 items: 100 minimum: 0 101 maximum: 7 102 103 st,adc-channel-names: 104 description: List of single-ended channel names. 105 $ref: /schemas/types.yaml#/definitions/string-array 106 107 st,filter-order: 108 description: | 109 SinC filter order from 0 to 5. 110 - 0: FastSinC 111 - [1-5]: order 1 to 5. 112 For audio purpose it is recommended to use order 3 to 5. 113 $ref: /schemas/types.yaml#/definitions/uint32 114 items: 115 minimum: 0 116 maximum: 5 117 118 "#io-channel-cells": 119 const: 1 120 121 st,adc-channel-types: 122 description: | 123 Single-ended channel input type. 124 - "SPI_R": SPI with data on rising edge (default) 125 - "SPI_F": SPI with data on falling edge 126 - "MANCH_R": manchester codec, rising edge = logic 0, falling edge = logic 1 127 - "MANCH_F": manchester codec, rising edge = logic 1, falling edge = logic 0 128 items: 129 enum: [ SPI_R, SPI_F, MANCH_R, MANCH_F ] 130 $ref: /schemas/types.yaml#/definitions/non-unique-string-array 131 132 st,adc-channel-clk-src: 133 description: | 134 Conversion clock source. 135 - "CLKIN": external SPI clock (CLKIN x) 136 - "CLKOUT": internal SPI clock (CLKOUT) (default) 137 - "CLKOUT_F": internal SPI clock divided by 2 (falling edge). 138 - "CLKOUT_R": internal SPI clock divided by 2 (rising edge). 139 items: 140 enum: [ CLKIN, CLKOUT, CLKOUT_F, CLKOUT_R ] 141 $ref: /schemas/types.yaml#/definitions/non-unique-string-array 142 143 st,adc-alt-channel: 144 description: 145 Must be defined if two sigma delta modulators are 146 connected on same SPI input. 147 If not set, channel n is connected to SPI input n. 148 If set, channel n is connected to SPI input n + 1. 149 type: boolean 150 151 st,filter0-sync: 152 description: 153 Set to 1 to synchronize with DFSDM filter instance 0. 154 Used for multi microphones synchronization. 155 type: boolean 156 157 dmas: 158 maxItems: 1 159 160 dma-names: 161 items: 162 - const: rx 163 164 required: 165 - compatible 166 - reg 167 - interrupts 168 - st,adc-channels 169 - st,adc-channel-names 170 - st,filter-order 171 - "#io-channel-cells" 172 173 allOf: 174 - if: 175 properties: 176 compatible: 177 contains: 178 const: st,stm32-dfsdm-adc 179 180 - then: 181 properties: 182 st,adc-channels: 183 minItems: 1 184 maxItems: 8 185 186 st,adc-channel-names: 187 minItems: 1 188 maxItems: 8 189 190 st,adc-channel-types: 191 minItems: 1 192 maxItems: 8 193 194 st,adc-channel-clk-src: 195 minItems: 1 196 maxItems: 8 197 198 io-channels: 199 description: 200 From common IIO binding. Used to pipe external sigma delta 201 modulator or internal ADC output to DFSDM channel. 202 203 required: 204 - io-channels 205 206 - if: 207 properties: 208 compatible: 209 contains: 210 const: st,stm32-dfsdm-dmic 211 212 - then: 213 properties: 214 st,adc-channels: 215 maxItems: 1 216 217 st,adc-channel-names: 218 maxItems: 1 219 220 st,adc-channel-types: 221 maxItems: 1 222 223 st,adc-channel-clk-src: 224 maxItems: 1 225 226 required: 227 - dmas 228 - dma-names 229 230 patternProperties: 231 "^dfsdm-dai+$": 232 type: object 233 description: child node 234 235 properties: 236 compatible: 237 enum: 238 - st,stm32h7-dfsdm-dai 239 240 "#sound-dai-cells": 241 const: 0 242 243 io-channels: 244 description: 245 From common IIO binding. Used to pipe external sigma delta 246 modulator or internal ADC output to DFSDM channel. 247 248 required: 249 - compatible 250 - "#sound-dai-cells" 251 - io-channels 252 253allOf: 254 - if: 255 properties: 256 compatible: 257 contains: 258 const: st,stm32h7-dfsdm 259 260 - then: 261 patternProperties: 262 "^filter@[0-9]+$": 263 properties: 264 reg: 265 items: 266 minimum: 0 267 maximum: 3 268 269 - if: 270 properties: 271 compatible: 272 contains: 273 const: st,stm32mp1-dfsdm 274 275 - then: 276 patternProperties: 277 "^filter@[0-9]+$": 278 properties: 279 reg: 280 items: 281 minimum: 0 282 maximum: 5 283 284examples: 285 - | 286 #include <dt-bindings/interrupt-controller/arm-gic.h> 287 #include <dt-bindings/clock/stm32mp1-clks.h> 288 dfsdm: dfsdm@4400d000 { 289 compatible = "st,stm32mp1-dfsdm"; 290 reg = <0x4400d000 0x800>; 291 clocks = <&rcc DFSDM_K>, <&rcc ADFSDM_K>; 292 clock-names = "dfsdm", "audio"; 293 #address-cells = <1>; 294 #size-cells = <0>; 295 296 dfsdm0: filter@0 { 297 compatible = "st,stm32-dfsdm-dmic"; 298 reg = <0>; 299 interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>; 300 dmas = <&dmamux1 101 0x400 0x01>; 301 dma-names = "rx"; 302 #io-channel-cells = <1>; 303 st,adc-channels = <1>; 304 st,adc-channel-names = "dmic0"; 305 st,adc-channel-types = "SPI_R"; 306 st,adc-channel-clk-src = "CLKOUT"; 307 st,filter-order = <5>; 308 309 asoc_pdm0: dfsdm-dai { 310 compatible = "st,stm32h7-dfsdm-dai"; 311 #sound-dai-cells = <0>; 312 io-channels = <&dfsdm0 0>; 313 }; 314 }; 315 316 dfsdm_pdm1: filter@1 { 317 compatible = "st,stm32-dfsdm-adc"; 318 reg = <1>; 319 interrupts = <GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH>; 320 dmas = <&dmamux1 102 0x400 0x01>; 321 dma-names = "rx"; 322 #io-channel-cells = <1>; 323 st,adc-channels = <2 3>; 324 st,adc-channel-names = "in2", "in3"; 325 st,adc-channel-types = "SPI_R", "SPI_R"; 326 st,adc-channel-clk-src = "CLKOUT_F", "CLKOUT_F"; 327 io-channels = <&sd_adc2 &sd_adc3>; 328 st,filter-order = <1>; 329 }; 330 }; 331 332... 333