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