STMicroelectronics STM32 Serial Audio Interface (SAI).

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.

Required properties:
  - compatible: Should be "st,stm32f4-sai" or "st,stm32h7-sai"
  - reg: Base address and size of SAI common register set.
  - clocks: Must contain phandle and clock specifier pairs for each entry
	in clock-names.
  - clock-names: Must contain "pclk" "x8k" and "x11k"
	"pclk": Clock which feeds the peripheral bus interface.
	        Mandatory for "st,stm32h7-sai" compatible.
	        Not used for "st,stm32f4-sai" compatible.
	"x8k": SAI parent clock for sampling rates multiple of 8kHz.
	"x11k": SAI parent clock for sampling rates multiple of 11.025kHz.
  - interrupts: cpu DAI interrupt line shared by SAI sub-blocks

Optional properties:
  - resets: Reference to a reset controller asserting the SAI

SAI subnodes:
Two subnodes corresponding to SAI sub-block instances A et B can be defined.
Subnode can be omitted for unsused sub-block.

SAI subnodes required properties:
  - compatible: Should be "st,stm32-sai-sub-a" or "st,stm32-sai-sub-b"
	for SAI sub-block A or B respectively.
  - reg: Base address and size of SAI sub-block register set.
  - clocks: Must contain one phandle and clock specifier pair
	for sai_ck which feeds the internal clock generator.
	If the SAI shares a master clock, with another SAI set as MCLK
	clock provider, SAI provider phandle must be specified here.
  - clock-names: Must contain "sai_ck".
	Must also contain "MCLK", if SAI shares a master clock,
	with a SAI set as MCLK clock provider.
  - dmas: see Documentation/devicetree/bindings/dma/stm32-dma.txt
  - dma-names: identifier string for each DMA request line
	"tx": if sai sub-block is configured as playback DAI
	"rx": if sai sub-block is configured as capture DAI
  - pinctrl-names: should contain only value "default"
  - pinctrl-0: see Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl.yaml

SAI subnodes Optional properties:
  - st,sync: specify synchronization mode.
	By default SAI sub-block is in asynchronous mode.
	This property sets SAI sub-block as slave of another SAI sub-block.
	Must contain the phandle and index of the sai sub-block providing
	the synchronization.
  - st,iec60958: 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.
	Note: ac97 protocol is not supported by SAI driver
   - #clock-cells: should be 0. This property must be present if the SAI device
	is a master clock provider, according to clocks bindings, described in
	Documentation/devicetree/bindings/clock/clock-bindings.txt.

The device node should contain one 'port' child node with one child 'endpoint'
node, according to the bindings defined in Documentation/devicetree/bindings/
graph.txt.

Example:
sound_card {
	compatible = "audio-graph-card";
	dais = <&sai1b_port>;
};

sai1: sai1@40015800 {
	compatible = "st,stm32h7-sai";
	#address-cells = <1>;
	#size-cells = <1>;
	ranges = <0 0x40015800 0x400>;
	reg = <0x40015800 0x4>;
	clocks = <&rcc SAI1_CK>, <&rcc PLL1_Q>, <&rcc PLL2_P>;
	clock-names = "pclk", "x8k", "x11k";
	interrupts = <87>;

	sai1a: audio-controller@40015804 {
		compatible = "st,stm32-sai-sub-a";
		reg = <0x4 0x1C>;
		clocks = <&rcc SAI1_CK>;
		clock-names = "sai_ck";
		dmas = <&dmamux1 1 87 0x400 0x0>;
		dma-names = "tx";
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_sai1a>;

		sai1b_port: port {
			cpu_endpoint: endpoint {
				remote-endpoint = <&codec_endpoint>;
				format = "i2s";
			};
		};
	};
};

audio-codec {
	codec_port: port {
		codec_endpoint: endpoint {
			remote-endpoint = <&cpu_endpoint>;
		};
	};
};
