| # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) |
| %YAML 1.2 |
| --- |
| $id: http://devicetree.org/schemas/sound/st,stm32-sai.yaml# |
| $schema: http://devicetree.org/meta-schemas/core.yaml# |
| |
| title: STMicroelectronics STM32 Serial Audio Interface (SAI) |
| |
| maintainers: |
| - Olivier Moysan <olivier.moysan@foss.st.com> |
| |
| description: |
| The SAI interface (Serial Audio Interface) offers a wide set of audio |
| protocols as I2S standards, LSB or MSB-justified, PCM/DSP, TDM, and AC'97. |
| The SAI contains two independent audio sub-blocks. Each sub-block has |
| its own clock generator and I/O lines controller. |
| |
| properties: |
| compatible: |
| enum: |
| - st,stm32f4-sai |
| - st,stm32h7-sai |
| |
| reg: |
| items: |
| - description: Base address and size of SAI common register set. |
| - description: Base address and size of SAI identification register set. |
| minItems: 1 |
| |
| ranges: |
| maxItems: 1 |
| |
| interrupts: |
| maxItems: 1 |
| |
| resets: |
| maxItems: 1 |
| |
| "#address-cells": |
| const: 1 |
| |
| "#size-cells": |
| const: 1 |
| |
| clocks: |
| maxItems: 3 |
| |
| clock-names: |
| maxItems: 3 |
| |
| required: |
| - compatible |
| - reg |
| - ranges |
| - "#address-cells" |
| - "#size-cells" |
| - clocks |
| - clock-names |
| |
| patternProperties: |
| "^audio-controller@[0-9a-f]+$": |
| type: object |
| additionalProperties: false |
| description: |
| Two subnodes corresponding to SAI sub-block instances A et B |
| can be defined. Subnode can be omitted for unused sub-block. |
| |
| properties: |
| compatible: |
| description: Compatible for SAI sub-block A or B. |
| pattern: "st,stm32-sai-sub-[ab]" |
| |
| "#sound-dai-cells": |
| const: 0 |
| |
| reg: |
| maxItems: 1 |
| |
| clocks: |
| items: |
| - description: sai_ck clock feeding the internal clock generator. |
| - description: MCLK clock from a SAI set as master clock provider. |
| minItems: 1 |
| |
| clock-names: |
| items: |
| - const: sai_ck |
| - const: MCLK |
| minItems: 1 |
| |
| dmas: |
| maxItems: 1 |
| |
| dma-names: |
| description: | |
| rx: SAI sub-block is configured as a capture DAI. |
| tx: SAI sub-block is configured as a playback DAI. |
| enum: [ rx, tx ] |
| |
| st,sync: |
| description: |
| Configure the SAI sub-block as slave of another SAI sub-block. |
| By default SAI sub-block is in asynchronous mode. |
| Must contain the phandle and index of the SAI sub-block providing |
| the synchronization. |
| $ref: /schemas/types.yaml#/definitions/phandle-array |
| items: |
| - items: |
| - description: phandle of the SAI sub-block |
| - description: index of the SAI sub-block |
| |
| st,iec60958: |
| description: |
| If set, support S/PDIF IEC6958 protocol for playback. |
| IEC60958 protocol is not available for capture. |
| By default, custom protocol is assumed, meaning that protocol is |
| configured according to protocol defined in related DAI link node, |
| such as i2s, left justified, right justified, dsp and pdm protocols. |
| $ref: /schemas/types.yaml#/definitions/flag |
| |
| "#clock-cells": |
| description: Configure the SAI device as master clock provider. |
| const: 0 |
| |
| port: |
| $ref: audio-graph-port.yaml# |
| unevaluatedProperties: false |
| |
| required: |
| - compatible |
| - "#sound-dai-cells" |
| - reg |
| - clocks |
| - clock-names |
| - dmas |
| - dma-names |
| |
| allOf: |
| - if: |
| properties: |
| compatible: |
| contains: |
| const: st,stm32f4-sai |
| then: |
| properties: |
| clocks: |
| items: |
| - description: x8k, SAI parent clock for sampling rates multiple of 8kHz. |
| - description: x11k, SAI parent clock for sampling rates multiple of 11.025kHz. |
| |
| clock-names: |
| items: |
| - const: x8k |
| - const: x11k |
| else: |
| properties: |
| clocks: |
| items: |
| - description: pclk feeds the peripheral bus interface. |
| - description: x8k, SAI parent clock for sampling rates multiple of 8kHz. |
| - description: x11k, SAI parent clock for sampling rates multiple of 11.025kHz. |
| |
| clock-names: |
| items: |
| - const: pclk |
| - const: x8k |
| - const: x11k |
| |
| additionalProperties: false |
| |
| examples: |
| - | |
| #include <dt-bindings/interrupt-controller/arm-gic.h> |
| #include <dt-bindings/clock/stm32mp1-clks.h> |
| #include <dt-bindings/reset/stm32mp1-resets.h> |
| sai2: sai@4400b000 { |
| compatible = "st,stm32h7-sai"; |
| #address-cells = <1>; |
| #size-cells = <1>; |
| ranges = <0 0x4400b000 0x400>; |
| reg = <0x4400b000 0x4>, <0x4400b3f0 0x10>; |
| clocks = <&rcc SAI2>, <&rcc PLL3_Q>, <&rcc PLL3_R>; |
| clock-names = "pclk", "x8k", "x11k"; |
| pinctrl-names = "default", "sleep"; |
| pinctrl-0 = <&sai2a_pins_a>, <&sai2b_pins_b>; |
| pinctrl-1 = <&sai2a_sleep_pins_a>, <&sai2b_sleep_pins_b>; |
| |
| sai2a: audio-controller@4400b004 { |
| #sound-dai-cells = <0>; |
| compatible = "st,stm32-sai-sub-a"; |
| reg = <0x4 0x1c>; |
| dmas = <&dmamux1 89 0x400 0x01>; |
| dma-names = "tx"; |
| clocks = <&rcc SAI2_K>; |
| clock-names = "sai_ck"; |
| }; |
| }; |
| |
| ... |