200 lines
5.1 KiB
YAML
200 lines
5.1 KiB
YAML
|
# 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 unsused 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";
|
||
|
};
|
||
|
};
|
||
|
|
||
|
...
|