blob: 2456d958adeef6ac217e5698f7b0d89c702e7ad7 [file] [log] [blame]
Tom Rini53633a82024-02-29 12:33:36 -05001# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/sound/fsl,sai.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Freescale Synchronous Audio Interface (SAI).
8
9maintainers:
10 - Shengjiu Wang <shengjiu.wang@nxp.com>
11
12description: |
13 The SAI is based on I2S module that used communicating with audio codecs,
14 which provides a synchronous audio interface that supports fullduplex
15 serial interfaces with frame synchronization such as I2S, AC97, TDM, and
16 codec/DSP interfaces.
17
18properties:
19 compatible:
20 oneOf:
21 - items:
22 - enum:
23 - fsl,imx6ul-sai
24 - fsl,imx7d-sai
25 - const: fsl,imx6sx-sai
26
27 - items:
28 - enum:
29 - fsl,imx8mm-sai
30 - fsl,imx8mn-sai
31 - fsl,imx8mp-sai
32 - const: fsl,imx8mq-sai
33
34 - items:
35 - enum:
36 - fsl,imx6sx-sai
37 - fsl,imx7ulp-sai
38 - fsl,imx8mq-sai
39 - fsl,imx8qm-sai
40 - fsl,imx8ulp-sai
41 - fsl,imx93-sai
Tom Rini6bb92fc2024-05-20 09:54:58 -060042 - fsl,imx95-sai
Tom Rini53633a82024-02-29 12:33:36 -050043 - fsl,vf610-sai
44
45 reg:
46 maxItems: 1
47
48 clocks:
49 items:
50 - description: The ipg clock for register access
51 - description: master clock source 0 (obsoleted)
52 - description: master clock source 1
53 - description: master clock source 2
54 - description: master clock source 3
55 - description: PLL clock source for 8kHz series
56 - description: PLL clock source for 11kHz series
57 minItems: 4
58
59 clock-names:
60 oneOf:
61 - items:
62 - const: bus
63 - const: mclk0
64 - const: mclk1
65 - const: mclk2
66 - const: mclk3
67 - const: pll8k
68 - const: pll11k
69 minItems: 5
70 - items:
71 - const: bus
72 - const: mclk1
73 - const: mclk2
74 - const: mclk3
75 - const: pll8k
76 - const: pll11k
77 minItems: 4
78
Tom Rini6bb92fc2024-05-20 09:54:58 -060079 power-domains:
80 maxItems: 1
81
Tom Rini53633a82024-02-29 12:33:36 -050082 dmas:
Tom Rini6bb92fc2024-05-20 09:54:58 -060083 minItems: 1
Tom Rini53633a82024-02-29 12:33:36 -050084 items:
85 - description: DMA controller phandle and request line for RX
86 - description: DMA controller phandle and request line for TX
87
88 dma-names:
Tom Rini6bb92fc2024-05-20 09:54:58 -060089 minItems: 1
Tom Rini53633a82024-02-29 12:33:36 -050090 items:
91 - const: rx
92 - const: tx
93
94 interrupts:
95 items:
96 - description: receive and transmit interrupt
97
98 big-endian:
99 description: |
100 required if all the SAI registers are big-endian rather than little-endian.
101 type: boolean
102
103 fsl,dataline:
104 $ref: /schemas/types.yaml#/definitions/uint32-matrix
105 description: |
106 Configure the dataline. It has 3 value for each configuration
107 maxItems: 16
108 items:
109 items:
110 - description: format Default(0), I2S(1) or PDM(2)
111 enum: [0, 1, 2]
112 - description: dataline mask for 'rx'
113 - description: dataline mask for 'tx'
114
115 fsl,sai-mclk-direction-output:
116 description: SAI will output the SAI MCLK clock.
117 type: boolean
118
119 fsl,sai-synchronous-rx:
120 description: |
121 SAI will work in the synchronous mode (sync Tx with Rx) which means
122 both the transmitter and the receiver will send and receive data by
123 following receiver's bit clocks and frame sync clocks.
124 type: boolean
125
126 fsl,sai-asynchronous:
127 description: |
128 SAI will work in the asynchronous mode, which means both transmitter
129 and receiver will send and receive data by following their own bit clocks
130 and frame sync clocks separately.
131 If both fsl,sai-asynchronous and fsl,sai-synchronous-rx are absent, the
132 default synchronous mode (sync Rx with Tx) will be used, which means both
133 transmitter and receiver will send and receive data by following clocks
134 of transmitter.
135 type: boolean
136
137 fsl,shared-interrupt:
138 description: Interrupt is shared with other modules.
139 type: boolean
140
141 lsb-first:
142 description: |
143 Configures whether the LSB or the MSB is transmitted
144 first for the fifo data. If this property is absent,
145 the MSB is transmitted first as default, or the LSB
146 is transmitted first.
147 type: boolean
148
149 "#sound-dai-cells":
150 const: 0
151 description: optional, some dts node didn't add it.
152
153allOf:
154 - $ref: dai-common.yaml#
155 - if:
156 required:
157 - fsl,sai-asynchronous
158 then:
159 properties:
160 fsl,sai-synchronous-rx: false
161
162required:
163 - compatible
164 - reg
165 - clocks
166 - clock-names
167 - dmas
168 - dma-names
169 - interrupts
170
171unevaluatedProperties: false
172
173examples:
174 - |
175 #include <dt-bindings/interrupt-controller/arm-gic.h>
176 #include <dt-bindings/clock/vf610-clock.h>
177 sai2: sai@40031000 {
178 compatible = "fsl,vf610-sai";
179 reg = <0x40031000 0x1000>;
180 interrupts = <86 IRQ_TYPE_LEVEL_HIGH>;
181 pinctrl-names = "default";
182 pinctrl-0 = <&pinctrl_sai2_1>;
183 clocks = <&clks VF610_CLK_PLATFORM_BUS>,
184 <&clks VF610_CLK_SAI2>,
185 <&clks 0>, <&clks 0>;
186 clock-names = "bus", "mclk1", "mclk2", "mclk3";
187 dma-names = "rx", "tx";
188 dmas = <&edma0 0 20>, <&edma0 0 21>;
189 big-endian;
190 lsb-first;
191 };
192
193 - |
194 #include <dt-bindings/interrupt-controller/arm-gic.h>
195 #include <dt-bindings/clock/imx8mm-clock.h>
196 sai1: sai@30010000 {
197 compatible = "fsl,imx8mm-sai", "fsl,imx8mq-sai";
198 reg = <0x30010000 0x10000>;
199 interrupts = <GIC_SPI 95 IRQ_TYPE_LEVEL_HIGH>;
200 clocks = <&clk IMX8MM_CLK_SAI1_IPG>,
201 <&clk IMX8MM_CLK_DUMMY>,
202 <&clk IMX8MM_CLK_SAI1_ROOT>,
203 <&clk IMX8MM_CLK_DUMMY>, <&clk IMX8MM_CLK_DUMMY>;
204 clock-names = "bus", "mclk0", "mclk1", "mclk2", "mclk3";
205 dmas = <&sdma2 0 2 0>, <&sdma2 1 2 0>;
206 dma-names = "rx", "tx";
207 fsl,dataline = <1 0xff 0xff 2 0xff 0x11>;
208 #sound-dai-cells = <0>;
209 };