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@foss.st.com> 11 - Olivier Moysan <olivier.moysan@foss.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 42 clock-names: 43 items: 44 - const: dfsdm 45 - const: audio 46 minItems: 1 47 48 "#address-cells": 49 const: 1 50 51 "#size-cells": 52 const: 0 53 54 spi-max-frequency: 55 description: 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. 60 maximum: 20000000 61 62 access-controllers: 63 minItems: 1 64 maxItems: 2 65 66required: 67 - compatible 68 - reg 69 - clocks 70 - clock-names 71 - "#address-cells" 72 - "#size-cells" 73 74additionalProperties: false 75 76patternProperties: 77 "^filter@[0-9]+$": 78 type: object 79 unevaluatedProperties: false 80 description: child node 81 82 properties: 83 compatible: 84 enum: 85 - st,stm32-dfsdm-adc 86 - st,stm32-dfsdm-dmic 87 88 reg: 89 description: Specifies the DFSDM filter instance used. 90 maxItems: 1 91 92 interrupts: 93 maxItems: 1 94 95 st,adc-channels: 96 description: | 97 List of single-ended channels muxed for this ADC. 98 On stm32h7 and stm32mp1: 99 - For st,stm32-dfsdm-adc: up to 8 channels numbered from 0 to 7. 100 - For st,stm32-dfsdm-dmic: 1 channel numbered from 0 to 7. 101 $ref: /schemas/types.yaml#/definitions/uint32-array 102 items: 103 minimum: 0 104 maximum: 7 105 deprecated: true 106 107 st,adc-channel-names: 108 description: List of single-ended channel names. 109 deprecated: true 110 111 st,filter-order: 112 description: | 113 SinC filter order from 0 to 5. 114 - 0: FastSinC 115 - [1-5]: order 1 to 5. 116 For audio purpose it is recommended to use order 3 to 5. 117 $ref: /schemas/types.yaml#/definitions/uint32 118 maximum: 5 119 120 "#io-channel-cells": 121 const: 1 122 123 '#address-cells': 124 const: 1 125 126 '#size-cells': 127 const: 0 128 129 st,adc-channel-types: 130 description: | 131 Single-ended channel input type. 132 - "SPI_R": SPI with data on rising edge (default) 133 - "SPI_F": SPI with data on falling edge 134 - "MANCH_R": manchester codec, rising edge = logic 0, falling edge = logic 1 135 - "MANCH_F": manchester codec, rising edge = logic 1, falling edge = logic 0 136 items: 137 enum: [ SPI_R, SPI_F, MANCH_R, MANCH_F ] 138 $ref: /schemas/types.yaml#/definitions/non-unique-string-array 139 deprecated: true 140 141 st,adc-channel-clk-src: 142 description: | 143 Conversion clock source. 144 - "CLKIN": external SPI clock (CLKIN x) 145 - "CLKOUT": internal SPI clock (CLKOUT) (default) 146 - "CLKOUT_F": internal SPI clock divided by 2 (falling edge). 147 - "CLKOUT_R": internal SPI clock divided by 2 (rising edge). 148 items: 149 enum: [ CLKIN, CLKOUT, CLKOUT_F, CLKOUT_R ] 150 $ref: /schemas/types.yaml#/definitions/non-unique-string-array 151 deprecated: true 152 153 st,adc-alt-channel: 154 description: 155 Must be defined if two sigma delta modulators are 156 connected on same SPI input. 157 If not set, channel n is connected to SPI input n. 158 If set, channel n is connected to SPI input n + 1. 159 type: boolean 160 deprecated: true 161 162 st,filter0-sync: 163 description: 164 Set to 1 to synchronize with DFSDM filter instance 0. 165 Used for multi microphones synchronization. 166 type: boolean 167 168 dmas: 169 maxItems: 1 170 171 dma-names: 172 items: 173 - const: rx 174 175 required: 176 - compatible 177 - reg 178 - interrupts 179 - st,filter-order 180 - "#io-channel-cells" 181 182 patternProperties: 183 "^channel@[0-7]$": 184 type: object 185 $ref: adc.yaml 186 unevaluatedProperties: false 187 description: Represents the external channels which are connected to the DFSDM. 188 189 properties: 190 reg: 191 maximum: 7 192 193 label: 194 description: 195 Unique name to identify which channel this is. 196 197 st,adc-channel-type: 198 description: | 199 Single-ended channel input type. 200 - "SPI_R": SPI with data on rising edge (default) 201 - "SPI_F": SPI with data on falling edge 202 - "MANCH_R": manchester codec, rising edge = logic 0, falling edge = logic 1 203 - "MANCH_F": manchester codec, rising edge = logic 1, falling edge = logic 0 204 $ref: /schemas/types.yaml#/definitions/string 205 enum: [ SPI_R, SPI_F, MANCH_R, MANCH_F ] 206 207 st,adc-channel-clk-src: 208 description: | 209 Conversion clock source. 210 - "CLKIN": external SPI clock (CLKIN x) 211 - "CLKOUT": internal SPI clock (CLKOUT) (default) 212 - "CLKOUT_F": internal SPI clock divided by 2 (falling edge). 213 - "CLKOUT_R": internal SPI clock divided by 2 (rising edge). 214 $ref: /schemas/types.yaml#/definitions/string 215 enum: [ CLKIN, CLKOUT, CLKOUT_F, CLKOUT_R ] 216 217 st,adc-alt-channel: 218 description: 219 Must be defined if two sigma delta modulators are 220 connected on same SPI input. 221 If not set, channel n is connected to SPI input n. 222 If set, channel n is connected to SPI input n + 1. 223 type: boolean 224 225 io-backends: 226 description: 227 Used to pipe external sigma delta modulator or internal ADC backend to DFSDM channel. 228 maxItems: 1 229 230 required: 231 - reg 232 233 allOf: 234 - if: 235 properties: 236 compatible: 237 contains: 238 const: st,stm32-dfsdm-adc 239 240 then: 241 properties: 242 st,adc-channels: 243 minItems: 1 244 maxItems: 8 245 246 st,adc-channel-names: 247 minItems: 1 248 maxItems: 8 249 250 st,adc-channel-types: 251 minItems: 1 252 maxItems: 8 253 254 st,adc-channel-clk-src: 255 minItems: 1 256 maxItems: 8 257 258 io-channels: 259 description: 260 From common IIO binding. Used to pipe external sigma delta 261 modulator or internal ADC output to DFSDM channel. 262 deprecated: true 263 264 if: 265 required: 266 - st,adc-channels 267 then: 268 required: 269 - io-channels 270 271 patternProperties: 272 "^channel@[0-7]$": 273 required: 274 - io-backends 275 276 - if: 277 properties: 278 compatible: 279 contains: 280 const: st,stm32-dfsdm-dmic 281 282 then: 283 properties: 284 st,adc-channels: 285 maxItems: 1 286 287 st,adc-channel-names: 288 maxItems: 1 289 290 st,adc-channel-types: 291 maxItems: 1 292 293 st,adc-channel-clk-src: 294 maxItems: 1 295 296 required: 297 - dmas 298 - dma-names 299 300 patternProperties: 301 "^dfsdm-dai+$": 302 type: object 303 additionalProperties: false 304 description: child node 305 306 properties: 307 compatible: 308 enum: 309 - st,stm32h7-dfsdm-dai 310 311 "#sound-dai-cells": 312 const: 0 313 314 io-channels: 315 description: 316 From common IIO binding. Used to pipe external sigma delta 317 modulator or internal ADC output to DFSDM channel. 318 319 port: 320 $ref: /schemas/sound/audio-graph-port.yaml# 321 unevaluatedProperties: false 322 323 required: 324 - compatible 325 - "#sound-dai-cells" 326 - io-channels 327 328allOf: 329 - if: 330 properties: 331 compatible: 332 contains: 333 const: st,stm32h7-dfsdm 334 335 then: 336 patternProperties: 337 "^filter@[0-9]+$": 338 properties: 339 reg: 340 items: 341 minimum: 0 342 maximum: 3 343 344 - if: 345 properties: 346 compatible: 347 contains: 348 const: st,stm32mp1-dfsdm 349 350 then: 351 patternProperties: 352 "^filter@[0-9]+$": 353 properties: 354 reg: 355 items: 356 minimum: 0 357 maximum: 5 358 359examples: 360 - | 361 #include <dt-bindings/interrupt-controller/arm-gic.h> 362 #include <dt-bindings/clock/stm32mp1-clks.h> 363 dfsdm: dfsdm@4400d000 { 364 compatible = "st,stm32mp1-dfsdm"; 365 reg = <0x4400d000 0x800>; 366 clocks = <&rcc DFSDM_K>, <&rcc ADFSDM_K>; 367 clock-names = "dfsdm", "audio"; 368 #address-cells = <1>; 369 #size-cells = <0>; 370 371 // Example 1: Audio use case with generic binding 372 dfsdm0: filter@0 { 373 compatible = "st,stm32-dfsdm-dmic"; 374 reg = <0>; 375 interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>; 376 dmas = <&dmamux1 101 0x400 0x01>; 377 dma-names = "rx"; 378 #io-channel-cells = <1>; 379 #address-cells = <1>; 380 #size-cells = <0>; 381 st,filter-order = <5>; 382 383 channel@1 { 384 reg = <1>; 385 label = "dmic0"; 386 st,adc-channel-type = "SPI_R"; 387 st,adc-channel-clk-src = "CLKOUT"; 388 st,adc-alt-channel; 389 }; 390 391 asoc_pdm0: dfsdm-dai { 392 compatible = "st,stm32h7-dfsdm-dai"; 393 #sound-dai-cells = <0>; 394 io-channels = <&dfsdm0 0>; 395 }; 396 }; 397 398 // Example 2: Analog use case with generic binding 399 dfsdm1: filter@1 { 400 compatible = "st,stm32-dfsdm-adc"; 401 reg = <1>; 402 interrupts = <GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH>; 403 dmas = <&dmamux1 102 0x400 0x01>; 404 dma-names = "rx"; 405 st,filter-order = <1>; 406 #io-channel-cells = <1>; 407 #address-cells = <1>; 408 #size-cells = <0>; 409 410 channel@2 { 411 reg = <2>; 412 label = "in2"; 413 st,adc-channel-type = "SPI_F"; 414 st,adc-channel-clk-src = "CLKOUT"; 415 st,adc-alt-channel; 416 io-backends = <&sd_adc2>; 417 }; 418 419 channel@3 { 420 reg = <3>; 421 label = "in3"; 422 st,adc-channel-type = "SPI_R"; 423 st,adc-channel-clk-src = "CLKOUT"; 424 io-backends = <&sd_adc3>; 425 }; 426 }; 427 }; 428 429... 430