162306a36Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 262306a36Sopenharmony_ci%YAML 1.2 362306a36Sopenharmony_ci--- 462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/iio/adc/st,stm32-dfsdm-adc.yaml# 562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml# 662306a36Sopenharmony_ci 762306a36Sopenharmony_cititle: STMicroelectronics STM32 DFSDM ADC device driver 862306a36Sopenharmony_ci 962306a36Sopenharmony_cimaintainers: 1062306a36Sopenharmony_ci - Fabrice Gasnier <fabrice.gasnier@foss.st.com> 1162306a36Sopenharmony_ci - Olivier Moysan <olivier.moysan@foss.st.com> 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_cidescription: | 1462306a36Sopenharmony_ci STM32 DFSDM ADC is a sigma delta analog-to-digital converter dedicated to 1562306a36Sopenharmony_ci interface external sigma delta modulators to STM32 micro controllers. 1662306a36Sopenharmony_ci It is mainly targeted for: 1762306a36Sopenharmony_ci - Sigma delta modulators (motor control, metering...) 1862306a36Sopenharmony_ci - PDM microphones (audio digital microphone) 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci It features up to 8 serial digital interfaces (SPI or Manchester) and 2162306a36Sopenharmony_ci up to 4 filters on stm32h7 or 6 filters on stm32mp1. 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci Each child node matches with a filter instance. 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ciproperties: 2662306a36Sopenharmony_ci compatible: 2762306a36Sopenharmony_ci enum: 2862306a36Sopenharmony_ci - st,stm32h7-dfsdm 2962306a36Sopenharmony_ci - st,stm32mp1-dfsdm 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci reg: 3262306a36Sopenharmony_ci maxItems: 1 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci clocks: 3562306a36Sopenharmony_ci items: 3662306a36Sopenharmony_ci - description: 3762306a36Sopenharmony_ci Internal clock used for DFSDM digital processing and control blocks. 3862306a36Sopenharmony_ci dfsdm clock can also feed CLKOUT, when CLKOUT is used. 3962306a36Sopenharmony_ci - description: audio clock can be used as an alternate to feed CLKOUT. 4062306a36Sopenharmony_ci minItems: 1 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci clock-names: 4362306a36Sopenharmony_ci items: 4462306a36Sopenharmony_ci - const: dfsdm 4562306a36Sopenharmony_ci - const: audio 4662306a36Sopenharmony_ci minItems: 1 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci "#address-cells": 4962306a36Sopenharmony_ci const: 1 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ci "#size-cells": 5262306a36Sopenharmony_ci const: 0 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci spi-max-frequency: 5562306a36Sopenharmony_ci description: 5662306a36Sopenharmony_ci SPI clock OUT frequency (Hz). Requested only for SPI master mode. 5762306a36Sopenharmony_ci This clock must be set according to the "clock" property. 5862306a36Sopenharmony_ci Frequency must be a multiple of the rcc clock frequency. 5962306a36Sopenharmony_ci If not, SPI CLKOUT frequency will not be accurate. 6062306a36Sopenharmony_ci maximum: 20000000 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_cirequired: 6362306a36Sopenharmony_ci - compatible 6462306a36Sopenharmony_ci - reg 6562306a36Sopenharmony_ci - clocks 6662306a36Sopenharmony_ci - clock-names 6762306a36Sopenharmony_ci - "#address-cells" 6862306a36Sopenharmony_ci - "#size-cells" 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ciadditionalProperties: false 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_cipatternProperties: 7362306a36Sopenharmony_ci "^filter@[0-9]+$": 7462306a36Sopenharmony_ci type: object 7562306a36Sopenharmony_ci unevaluatedProperties: false 7662306a36Sopenharmony_ci description: child node 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ci properties: 7962306a36Sopenharmony_ci compatible: 8062306a36Sopenharmony_ci enum: 8162306a36Sopenharmony_ci - st,stm32-dfsdm-adc 8262306a36Sopenharmony_ci - st,stm32-dfsdm-dmic 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_ci reg: 8562306a36Sopenharmony_ci description: Specifies the DFSDM filter instance used. 8662306a36Sopenharmony_ci maxItems: 1 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ci interrupts: 8962306a36Sopenharmony_ci maxItems: 1 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci st,adc-channels: 9262306a36Sopenharmony_ci description: | 9362306a36Sopenharmony_ci List of single-ended channels muxed for this ADC. 9462306a36Sopenharmony_ci On stm32h7 and stm32mp1: 9562306a36Sopenharmony_ci - For st,stm32-dfsdm-adc: up to 8 channels numbered from 0 to 7. 9662306a36Sopenharmony_ci - For st,stm32-dfsdm-dmic: 1 channel numbered from 0 to 7. 9762306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/uint32-array 9862306a36Sopenharmony_ci items: 9962306a36Sopenharmony_ci minimum: 0 10062306a36Sopenharmony_ci maximum: 7 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_ci st,adc-channel-names: 10362306a36Sopenharmony_ci description: List of single-ended channel names. 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ci st,filter-order: 10662306a36Sopenharmony_ci description: | 10762306a36Sopenharmony_ci SinC filter order from 0 to 5. 10862306a36Sopenharmony_ci - 0: FastSinC 10962306a36Sopenharmony_ci - [1-5]: order 1 to 5. 11062306a36Sopenharmony_ci For audio purpose it is recommended to use order 3 to 5. 11162306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/uint32 11262306a36Sopenharmony_ci maximum: 5 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ci "#io-channel-cells": 11562306a36Sopenharmony_ci const: 1 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_ci st,adc-channel-types: 11862306a36Sopenharmony_ci description: | 11962306a36Sopenharmony_ci Single-ended channel input type. 12062306a36Sopenharmony_ci - "SPI_R": SPI with data on rising edge (default) 12162306a36Sopenharmony_ci - "SPI_F": SPI with data on falling edge 12262306a36Sopenharmony_ci - "MANCH_R": manchester codec, rising edge = logic 0, falling edge = logic 1 12362306a36Sopenharmony_ci - "MANCH_F": manchester codec, rising edge = logic 1, falling edge = logic 0 12462306a36Sopenharmony_ci items: 12562306a36Sopenharmony_ci enum: [ SPI_R, SPI_F, MANCH_R, MANCH_F ] 12662306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/non-unique-string-array 12762306a36Sopenharmony_ci 12862306a36Sopenharmony_ci st,adc-channel-clk-src: 12962306a36Sopenharmony_ci description: | 13062306a36Sopenharmony_ci Conversion clock source. 13162306a36Sopenharmony_ci - "CLKIN": external SPI clock (CLKIN x) 13262306a36Sopenharmony_ci - "CLKOUT": internal SPI clock (CLKOUT) (default) 13362306a36Sopenharmony_ci - "CLKOUT_F": internal SPI clock divided by 2 (falling edge). 13462306a36Sopenharmony_ci - "CLKOUT_R": internal SPI clock divided by 2 (rising edge). 13562306a36Sopenharmony_ci items: 13662306a36Sopenharmony_ci enum: [ CLKIN, CLKOUT, CLKOUT_F, CLKOUT_R ] 13762306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/non-unique-string-array 13862306a36Sopenharmony_ci 13962306a36Sopenharmony_ci st,adc-alt-channel: 14062306a36Sopenharmony_ci description: 14162306a36Sopenharmony_ci Must be defined if two sigma delta modulators are 14262306a36Sopenharmony_ci connected on same SPI input. 14362306a36Sopenharmony_ci If not set, channel n is connected to SPI input n. 14462306a36Sopenharmony_ci If set, channel n is connected to SPI input n + 1. 14562306a36Sopenharmony_ci type: boolean 14662306a36Sopenharmony_ci 14762306a36Sopenharmony_ci st,filter0-sync: 14862306a36Sopenharmony_ci description: 14962306a36Sopenharmony_ci Set to 1 to synchronize with DFSDM filter instance 0. 15062306a36Sopenharmony_ci Used for multi microphones synchronization. 15162306a36Sopenharmony_ci type: boolean 15262306a36Sopenharmony_ci 15362306a36Sopenharmony_ci dmas: 15462306a36Sopenharmony_ci maxItems: 1 15562306a36Sopenharmony_ci 15662306a36Sopenharmony_ci dma-names: 15762306a36Sopenharmony_ci items: 15862306a36Sopenharmony_ci - const: rx 15962306a36Sopenharmony_ci 16062306a36Sopenharmony_ci required: 16162306a36Sopenharmony_ci - compatible 16262306a36Sopenharmony_ci - reg 16362306a36Sopenharmony_ci - interrupts 16462306a36Sopenharmony_ci - st,adc-channels 16562306a36Sopenharmony_ci - st,adc-channel-names 16662306a36Sopenharmony_ci - st,filter-order 16762306a36Sopenharmony_ci - "#io-channel-cells" 16862306a36Sopenharmony_ci 16962306a36Sopenharmony_ci allOf: 17062306a36Sopenharmony_ci - if: 17162306a36Sopenharmony_ci properties: 17262306a36Sopenharmony_ci compatible: 17362306a36Sopenharmony_ci contains: 17462306a36Sopenharmony_ci const: st,stm32-dfsdm-adc 17562306a36Sopenharmony_ci 17662306a36Sopenharmony_ci then: 17762306a36Sopenharmony_ci properties: 17862306a36Sopenharmony_ci st,adc-channels: 17962306a36Sopenharmony_ci minItems: 1 18062306a36Sopenharmony_ci maxItems: 8 18162306a36Sopenharmony_ci 18262306a36Sopenharmony_ci st,adc-channel-names: 18362306a36Sopenharmony_ci minItems: 1 18462306a36Sopenharmony_ci maxItems: 8 18562306a36Sopenharmony_ci 18662306a36Sopenharmony_ci st,adc-channel-types: 18762306a36Sopenharmony_ci minItems: 1 18862306a36Sopenharmony_ci maxItems: 8 18962306a36Sopenharmony_ci 19062306a36Sopenharmony_ci st,adc-channel-clk-src: 19162306a36Sopenharmony_ci minItems: 1 19262306a36Sopenharmony_ci maxItems: 8 19362306a36Sopenharmony_ci 19462306a36Sopenharmony_ci io-channels: 19562306a36Sopenharmony_ci description: 19662306a36Sopenharmony_ci From common IIO binding. Used to pipe external sigma delta 19762306a36Sopenharmony_ci modulator or internal ADC output to DFSDM channel. 19862306a36Sopenharmony_ci 19962306a36Sopenharmony_ci required: 20062306a36Sopenharmony_ci - io-channels 20162306a36Sopenharmony_ci 20262306a36Sopenharmony_ci - if: 20362306a36Sopenharmony_ci properties: 20462306a36Sopenharmony_ci compatible: 20562306a36Sopenharmony_ci contains: 20662306a36Sopenharmony_ci const: st,stm32-dfsdm-dmic 20762306a36Sopenharmony_ci 20862306a36Sopenharmony_ci then: 20962306a36Sopenharmony_ci properties: 21062306a36Sopenharmony_ci st,adc-channels: 21162306a36Sopenharmony_ci maxItems: 1 21262306a36Sopenharmony_ci 21362306a36Sopenharmony_ci st,adc-channel-names: 21462306a36Sopenharmony_ci maxItems: 1 21562306a36Sopenharmony_ci 21662306a36Sopenharmony_ci st,adc-channel-types: 21762306a36Sopenharmony_ci maxItems: 1 21862306a36Sopenharmony_ci 21962306a36Sopenharmony_ci st,adc-channel-clk-src: 22062306a36Sopenharmony_ci maxItems: 1 22162306a36Sopenharmony_ci 22262306a36Sopenharmony_ci required: 22362306a36Sopenharmony_ci - dmas 22462306a36Sopenharmony_ci - dma-names 22562306a36Sopenharmony_ci 22662306a36Sopenharmony_ci patternProperties: 22762306a36Sopenharmony_ci "^dfsdm-dai+$": 22862306a36Sopenharmony_ci type: object 22962306a36Sopenharmony_ci additionalProperties: false 23062306a36Sopenharmony_ci description: child node 23162306a36Sopenharmony_ci 23262306a36Sopenharmony_ci properties: 23362306a36Sopenharmony_ci compatible: 23462306a36Sopenharmony_ci enum: 23562306a36Sopenharmony_ci - st,stm32h7-dfsdm-dai 23662306a36Sopenharmony_ci 23762306a36Sopenharmony_ci "#sound-dai-cells": 23862306a36Sopenharmony_ci const: 0 23962306a36Sopenharmony_ci 24062306a36Sopenharmony_ci io-channels: 24162306a36Sopenharmony_ci description: 24262306a36Sopenharmony_ci From common IIO binding. Used to pipe external sigma delta 24362306a36Sopenharmony_ci modulator or internal ADC output to DFSDM channel. 24462306a36Sopenharmony_ci 24562306a36Sopenharmony_ci required: 24662306a36Sopenharmony_ci - compatible 24762306a36Sopenharmony_ci - "#sound-dai-cells" 24862306a36Sopenharmony_ci - io-channels 24962306a36Sopenharmony_ci 25062306a36Sopenharmony_ciallOf: 25162306a36Sopenharmony_ci - if: 25262306a36Sopenharmony_ci properties: 25362306a36Sopenharmony_ci compatible: 25462306a36Sopenharmony_ci contains: 25562306a36Sopenharmony_ci const: st,stm32h7-dfsdm 25662306a36Sopenharmony_ci 25762306a36Sopenharmony_ci then: 25862306a36Sopenharmony_ci patternProperties: 25962306a36Sopenharmony_ci "^filter@[0-9]+$": 26062306a36Sopenharmony_ci properties: 26162306a36Sopenharmony_ci reg: 26262306a36Sopenharmony_ci items: 26362306a36Sopenharmony_ci minimum: 0 26462306a36Sopenharmony_ci maximum: 3 26562306a36Sopenharmony_ci 26662306a36Sopenharmony_ci - if: 26762306a36Sopenharmony_ci properties: 26862306a36Sopenharmony_ci compatible: 26962306a36Sopenharmony_ci contains: 27062306a36Sopenharmony_ci const: st,stm32mp1-dfsdm 27162306a36Sopenharmony_ci 27262306a36Sopenharmony_ci then: 27362306a36Sopenharmony_ci patternProperties: 27462306a36Sopenharmony_ci "^filter@[0-9]+$": 27562306a36Sopenharmony_ci properties: 27662306a36Sopenharmony_ci reg: 27762306a36Sopenharmony_ci items: 27862306a36Sopenharmony_ci minimum: 0 27962306a36Sopenharmony_ci maximum: 5 28062306a36Sopenharmony_ci 28162306a36Sopenharmony_ciexamples: 28262306a36Sopenharmony_ci - | 28362306a36Sopenharmony_ci #include <dt-bindings/interrupt-controller/arm-gic.h> 28462306a36Sopenharmony_ci #include <dt-bindings/clock/stm32mp1-clks.h> 28562306a36Sopenharmony_ci dfsdm: dfsdm@4400d000 { 28662306a36Sopenharmony_ci compatible = "st,stm32mp1-dfsdm"; 28762306a36Sopenharmony_ci reg = <0x4400d000 0x800>; 28862306a36Sopenharmony_ci clocks = <&rcc DFSDM_K>, <&rcc ADFSDM_K>; 28962306a36Sopenharmony_ci clock-names = "dfsdm", "audio"; 29062306a36Sopenharmony_ci #address-cells = <1>; 29162306a36Sopenharmony_ci #size-cells = <0>; 29262306a36Sopenharmony_ci 29362306a36Sopenharmony_ci dfsdm0: filter@0 { 29462306a36Sopenharmony_ci compatible = "st,stm32-dfsdm-dmic"; 29562306a36Sopenharmony_ci reg = <0>; 29662306a36Sopenharmony_ci interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>; 29762306a36Sopenharmony_ci dmas = <&dmamux1 101 0x400 0x01>; 29862306a36Sopenharmony_ci dma-names = "rx"; 29962306a36Sopenharmony_ci #io-channel-cells = <1>; 30062306a36Sopenharmony_ci st,adc-channels = <1>; 30162306a36Sopenharmony_ci st,adc-channel-names = "dmic0"; 30262306a36Sopenharmony_ci st,adc-channel-types = "SPI_R"; 30362306a36Sopenharmony_ci st,adc-channel-clk-src = "CLKOUT"; 30462306a36Sopenharmony_ci st,filter-order = <5>; 30562306a36Sopenharmony_ci 30662306a36Sopenharmony_ci asoc_pdm0: dfsdm-dai { 30762306a36Sopenharmony_ci compatible = "st,stm32h7-dfsdm-dai"; 30862306a36Sopenharmony_ci #sound-dai-cells = <0>; 30962306a36Sopenharmony_ci io-channels = <&dfsdm0 0>; 31062306a36Sopenharmony_ci }; 31162306a36Sopenharmony_ci }; 31262306a36Sopenharmony_ci 31362306a36Sopenharmony_ci dfsdm_pdm1: filter@1 { 31462306a36Sopenharmony_ci compatible = "st,stm32-dfsdm-adc"; 31562306a36Sopenharmony_ci reg = <1>; 31662306a36Sopenharmony_ci interrupts = <GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH>; 31762306a36Sopenharmony_ci dmas = <&dmamux1 102 0x400 0x01>; 31862306a36Sopenharmony_ci dma-names = "rx"; 31962306a36Sopenharmony_ci #io-channel-cells = <1>; 32062306a36Sopenharmony_ci st,adc-channels = <2 3>; 32162306a36Sopenharmony_ci st,adc-channel-names = "in2", "in3"; 32262306a36Sopenharmony_ci st,adc-channel-types = "SPI_R", "SPI_R"; 32362306a36Sopenharmony_ci st,adc-channel-clk-src = "CLKOUT_F", "CLKOUT_F"; 32462306a36Sopenharmony_ci io-channels = <&sd_adc2 &sd_adc3>; 32562306a36Sopenharmony_ci st,filter-order = <1>; 32662306a36Sopenharmony_ci }; 32762306a36Sopenharmony_ci }; 32862306a36Sopenharmony_ci 32962306a36Sopenharmony_ci... 330