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