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/sound/st,stm32-sai.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: STMicroelectronics STM32 Serial Audio Interface (SAI)
862306a36Sopenharmony_ci
962306a36Sopenharmony_cimaintainers:
1062306a36Sopenharmony_ci  - Olivier Moysan <olivier.moysan@foss.st.com>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cidescription:
1362306a36Sopenharmony_ci  The SAI interface (Serial Audio Interface) offers a wide set of audio
1462306a36Sopenharmony_ci  protocols as I2S standards, LSB or MSB-justified, PCM/DSP, TDM, and AC'97.
1562306a36Sopenharmony_ci  The SAI contains two independent audio sub-blocks. Each sub-block has
1662306a36Sopenharmony_ci  its own clock generator and I/O lines controller.
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ciproperties:
1962306a36Sopenharmony_ci  compatible:
2062306a36Sopenharmony_ci    enum:
2162306a36Sopenharmony_ci      - st,stm32f4-sai
2262306a36Sopenharmony_ci      - st,stm32h7-sai
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci  reg:
2562306a36Sopenharmony_ci    items:
2662306a36Sopenharmony_ci      - description: Base address and size of SAI common register set.
2762306a36Sopenharmony_ci      - description: Base address and size of SAI identification register set.
2862306a36Sopenharmony_ci    minItems: 1
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci  ranges:
3162306a36Sopenharmony_ci    maxItems: 1
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ci  interrupts:
3462306a36Sopenharmony_ci    maxItems: 1
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ci  resets:
3762306a36Sopenharmony_ci    maxItems: 1
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci  "#address-cells":
4062306a36Sopenharmony_ci    const: 1
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ci  "#size-cells":
4362306a36Sopenharmony_ci    const: 1
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ci  clocks:
4662306a36Sopenharmony_ci    maxItems: 3
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_ci  clock-names:
4962306a36Sopenharmony_ci    maxItems: 3
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_cirequired:
5262306a36Sopenharmony_ci  - compatible
5362306a36Sopenharmony_ci  - reg
5462306a36Sopenharmony_ci  - ranges
5562306a36Sopenharmony_ci  - "#address-cells"
5662306a36Sopenharmony_ci  - "#size-cells"
5762306a36Sopenharmony_ci  - clocks
5862306a36Sopenharmony_ci  - clock-names
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_cipatternProperties:
6162306a36Sopenharmony_ci  "^audio-controller@[0-9a-f]+$":
6262306a36Sopenharmony_ci    type: object
6362306a36Sopenharmony_ci    additionalProperties: false
6462306a36Sopenharmony_ci    description:
6562306a36Sopenharmony_ci      Two subnodes corresponding to SAI sub-block instances A et B
6662306a36Sopenharmony_ci      can be defined. Subnode can be omitted for unused sub-block.
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ci    properties:
6962306a36Sopenharmony_ci      compatible:
7062306a36Sopenharmony_ci        description: Compatible for SAI sub-block A or B.
7162306a36Sopenharmony_ci        pattern: "st,stm32-sai-sub-[ab]"
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_ci      "#sound-dai-cells":
7462306a36Sopenharmony_ci        const: 0
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_ci      reg:
7762306a36Sopenharmony_ci        maxItems: 1
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ci      clocks:
8062306a36Sopenharmony_ci        items:
8162306a36Sopenharmony_ci          - description: sai_ck clock feeding the internal clock generator.
8262306a36Sopenharmony_ci          - description: MCLK clock from a SAI set as master clock provider.
8362306a36Sopenharmony_ci        minItems: 1
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ci      clock-names:
8662306a36Sopenharmony_ci        items:
8762306a36Sopenharmony_ci          - const: sai_ck
8862306a36Sopenharmony_ci          - const: MCLK
8962306a36Sopenharmony_ci        minItems: 1
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ci      dmas:
9262306a36Sopenharmony_ci        maxItems: 1
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_ci      dma-names:
9562306a36Sopenharmony_ci        description: |
9662306a36Sopenharmony_ci          rx: SAI sub-block is configured as a capture DAI.
9762306a36Sopenharmony_ci          tx: SAI sub-block is configured as a playback DAI.
9862306a36Sopenharmony_ci        enum: [ rx, tx ]
9962306a36Sopenharmony_ci
10062306a36Sopenharmony_ci      st,sync:
10162306a36Sopenharmony_ci        description:
10262306a36Sopenharmony_ci          Configure the SAI sub-block as slave of another SAI sub-block.
10362306a36Sopenharmony_ci          By default SAI sub-block is in asynchronous mode.
10462306a36Sopenharmony_ci          Must contain the phandle and index of the SAI sub-block providing
10562306a36Sopenharmony_ci          the synchronization.
10662306a36Sopenharmony_ci        $ref: /schemas/types.yaml#/definitions/phandle-array
10762306a36Sopenharmony_ci        items:
10862306a36Sopenharmony_ci          - items:
10962306a36Sopenharmony_ci              - description: phandle of the SAI sub-block
11062306a36Sopenharmony_ci              - description: index of the SAI sub-block
11162306a36Sopenharmony_ci
11262306a36Sopenharmony_ci      st,iec60958:
11362306a36Sopenharmony_ci        description:
11462306a36Sopenharmony_ci          If set, support S/PDIF IEC6958 protocol for playback.
11562306a36Sopenharmony_ci          IEC60958 protocol is not available for capture.
11662306a36Sopenharmony_ci          By default, custom protocol is assumed, meaning that protocol is
11762306a36Sopenharmony_ci          configured according to protocol defined in related DAI link node,
11862306a36Sopenharmony_ci          such as i2s, left justified, right justified, dsp and pdm protocols.
11962306a36Sopenharmony_ci        $ref: /schemas/types.yaml#/definitions/flag
12062306a36Sopenharmony_ci
12162306a36Sopenharmony_ci      "#clock-cells":
12262306a36Sopenharmony_ci        description: Configure the SAI device as master clock provider.
12362306a36Sopenharmony_ci        const: 0
12462306a36Sopenharmony_ci
12562306a36Sopenharmony_ci      port:
12662306a36Sopenharmony_ci        $ref: audio-graph-port.yaml#
12762306a36Sopenharmony_ci        unevaluatedProperties: false
12862306a36Sopenharmony_ci
12962306a36Sopenharmony_ci    required:
13062306a36Sopenharmony_ci      - compatible
13162306a36Sopenharmony_ci      - "#sound-dai-cells"
13262306a36Sopenharmony_ci      - reg
13362306a36Sopenharmony_ci      - clocks
13462306a36Sopenharmony_ci      - clock-names
13562306a36Sopenharmony_ci      - dmas
13662306a36Sopenharmony_ci      - dma-names
13762306a36Sopenharmony_ci
13862306a36Sopenharmony_ciallOf:
13962306a36Sopenharmony_ci  - if:
14062306a36Sopenharmony_ci      properties:
14162306a36Sopenharmony_ci        compatible:
14262306a36Sopenharmony_ci          contains:
14362306a36Sopenharmony_ci            const: st,stm32f4-sai
14462306a36Sopenharmony_ci    then:
14562306a36Sopenharmony_ci      properties:
14662306a36Sopenharmony_ci        clocks:
14762306a36Sopenharmony_ci          items:
14862306a36Sopenharmony_ci            - description: x8k, SAI parent clock for sampling rates multiple of 8kHz.
14962306a36Sopenharmony_ci            - description: x11k, SAI parent clock for sampling rates multiple of 11.025kHz.
15062306a36Sopenharmony_ci
15162306a36Sopenharmony_ci        clock-names:
15262306a36Sopenharmony_ci          items:
15362306a36Sopenharmony_ci            - const: x8k
15462306a36Sopenharmony_ci            - const: x11k
15562306a36Sopenharmony_ci    else:
15662306a36Sopenharmony_ci      properties:
15762306a36Sopenharmony_ci        clocks:
15862306a36Sopenharmony_ci          items:
15962306a36Sopenharmony_ci            - description: pclk feeds the peripheral bus interface.
16062306a36Sopenharmony_ci            - description: x8k, SAI parent clock for sampling rates multiple of 8kHz.
16162306a36Sopenharmony_ci            - description: x11k, SAI parent clock for sampling rates multiple of 11.025kHz.
16262306a36Sopenharmony_ci
16362306a36Sopenharmony_ci        clock-names:
16462306a36Sopenharmony_ci          items:
16562306a36Sopenharmony_ci            - const: pclk
16662306a36Sopenharmony_ci            - const: x8k
16762306a36Sopenharmony_ci            - const: x11k
16862306a36Sopenharmony_ci
16962306a36Sopenharmony_ciadditionalProperties: false
17062306a36Sopenharmony_ci
17162306a36Sopenharmony_ciexamples:
17262306a36Sopenharmony_ci  - |
17362306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/arm-gic.h>
17462306a36Sopenharmony_ci    #include <dt-bindings/clock/stm32mp1-clks.h>
17562306a36Sopenharmony_ci    #include <dt-bindings/reset/stm32mp1-resets.h>
17662306a36Sopenharmony_ci    sai2: sai@4400b000 {
17762306a36Sopenharmony_ci      compatible = "st,stm32h7-sai";
17862306a36Sopenharmony_ci      #address-cells = <1>;
17962306a36Sopenharmony_ci      #size-cells = <1>;
18062306a36Sopenharmony_ci      ranges = <0 0x4400b000 0x400>;
18162306a36Sopenharmony_ci      reg = <0x4400b000 0x4>, <0x4400b3f0 0x10>;
18262306a36Sopenharmony_ci      clocks = <&rcc SAI2>, <&rcc PLL3_Q>, <&rcc PLL3_R>;
18362306a36Sopenharmony_ci      clock-names = "pclk", "x8k", "x11k";
18462306a36Sopenharmony_ci      pinctrl-names = "default", "sleep";
18562306a36Sopenharmony_ci      pinctrl-0 = <&sai2a_pins_a>, <&sai2b_pins_b>;
18662306a36Sopenharmony_ci      pinctrl-1 = <&sai2a_sleep_pins_a>, <&sai2b_sleep_pins_b>;
18762306a36Sopenharmony_ci
18862306a36Sopenharmony_ci      sai2a: audio-controller@4400b004 {
18962306a36Sopenharmony_ci        #sound-dai-cells = <0>;
19062306a36Sopenharmony_ci        compatible = "st,stm32-sai-sub-a";
19162306a36Sopenharmony_ci        reg = <0x4 0x1c>;
19262306a36Sopenharmony_ci        dmas = <&dmamux1 89 0x400 0x01>;
19362306a36Sopenharmony_ci        dma-names = "tx";
19462306a36Sopenharmony_ci        clocks = <&rcc SAI2_K>;
19562306a36Sopenharmony_ci        clock-names = "sai_ck";
19662306a36Sopenharmony_ci      };
19762306a36Sopenharmony_ci    };
19862306a36Sopenharmony_ci
19962306a36Sopenharmony_ci...
200