430 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			430 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
 | 
						|
%YAML 1.2
 | 
						|
---
 | 
						|
$id: http://devicetree.org/schemas/iio/adc/st,stm32-dfsdm-adc.yaml#
 | 
						|
$schema: http://devicetree.org/meta-schemas/core.yaml#
 | 
						|
 | 
						|
title: STMicroelectronics STM32 DFSDM ADC device driver
 | 
						|
 | 
						|
maintainers:
 | 
						|
  - Fabrice Gasnier <fabrice.gasnier@foss.st.com>
 | 
						|
  - Olivier Moysan <olivier.moysan@foss.st.com>
 | 
						|
 | 
						|
description: |
 | 
						|
  STM32 DFSDM ADC is a sigma delta analog-to-digital converter dedicated to
 | 
						|
  interface external sigma delta modulators to STM32 micro controllers.
 | 
						|
  It is mainly targeted for:
 | 
						|
  - Sigma delta modulators (motor control, metering...)
 | 
						|
  - PDM microphones (audio digital microphone)
 | 
						|
 | 
						|
  It features up to 8 serial digital interfaces (SPI or Manchester) and
 | 
						|
  up to 4 filters on stm32h7 or 6 filters on stm32mp1.
 | 
						|
 | 
						|
  Each child node matches with a filter instance.  
 | 
						|
 | 
						|
properties:
 | 
						|
  compatible:
 | 
						|
    enum:
 | 
						|
      - st,stm32h7-dfsdm
 | 
						|
      - st,stm32mp1-dfsdm
 | 
						|
 | 
						|
  reg:
 | 
						|
    maxItems: 1
 | 
						|
 | 
						|
  clocks:
 | 
						|
    items:
 | 
						|
      - description:
 | 
						|
          Internal clock used for DFSDM digital processing and control blocks.
 | 
						|
          dfsdm clock can also feed CLKOUT, when CLKOUT is used.
 | 
						|
      - description: audio clock can be used as an alternate to feed CLKOUT.
 | 
						|
    minItems: 1
 | 
						|
 | 
						|
  clock-names:
 | 
						|
    items:
 | 
						|
      - const: dfsdm
 | 
						|
      - const: audio
 | 
						|
    minItems: 1
 | 
						|
 | 
						|
  "#address-cells":
 | 
						|
    const: 1
 | 
						|
 | 
						|
  "#size-cells":
 | 
						|
    const: 0
 | 
						|
 | 
						|
  spi-max-frequency:
 | 
						|
    description:
 | 
						|
      SPI clock OUT frequency (Hz). Requested only for SPI master mode.
 | 
						|
      This clock must be set according to the "clock" property.
 | 
						|
      Frequency must be a multiple of the rcc clock frequency.
 | 
						|
      If not, SPI CLKOUT frequency will not be accurate.
 | 
						|
    maximum: 20000000
 | 
						|
 | 
						|
  access-controllers:
 | 
						|
    minItems: 1
 | 
						|
    maxItems: 2
 | 
						|
 | 
						|
required:
 | 
						|
  - compatible
 | 
						|
  - reg
 | 
						|
  - clocks
 | 
						|
  - clock-names
 | 
						|
  - "#address-cells"
 | 
						|
  - "#size-cells"
 | 
						|
 | 
						|
additionalProperties: false
 | 
						|
 | 
						|
