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.
  - clock-names: Must contain "sai_ck".
  - 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/pinctrl-stm32.txt

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.

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>;
		};
	};
};
