| 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/st,stm32-dma.yaml | 
 |   - 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>; | 
 | 		}; | 
 | 	}; | 
 | }; |