18c2ecf20Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 28c2ecf20Sopenharmony_ci%YAML 1.2 38c2ecf20Sopenharmony_ci--- 48c2ecf20Sopenharmony_ci$id: http://devicetree.org/schemas/iio/adc/st,stm32-dfsdm-adc.yaml# 58c2ecf20Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml# 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_cititle: STMicroelectronics STM32 DFSDM ADC device driver 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_cimaintainers: 108c2ecf20Sopenharmony_ci - Fabrice Gasnier <fabrice.gasnier@st.com> 118c2ecf20Sopenharmony_ci - Olivier Moysan <olivier.moysan@st.com> 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_cidescription: | 148c2ecf20Sopenharmony_ci STM32 DFSDM ADC is a sigma delta analog-to-digital converter dedicated to 158c2ecf20Sopenharmony_ci interface external sigma delta modulators to STM32 micro controllers. 168c2ecf20Sopenharmony_ci It is mainly targeted for: 178c2ecf20Sopenharmony_ci - Sigma delta modulators (motor control, metering...) 188c2ecf20Sopenharmony_ci - PDM microphones (audio digital microphone) 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ci It features up to 8 serial digital interfaces (SPI or Manchester) and 218c2ecf20Sopenharmony_ci up to 4 filters on stm32h7 or 6 filters on stm32mp1. 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_ci Each child node matches with a filter instance. 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_ciproperties: 268c2ecf20Sopenharmony_ci compatible: 278c2ecf20Sopenharmony_ci enum: 288c2ecf20Sopenharmony_ci - st,stm32h7-dfsdm 298c2ecf20Sopenharmony_ci - st,stm32mp1-dfsdm 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_ci reg: 328c2ecf20Sopenharmony_ci maxItems: 1 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_ci clocks: 358c2ecf20Sopenharmony_ci items: 368c2ecf20Sopenharmony_ci - description: 378c2ecf20Sopenharmony_ci Internal clock used for DFSDM digital processing and control blocks. 388c2ecf20Sopenharmony_ci dfsdm clock can also feed CLKOUT, when CLKOUT is used. 398c2ecf20Sopenharmony_ci - description: audio clock can be used as an alternate to feed CLKOUT. 408c2ecf20Sopenharmony_ci minItems: 1 418c2ecf20Sopenharmony_ci maxItems: 2 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_ci clock-names: 448c2ecf20Sopenharmony_ci items: 458c2ecf20Sopenharmony_ci - const: dfsdm 468c2ecf20Sopenharmony_ci - const: audio 478c2ecf20Sopenharmony_ci minItems: 1 488c2ecf20Sopenharmony_ci maxItems: 2 498c2ecf20Sopenharmony_ci 508c2ecf20Sopenharmony_ci "#address-cells": 518c2ecf20Sopenharmony_ci const: 1 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_ci "#size-cells": 548c2ecf20Sopenharmony_ci const: 0 558c2ecf20Sopenharmony_ci 568c2ecf20Sopenharmony_ci spi-max-frequency: 578c2ecf20Sopenharmony_ci description: 588c2ecf20Sopenharmony_ci SPI clock OUT frequency (Hz). Requested only for SPI master mode. 598c2ecf20Sopenharmony_ci This clock must be set according to the "clock" property. 608c2ecf20Sopenharmony_ci Frequency must be a multiple of the rcc clock frequency. 618c2ecf20Sopenharmony_ci If not, SPI CLKOUT frequency will not be accurate. 628c2ecf20Sopenharmony_ci maximum: 20000000 638c2ecf20Sopenharmony_ci 648c2ecf20Sopenharmony_cirequired: 658c2ecf20Sopenharmony_ci - compatible 668c2ecf20Sopenharmony_ci - reg 678c2ecf20Sopenharmony_ci - clocks 688c2ecf20Sopenharmony_ci - clock-names 698c2ecf20Sopenharmony_ci - "#address-cells" 708c2ecf20Sopenharmony_ci - "#size-cells" 718c2ecf20Sopenharmony_ci 728c2ecf20Sopenharmony_ciadditionalProperties: false 738c2ecf20Sopenharmony_ci 748c2ecf20Sopenharmony_cipatternProperties: 758c2ecf20Sopenharmony_ci "^filter@[0-9]+$": 768c2ecf20Sopenharmony_ci type: object 778c2ecf20Sopenharmony_ci description: child node 788c2ecf20Sopenharmony_ci 798c2ecf20Sopenharmony_ci properties: 808c2ecf20Sopenharmony_ci compatible: 818c2ecf20Sopenharmony_ci enum: 828c2ecf20Sopenharmony_ci - st,stm32-dfsdm-adc 838c2ecf20Sopenharmony_ci - st,stm32-dfsdm-dmic 848c2ecf20Sopenharmony_ci 858c2ecf20Sopenharmony_ci reg: 868c2ecf20Sopenharmony_ci description: Specifies the DFSDM filter instance used. 878c2ecf20Sopenharmony_ci maxItems: 1 888c2ecf20Sopenharmony_ci 898c2ecf20Sopenharmony_ci interrupts: 908c2ecf20Sopenharmony_ci maxItems: 1 918c2ecf20Sopenharmony_ci 928c2ecf20Sopenharmony_ci st,adc-channels: 938c2ecf20Sopenharmony_ci description: | 948c2ecf20Sopenharmony_ci List of single-ended channels muxed for this ADC. 958c2ecf20Sopenharmony_ci On stm32h7 and stm32mp1: 968c2ecf20Sopenharmony_ci - For st,stm32-dfsdm-adc: up to 8 channels numbered from 0 to 7. 978c2ecf20Sopenharmony_ci - For st,stm32-dfsdm-dmic: 1 channel numbered from 0 to 7. 988c2ecf20Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/uint32-array 998c2ecf20Sopenharmony_ci items: 1008c2ecf20Sopenharmony_ci minimum: 0 1018c2ecf20Sopenharmony_ci maximum: 7 1028c2ecf20Sopenharmony_ci 1038c2ecf20Sopenharmony_ci st,adc-channel-names: 1048c2ecf20Sopenharmony_ci description: List of single-ended channel names. 1058c2ecf20Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/string-array 1068c2ecf20Sopenharmony_ci 1078c2ecf20Sopenharmony_ci st,filter-order: 1088c2ecf20Sopenharmony_ci description: | 1098c2ecf20Sopenharmony_ci SinC filter order from 0 to 5. 1108c2ecf20Sopenharmony_ci - 0: FastSinC 1118c2ecf20Sopenharmony_ci - [1-5]: order 1 to 5. 1128c2ecf20Sopenharmony_ci For audio purpose it is recommended to use order 3 to 5. 1138c2ecf20Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/uint32 1148c2ecf20Sopenharmony_ci items: 1158c2ecf20Sopenharmony_ci minimum: 0 1168c2ecf20Sopenharmony_ci maximum: 5 1178c2ecf20Sopenharmony_ci 1188c2ecf20Sopenharmony_ci "#io-channel-cells": 1198c2ecf20Sopenharmony_ci const: 1 1208c2ecf20Sopenharmony_ci 1218c2ecf20Sopenharmony_ci st,adc-channel-types: 1228c2ecf20Sopenharmony_ci description: | 1238c2ecf20Sopenharmony_ci Single-ended channel input type. 1248c2ecf20Sopenharmony_ci - "SPI_R": SPI with data on rising edge (default) 1258c2ecf20Sopenharmony_ci - "SPI_F": SPI with data on falling edge 1268c2ecf20Sopenharmony_ci - "MANCH_R": manchester codec, rising edge = logic 0, falling edge = logic 1 1278c2ecf20Sopenharmony_ci - "MANCH_F": manchester codec, rising edge = logic 1, falling edge = logic 0 1288c2ecf20Sopenharmony_ci items: 1298c2ecf20Sopenharmony_ci enum: [ SPI_R, SPI_F, MANCH_R, MANCH_F ] 1308c2ecf20Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/non-unique-string-array 1318c2ecf20Sopenharmony_ci 1328c2ecf20Sopenharmony_ci st,adc-channel-clk-src: 1338c2ecf20Sopenharmony_ci description: | 1348c2ecf20Sopenharmony_ci Conversion clock source. 1358c2ecf20Sopenharmony_ci - "CLKIN": external SPI clock (CLKIN x) 1368c2ecf20Sopenharmony_ci - "CLKOUT": internal SPI clock (CLKOUT) (default) 1378c2ecf20Sopenharmony_ci - "CLKOUT_F": internal SPI clock divided by 2 (falling edge). 1388c2ecf20Sopenharmony_ci - "CLKOUT_R": internal SPI clock divided by 2 (rising edge). 1398c2ecf20Sopenharmony_ci items: 1408c2ecf20Sopenharmony_ci enum: [ CLKIN, CLKOUT, CLKOUT_F, CLKOUT_R ] 1418c2ecf20Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/non-unique-string-array 1428c2ecf20Sopenharmony_ci 1438c2ecf20Sopenharmony_ci st,adc-alt-channel: 1448c2ecf20Sopenharmony_ci description: 1458c2ecf20Sopenharmony_ci Must be defined if two sigma delta modulators are 1468c2ecf20Sopenharmony_ci connected on same SPI input. 1478c2ecf20Sopenharmony_ci If not set, channel n is connected to SPI input n. 1488c2ecf20Sopenharmony_ci If set, channel n is connected to SPI input n + 1. 1498c2ecf20Sopenharmony_ci type: boolean 1508c2ecf20Sopenharmony_ci 1518c2ecf20Sopenharmony_ci st,filter0-sync: 1528c2ecf20Sopenharmony_ci description: 1538c2ecf20Sopenharmony_ci Set to 1 to synchronize with DFSDM filter instance 0. 1548c2ecf20Sopenharmony_ci Used for multi microphones synchronization. 1558c2ecf20Sopenharmony_ci type: boolean 1568c2ecf20Sopenharmony_ci 1578c2ecf20Sopenharmony_ci dmas: 1588c2ecf20Sopenharmony_ci maxItems: 1 1598c2ecf20Sopenharmony_ci 1608c2ecf20Sopenharmony_ci dma-names: 1618c2ecf20Sopenharmony_ci items: 1628c2ecf20Sopenharmony_ci - const: rx 1638c2ecf20Sopenharmony_ci 1648c2ecf20Sopenharmony_ci required: 1658c2ecf20Sopenharmony_ci - compatible 1668c2ecf20Sopenharmony_ci - reg 1678c2ecf20Sopenharmony_ci - interrupts 1688c2ecf20Sopenharmony_ci - st,adc-channels 1698c2ecf20Sopenharmony_ci - st,adc-channel-names 1708c2ecf20Sopenharmony_ci - st,filter-order 1718c2ecf20Sopenharmony_ci - "#io-channel-cells" 1728c2ecf20Sopenharmony_ci 1738c2ecf20Sopenharmony_ci allOf: 1748c2ecf20Sopenharmony_ci - if: 1758c2ecf20Sopenharmony_ci properties: 1768c2ecf20Sopenharmony_ci compatible: 1778c2ecf20Sopenharmony_ci contains: 1788c2ecf20Sopenharmony_ci const: st,stm32-dfsdm-adc 1798c2ecf20Sopenharmony_ci 1808c2ecf20Sopenharmony_ci - then: 1818c2ecf20Sopenharmony_ci properties: 1828c2ecf20Sopenharmony_ci st,adc-channels: 1838c2ecf20Sopenharmony_ci minItems: 1 1848c2ecf20Sopenharmony_ci maxItems: 8 1858c2ecf20Sopenharmony_ci 1868c2ecf20Sopenharmony_ci st,adc-channel-names: 1878c2ecf20Sopenharmony_ci minItems: 1 1888c2ecf20Sopenharmony_ci maxItems: 8 1898c2ecf20Sopenharmony_ci 1908c2ecf20Sopenharmony_ci st,adc-channel-types: 1918c2ecf20Sopenharmony_ci minItems: 1 1928c2ecf20Sopenharmony_ci maxItems: 8 1938c2ecf20Sopenharmony_ci 1948c2ecf20Sopenharmony_ci st,adc-channel-clk-src: 1958c2ecf20Sopenharmony_ci minItems: 1 1968c2ecf20Sopenharmony_ci maxItems: 8 1978c2ecf20Sopenharmony_ci 1988c2ecf20Sopenharmony_ci io-channels: 1998c2ecf20Sopenharmony_ci description: 2008c2ecf20Sopenharmony_ci From common IIO binding. Used to pipe external sigma delta 2018c2ecf20Sopenharmony_ci modulator or internal ADC output to DFSDM channel. 2028c2ecf20Sopenharmony_ci This is not required for "st,stm32-dfsdm-pdm" compatibility as 2038c2ecf20Sopenharmony_ci PDM microphone is binded in Audio DT node. 2048c2ecf20Sopenharmony_ci 2058c2ecf20Sopenharmony_ci required: 2068c2ecf20Sopenharmony_ci - io-channels 2078c2ecf20Sopenharmony_ci 2088c2ecf20Sopenharmony_ci - if: 2098c2ecf20Sopenharmony_ci properties: 2108c2ecf20Sopenharmony_ci compatible: 2118c2ecf20Sopenharmony_ci contains: 2128c2ecf20Sopenharmony_ci const: st,stm32-dfsdm-dmic 2138c2ecf20Sopenharmony_ci 2148c2ecf20Sopenharmony_ci - then: 2158c2ecf20Sopenharmony_ci properties: 2168c2ecf20Sopenharmony_ci st,adc-channels: 2178c2ecf20Sopenharmony_ci maxItems: 1 2188c2ecf20Sopenharmony_ci 2198c2ecf20Sopenharmony_ci st,adc-channel-names: 2208c2ecf20Sopenharmony_ci maxItems: 1 2218c2ecf20Sopenharmony_ci 2228c2ecf20Sopenharmony_ci st,adc-channel-types: 2238c2ecf20Sopenharmony_ci maxItems: 1 2248c2ecf20Sopenharmony_ci 2258c2ecf20Sopenharmony_ci st,adc-channel-clk-src: 2268c2ecf20Sopenharmony_ci maxItems: 1 2278c2ecf20Sopenharmony_ci 2288c2ecf20Sopenharmony_ci required: 2298c2ecf20Sopenharmony_ci - dmas 2308c2ecf20Sopenharmony_ci - dma-names 2318c2ecf20Sopenharmony_ci 2328c2ecf20Sopenharmony_ci patternProperties: 2338c2ecf20Sopenharmony_ci "^dfsdm-dai+$": 2348c2ecf20Sopenharmony_ci type: object 2358c2ecf20Sopenharmony_ci description: child node 2368c2ecf20Sopenharmony_ci 2378c2ecf20Sopenharmony_ci properties: 2388c2ecf20Sopenharmony_ci "#sound-dai-cells": 2398c2ecf20Sopenharmony_ci const: 0 2408c2ecf20Sopenharmony_ci 2418c2ecf20Sopenharmony_ci io-channels: 2428c2ecf20Sopenharmony_ci description: 2438c2ecf20Sopenharmony_ci From common IIO binding. Used to pipe external sigma delta 2448c2ecf20Sopenharmony_ci modulator or internal ADC output to DFSDM channel. 2458c2ecf20Sopenharmony_ci 2468c2ecf20Sopenharmony_ci required: 2478c2ecf20Sopenharmony_ci - "#sound-dai-cells" 2488c2ecf20Sopenharmony_ci - io-channels 2498c2ecf20Sopenharmony_ci 2508c2ecf20Sopenharmony_ciallOf: 2518c2ecf20Sopenharmony_ci - if: 2528c2ecf20Sopenharmony_ci properties: 2538c2ecf20Sopenharmony_ci compatible: 2548c2ecf20Sopenharmony_ci contains: 2558c2ecf20Sopenharmony_ci const: st,stm32h7-dfsdm 2568c2ecf20Sopenharmony_ci 2578c2ecf20Sopenharmony_ci - then: 2588c2ecf20Sopenharmony_ci patternProperties: 2598c2ecf20Sopenharmony_ci "^filter@[0-9]+$": 2608c2ecf20Sopenharmony_ci properties: 2618c2ecf20Sopenharmony_ci reg: 2628c2ecf20Sopenharmony_ci items: 2638c2ecf20Sopenharmony_ci minimum: 0 2648c2ecf20Sopenharmony_ci maximum: 3 2658c2ecf20Sopenharmony_ci 2668c2ecf20Sopenharmony_ci - if: 2678c2ecf20Sopenharmony_ci properties: 2688c2ecf20Sopenharmony_ci compatible: 2698c2ecf20Sopenharmony_ci contains: 2708c2ecf20Sopenharmony_ci const: st,stm32mp1-dfsdm 2718c2ecf20Sopenharmony_ci 2728c2ecf20Sopenharmony_ci - then: 2738c2ecf20Sopenharmony_ci patternProperties: 2748c2ecf20Sopenharmony_ci "^filter@[0-9]+$": 2758c2ecf20Sopenharmony_ci properties: 2768c2ecf20Sopenharmony_ci reg: 2778c2ecf20Sopenharmony_ci items: 2788c2ecf20Sopenharmony_ci minimum: 0 2798c2ecf20Sopenharmony_ci maximum: 5 2808c2ecf20Sopenharmony_ci 2818c2ecf20Sopenharmony_ciexamples: 2828c2ecf20Sopenharmony_ci - | 2838c2ecf20Sopenharmony_ci #include <dt-bindings/interrupt-controller/arm-gic.h> 2848c2ecf20Sopenharmony_ci #include <dt-bindings/clock/stm32mp1-clks.h> 2858c2ecf20Sopenharmony_ci dfsdm: dfsdm@4400d000 { 2868c2ecf20Sopenharmony_ci compatible = "st,stm32mp1-dfsdm"; 2878c2ecf20Sopenharmony_ci reg = <0x4400d000 0x800>; 2888c2ecf20Sopenharmony_ci clocks = <&rcc DFSDM_K>, <&rcc ADFSDM_K>; 2898c2ecf20Sopenharmony_ci clock-names = "dfsdm", "audio"; 2908c2ecf20Sopenharmony_ci #address-cells = <1>; 2918c2ecf20Sopenharmony_ci #size-cells = <0>; 2928c2ecf20Sopenharmony_ci 2938c2ecf20Sopenharmony_ci dfsdm0: filter@0 { 2948c2ecf20Sopenharmony_ci compatible = "st,stm32-dfsdm-dmic"; 2958c2ecf20Sopenharmony_ci reg = <0>; 2968c2ecf20Sopenharmony_ci interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>; 2978c2ecf20Sopenharmony_ci dmas = <&dmamux1 101 0x400 0x01>; 2988c2ecf20Sopenharmony_ci dma-names = "rx"; 2998c2ecf20Sopenharmony_ci #io-channel-cells = <1>; 3008c2ecf20Sopenharmony_ci st,adc-channels = <1>; 3018c2ecf20Sopenharmony_ci st,adc-channel-names = "dmic0"; 3028c2ecf20Sopenharmony_ci st,adc-channel-types = "SPI_R"; 3038c2ecf20Sopenharmony_ci st,adc-channel-clk-src = "CLKOUT"; 3048c2ecf20Sopenharmony_ci st,filter-order = <5>; 3058c2ecf20Sopenharmony_ci 3068c2ecf20Sopenharmony_ci asoc_pdm0: dfsdm-dai { 3078c2ecf20Sopenharmony_ci compatible = "st,stm32h7-dfsdm-dai"; 3088c2ecf20Sopenharmony_ci #sound-dai-cells = <0>; 3098c2ecf20Sopenharmony_ci io-channels = <&dfsdm0 0>; 3108c2ecf20Sopenharmony_ci }; 3118c2ecf20Sopenharmony_ci }; 3128c2ecf20Sopenharmony_ci 3138c2ecf20Sopenharmony_ci dfsdm_pdm1: filter@1 { 3148c2ecf20Sopenharmony_ci compatible = "st,stm32-dfsdm-adc"; 3158c2ecf20Sopenharmony_ci reg = <1>; 3168c2ecf20Sopenharmony_ci interrupts = <GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH>; 3178c2ecf20Sopenharmony_ci dmas = <&dmamux1 102 0x400 0x01>; 3188c2ecf20Sopenharmony_ci dma-names = "rx"; 3198c2ecf20Sopenharmony_ci #io-channel-cells = <1>; 3208c2ecf20Sopenharmony_ci st,adc-channels = <2 3>; 3218c2ecf20Sopenharmony_ci st,adc-channel-names = "in2", "in3"; 3228c2ecf20Sopenharmony_ci st,adc-channel-types = "SPI_R", "SPI_R"; 3238c2ecf20Sopenharmony_ci st,adc-channel-clk-src = "CLKOUT_F", "CLKOUT_F"; 3248c2ecf20Sopenharmony_ci io-channels = <&sd_adc2 &sd_adc3>; 3258c2ecf20Sopenharmony_ci st,filter-order = <1>; 3268c2ecf20Sopenharmony_ci }; 3278c2ecf20Sopenharmony_ci }; 3288c2ecf20Sopenharmony_ci 3298c2ecf20Sopenharmony_ci... 330