patternProperties:
 | 
						|
  "^filter@[0-9]+$":
 | 
						|
    type: object
 | 
						|
    unevaluatedProperties: false
 | 
						|
    description: child node
 | 
						|
 | 
						|
    properties:
 | 
						|
      compatible:
 | 
						|
        enum:
 | 
						|
          - st,stm32-dfsdm-adc
 | 
						|
          - st,stm32-dfsdm-dmic
 | 
						|
 | 
						|
      reg:
 | 
						|
        description: Specifies the DFSDM filter instance used.
 | 
						|
        maxItems: 1
 | 
						|
 | 
						|
      interrupts:
 | 
						|
        maxItems: 1
 | 
						|
 | 
						|
      st,adc-channels:
 | 
						|
        description: |
 | 
						|
          List of single-ended channels muxed for this ADC.
 | 
						|
          On stm32h7 and stm32mp1:
 | 
						|
          - For st,stm32-dfsdm-adc: up to 8 channels numbered from 0 to 7.
 | 
						|
          - For st,stm32-dfsdm-dmic: 1 channel numbered from 0 to 7.          
 | 
						|
        $ref: /schemas/types.yaml#/definitions/uint32-array
 | 
						|
        items:
 | 
						|
          minimum: 0
 | 
						|
          maximum: 7
 | 
						|
        deprecated: true
 | 
						|
 | 
						|
      st,adc-channel-names:
 | 
						|
        description: List of single-ended channel names.
 | 
						|
        deprecated: true
 | 
						|
 | 
						|
      st,filter-order:
 | 
						|
        description: |
 | 
						|
          SinC filter order from 0 to 5.
 | 
						|
          - 0: FastSinC
 | 
						|
          - [1-5]: order 1 to 5.
 | 
						|
          For audio purpose it is recommended to use order 3 to 5.          
 | 
						|
        $ref: /schemas/types.yaml#/definitions/uint32
 | 
						|
        maximum: 5
 | 
						|
 | 
						|
      "#io-channel-cells":
 | 
						|
        const: 1
 | 
						|
 | 
						|
      '#address-cells':
 | 
						|
        const: 1
 | 
						|
 | 
						|
      '#size-cells':
 | 
						|
        const: 0
 | 
						|
 | 
						|
      st,adc-channel-types:
 | 
						|
        description: |
 | 
						|
          Single-ended channel input type.
 | 
						|
          - "SPI_R": SPI with data on rising edge (default)
 | 
						|
          - "SPI_F": SPI with data on falling edge
 | 
						|
          - "MANCH_R": manchester codec, rising edge = logic 0, falling edge = logic 1
 | 
						|
          - "MANCH_F": manchester codec, rising edge = logic 1, falling edge = logic 0          
 | 
						|
        items:
 | 
						|
          enum: [ SPI_R, SPI_F, MANCH_R, MANCH_F ]
 | 
						|
        $ref: /schemas/types.yaml#/definitions/non-unique-string-array
 | 
						|
        deprecated: true
 | 
						|
 | 
						|
      st,adc-channel-clk-src:
 | 
						|
        description: |
 | 
						|
          Conversion clock source.
 | 
						|
          - "CLKIN": external SPI clock (CLKIN x)
 | 
						|
          - "CLKOUT": internal SPI clock (CLKOUT) (default)
 | 
						|
          - "CLKOUT_F": internal SPI clock divided by 2 (falling edge).
 | 
						|
          - "CLKOUT_R": internal SPI clock divided by 2 (rising edge).          
 | 
						|
        items:
 | 
						|
          enum: [ CLKIN, CLKOUT, CLKOUT_F, CLKOUT_R ]
 | 
						|
        $ref: /schemas/types.yaml#/definitions/non-unique-string-array
 | 
						|
        deprecated: true
 | 
						|
 | 
						|
      st,adc-alt-channel:
 | 
						|
        description:
 | 
						|
          Must be defined if two sigma delta modulators are
 | 
						|
          connected on same SPI input.
 | 
						|
          If not set, channel n is connected to SPI input n.
 | 
						|
          If set, channel n is connected to SPI input n + 1.
 | 
						|
        type: boolean
 | 
						|
        deprecated: true
 | 
						|
 | 
						|
      st,filter0-sync:
 | 
						|
        description:
 | 
						|
          Set to 1 to synchronize with DFSDM filter instance 0.
 | 
						|
          Used for multi microphones synchronization.
 | 
						|
        type: boolean
 | 
						|
 | 
						|
      dmas:
 | 
						|
        maxItems: 1
 | 
						|
 | 
						|
      dma-names:
 | 
						|
        items:
 | 
						|
          - const: rx
 | 
						|
 | 
						|
    required:
 | 
						|
      - compatible
 | 
						|
      - reg
 | 
						|
      - interrupts
 | 
						|
      - st,filter-order
 | 
						|
      - "#io-channel-cells"
 | 
						|
 | 
						|
    patternProperties:
 | 
						|
      "^channel@[0-7]$":
 | 
						|
        type: object
 | 
						|
        $ref: adc.yaml
 | 
						|
        unevaluatedProperties: false
 | 
						|
        description: Represents the external channels which are connected to the DFSDM.
 | 
						|
 | 
						|
        properties:
 | 
						|
          reg:
 | 
						|
            maximum: 7
 | 
						|
 | 
						|
          label:
 | 
						|
            description:
 | 
						|
              Unique name to identify which channel this is.
 | 
						|
 | 
						|
          st,adc-channel-type:
 | 
						|
            description: |
 | 
						|
              Single-ended channel input type.
 | 
						|
              - "SPI_R": SPI with data on rising edge (default)
 | 
						|
              - "SPI_F": SPI with data on falling edge
 | 
						|
              - "MANCH_R": manchester codec, rising edge = logic 0, falling edge = logic 1
 | 
						|
              - "MANCH_F": manchester codec, rising edge = logic 1, falling edge = logic 0              
 | 
						|
            $ref: /schemas/types.yaml#/definitions/string
 | 
						|
            enum: [ SPI_R, SPI_F, MANCH_R, MANCH_F ]
 | 
						|
 | 
						|
          st,adc-channel-clk-src:
 | 
						|
            description: |
 | 
						|
              Conversion clock source.
 | 
						|
              - "CLKIN": external SPI clock (CLKIN x)
 | 
						|
              - "CLKOUT": internal SPI clock (CLKOUT) (default)
 | 
						|
              - "CLKOUT_F": internal SPI clock divided by 2 (falling edge).
 | 
						|
              - "CLKOUT_R": internal SPI clock divided by 2 (rising edge).              
 | 
						|
            $ref: /schemas/types.yaml#/definitions/string
 | 
						|
            enum: [ CLKIN, CLKOUT, CLKOUT_F, CLKOUT_R ]
 | 
						|
 | 
						|
          st,adc-alt-channel:
 | 
						|
            description:
 | 
						|
              Must be defined if two sigma delta modulators are
 | 
						|
              connected on same SPI input.
 | 
						|
              If not set, channel n is connected to SPI input n.
 | 
						|
              If set, channel n is connected to SPI input n + 1.
 | 
						|
            type: boolean
 | 
						|
 | 
						|
          io-backends:
 | 
						|
            description:
 | 
						|
              Used to pipe external sigma delta modulator or internal ADC backend to DFSDM channel.
 | 
						|
            maxItems: 1
 | 
						|
 | 
						|
        required:
 | 
						|
          - reg
 | 
						|
 | 
						|
    allOf:
 | 
						|
      - if:
 | 
						|
          properties:
 | 
						|
            compatible:
 | 
						|
              contains:
 | 
						|
                const: st,stm32-dfsdm-adc
 | 
						|
 | 
						|
        then:
 | 
						|
          properties:
 | 
						|
            st,adc-channels:
 | 
						|
              minItems: 1
 | 
						|
              maxItems: 8
 | 
						|
 | 
						|
            st,adc-channel-names:
 | 
						|
              minItems: 1
 | 
						|
              maxItems: 8
 | 
						|
 | 
						|
            st,adc-channel-types:
 | 
						|
              minItems: 1
 | 
						|
              maxItems: 8
 | 
						|
 | 
						|
            st,adc-channel-clk-src:
 | 
						|
              minItems: 1
 | 
						|
              maxItems: 8
 | 
						|
 | 
						|
            io-channels:
 | 
						|
              description:
 | 
						|
                From common IIO binding. Used to pipe external sigma delta
 | 
						|
                modulator or internal ADC output to DFSDM channel.
 | 
						|
              deprecated: true
 | 
						|
 | 
						|
          if:
 | 
						|
            required:
 | 
						|
              - st,adc-channels
 | 
						|
          then:
 | 
						|
            required:
 | 
						|
              - io-channels
 | 
						|
 | 
						|
          patternProperties:
 | 
						|
            "^channel@[0-7]$":
 | 
						|
              required:
 | 
						|
                - io-backends
 | 
						|
 | 
						|
      - if:
 | 
						|
          properties:
 | 
						|
            compatible:
 | 
						|
              contains:
 | 
						|
                const: st,stm32-dfsdm-dmic
 | 
						|
 | 
						|
        then:
 | 
						|
          properties:
 | 
						|
            st,adc-channels:
 | 
						|
              maxItems: 1
 | 
						|
 | 
						|
            st,adc-channel-names:
 | 
						|
              maxItems: 1
 | 
						|
 | 
						|
            st,adc-channel-types:
 | 
						|
              maxItems: 1
 | 
						|
 | 
						|
            st,adc-channel-clk-src:
 | 
						|
              maxItems: 1
 | 
						|
 | 
						|
          required:
 | 
						|
            - dmas
 | 
						|
            - dma-names
 | 
						|
 | 
						|
          patternProperties:
 | 
						|
            "^dfsdm-dai+$":
 | 
						|
              type: object
 | 
						|
              additionalProperties: false
 | 
						|
              description: child node
 | 
						|
 | 
						|
              properties:
 | 
						|
                compatible:
 | 
						|
                  enum:
 | 
						|
                    - st,stm32h7-dfsdm-dai
 | 
						|
 | 
						|
                "#sound-dai-cells":
 | 
						|
                  const: 0
 | 
						|
 | 
						|
                io-channels:
 | 
						|
                  description:
 | 
						|
                    From common IIO binding. Used to pipe external sigma delta
 | 
						|
                    modulator or internal ADC output to DFSDM channel.
 | 
						|
 | 
						|
                port:
 | 
						|
                  $ref: /schemas/sound/audio-graph-port.yaml#
 | 
						|
                  unevaluatedProperties: false
 | 
						|
 | 
						|
              required:
 | 
						|
                - compatible
 | 
						|
                - "#sound-dai-cells"
 | 
						|
                - io-channels
 | 
						|
 | 
						|
