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 106 st,adc-channel-names: 107 description: List of single-ended channel names. 108 109 st,filter-order: 110 description: | 111 SinC filter order from 0 to 5. 112 - 0: FastSinC 113 - [1-5]: order 1 to 5. 114 For audio purpose it is recommended to use order 3 to 5. 115 $ref: /schemas/types.yaml#/definitions/uint32 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 additionalProperties: false 234 description: child node 235 236 properties: 237 compatible: 238 enum: 239 - st,stm32h7-dfsdm-dai 240 241 "#sound-dai-cells": 242 const: 0 243 244 io-channels: 245 description: 246 From common IIO binding. Used to pipe external sigma delta 247 modulator or internal ADC output to DFSDM channel. 248 249 required: 250 - compatible 251 - "#sound-dai-cells" 252 - io-channels 253 254allOf: 255 - if: 256 properties: 257 compatible: 258 contains: 259 const: st,stm32h7-dfsdm 260 261 then: 262 patternProperties: 263 "^filter@[0-9]+$": 264 properties: 265 reg: 266 items: 267 minimum: 0 268 maximum: 3 269 270 - if: 271 properties: 272 compatible: 273 contains: 274 const: st,stm32mp1-dfsdm 275 276 then: 277 patternProperties: 278 "^filter@[0-9]+$": 279 properties: 280 reg: 281 items: 282 minimum: 0 283 maximum: 5 284 285examples: 286 - | 287 #include <dt-bindings/interrupt-controller/arm-gic.h> 288 #include <dt-bindings/clock/stm32mp1-clks.h> 289 dfsdm: dfsdm@4400d000 { 290 compatible = "st,stm32mp1-dfsdm"; 291 reg = <0x4400d000 0x800>; 292 clocks = <&rcc DFSDM_K>, <&rcc ADFSDM_K>; 293 clock-names = "dfsdm", "audio"; 294 #address-cells = <1>; 295 #size-cells = <0>; 296 297 dfsdm0: filter@0 { 298 compatible = "st,stm32-dfsdm-dmic"; 299 reg = <0>; 300 interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>; 301 dmas = <&dmamux1 101 0x400 0x01>; 302 dma-names = "rx"; 303 #io-channel-cells = <1>; 304 st,adc-channels = <1>; 305 st,adc-channel-names = "dmic0"; 306 st,adc-channel-types = "SPI_R"; 307 st,adc-channel-clk-src = "CLKOUT"; 308 st,filter-order = <5>; 309 310 asoc_pdm0: dfsdm-dai { 311 compatible = "st,stm32h7-dfsdm-dai"; 312 #sound-dai-cells = <0>; 313 io-channels = <&dfsdm0 0>; 314 }; 315 }; 316 317 dfsdm_pdm1: filter@1 { 318 compatible = "st,stm32-dfsdm-adc"; 319 reg = <1>; 320 interrupts = <GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH>; 321 dmas = <&dmamux1 102 0x400 0x01>; 322 dma-names = "rx"; 323 #io-channel-cells = <1>; 324 st,adc-channels = <2 3>; 325 st,adc-channel-names = "in2", "in3"; 326 st,adc-channel-types = "SPI_R", "SPI_R"; 327 st,adc-channel-clk-src = "CLKOUT_F", "CLKOUT_F"; 328 io-channels = <&sd_adc2 &sd_adc3>; 329 st,filter-order = <1>; 330 }; 331 }; 332 333... 334