allOf:
 | 
						|
  - if:
 | 
						|
      properties:
 | 
						|
        compatible:
 | 
						|
          contains:
 | 
						|
            const: st,stm32h7-dfsdm
 | 
						|
 | 
						|
    then:
 | 
						|
      patternProperties:
 | 
						|
        "^filter@[0-9]+$":
 | 
						|
          properties:
 | 
						|
            reg:
 | 
						|
              items:
 | 
						|
                minimum: 0
 | 
						|
                maximum: 3
 | 
						|
 | 
						|
  - if:
 | 
						|
      properties:
 | 
						|
        compatible:
 | 
						|
          contains:
 | 
						|
            const: st,stm32mp1-dfsdm
 | 
						|
 | 
						|
    then:
 | 
						|
      patternProperties:
 | 
						|
        "^filter@[0-9]+$":
 | 
						|
          properties:
 | 
						|
            reg:
 | 
						|
              items:
 | 
						|
                minimum: 0
 | 
						|
                maximum: 5
 | 
						|
 | 
						|
examples:
 | 
						|
  - |
 | 
						|
    #include <dt-bindings/interrupt-controller/arm-gic.h>
 | 
						|
    #include <dt-bindings/clock/stm32mp1-clks.h>
 | 
						|
    dfsdm: dfsdm@4400d000 {
 | 
						|
      compatible = "st,stm32mp1-dfsdm";
 | 
						|
      reg = <0x4400d000 0x800>;
 | 
						|
      clocks = <&rcc DFSDM_K>, <&rcc ADFSDM_K>;
 | 
						|
      clock-names = "dfsdm", "audio";
 | 
						|
      #address-cells = <1>;
 | 
						|
      #size-cells = <0>;
 | 
						|
 | 
						|
      // Example 1: Audio use case with generic binding
 | 
						|
      dfsdm0: filter@0 {
 | 
						|
        compatible = "st,stm32-dfsdm-dmic";
 | 
						|
        reg = <0>;
 | 
						|
        interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>;
 | 
						|
        dmas = <&dmamux1 101 0x400 0x01>;
 | 
						|
        dma-names = "rx";
 | 
						|
        #io-channel-cells = <1>;
 | 
						|
        #address-cells = <1>;
 | 
						|
        #size-cells = <0>;
 | 
						|
        st,filter-order = <5>;
 | 
						|
 | 
						|
        channel@1 {
 | 
						|
          reg = <1>;
 | 
						|
          label = "dmic0";
 | 
						|
          st,adc-channel-type = "SPI_R";
 | 
						|
          st,adc-channel-clk-src = "CLKOUT";
 | 
						|
          st,adc-alt-channel;
 | 
						|
        };
 | 
						|
 | 
						|
        asoc_pdm0: dfsdm-dai {
 | 
						|
          compatible = "st,stm32h7-dfsdm-dai";
 | 
						|
          #sound-dai-cells = <0>;
 | 
						|
          io-channels = <&dfsdm0 0>;
 | 
						|
        };
 | 
						|
      };
 | 
						|
 | 
						|
      // Example 2: Analog use case with generic binding
 | 
						|
      dfsdm1: filter@1 {
 | 
						|
        compatible = "st,stm32-dfsdm-adc";
 | 
						|
        reg = <1>;
 | 
						|
        interrupts = <GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH>;
 | 
						|
        dmas = <&dmamux1 102 0x400 0x01>;
 | 
						|
        dma-names = "rx";
 | 
						|
        st,filter-order = <1>;
 | 
						|
        #io-channel-cells = <1>;
 | 
						|
        #address-cells = <1>;
 | 
						|
        #size-cells = <0>;
 | 
						|
 | 
						|
        channel@2 {
 | 
						|
          reg = <2>;
 | 
						|
          label = "in2";
 | 
						|
          st,adc-channel-type = "SPI_F";
 | 
						|
          st,adc-channel-clk-src = "CLKOUT";
 | 
						|
          st,adc-alt-channel;
 | 
						|
          io-backends = <&sd_adc2>;
 | 
						|
        };
 | 
						|
 | 
						|
        channel@3 {
 | 
						|
          reg = <3>;
 | 
						|
          label = "in3";
 | 
						|
          st,adc-channel-type = "SPI_R";
 | 
						|
          st,adc-channel-clk-src = "CLKOUT";
 | 
						|
          io-backends = <&sd_adc3>;
 | 
						|
        };
 | 
						|
      };
 | 
						|
    };    
 | 
						|
 | 
						|
...
 |