| .. | .. |
|---|
| 5 | 5 | see ${LINUX}/Documentation/devicetree/bindings/graph.txt |
|---|
| 6 | 6 | |
|---|
| 7 | 7 | Basically, Audio Graph Card property is same as Simple Card. |
|---|
| 8 | | -see ${LINUX}/Documentation/devicetree/bindings/sound/simple-card.txt |
|---|
| 8 | +see ${LINUX}/Documentation/devicetree/bindings/sound/simple-card.yaml |
|---|
| 9 | 9 | |
|---|
| 10 | 10 | Below are same as Simple-Card. |
|---|
| 11 | 11 | |
|---|
| .. | .. |
|---|
| 32 | 32 | Optional properties: |
|---|
| 33 | 33 | - pa-gpios: GPIO used to control external amplifier. |
|---|
| 34 | 34 | |
|---|
| 35 | +----------------------- |
|---|
| 35 | 36 | Example: Single DAI case |
|---|
| 37 | +----------------------- |
|---|
| 36 | 38 | |
|---|
| 37 | 39 | sound_card { |
|---|
| 38 | 40 | compatible = "audio-graph-card"; |
|---|
| .. | .. |
|---|
| 61 | 63 | }; |
|---|
| 62 | 64 | }; |
|---|
| 63 | 65 | |
|---|
| 66 | +----------------------- |
|---|
| 64 | 67 | Example: Multi DAI case |
|---|
| 68 | +----------------------- |
|---|
| 65 | 69 | |
|---|
| 66 | 70 | sound-card { |
|---|
| 67 | 71 | compatible = "audio-graph-card"; |
|---|
| .. | .. |
|---|
| 130 | 134 | }; |
|---|
| 131 | 135 | }; |
|---|
| 132 | 136 | |
|---|
| 137 | + |
|---|
| 138 | +----------------------- |
|---|
| 139 | +Example: Sampling Rate Conversion |
|---|
| 140 | +----------------------- |
|---|
| 141 | + |
|---|
| 142 | + sound_card { |
|---|
| 143 | + compatible = "audio-graph-card"; |
|---|
| 144 | + |
|---|
| 145 | + label = "sound-card"; |
|---|
| 146 | + prefix = "codec"; |
|---|
| 147 | + routing = "codec Playback", "DAI0 Playback", |
|---|
| 148 | + "DAI0 Capture", "codec Capture"; |
|---|
| 149 | + convert-rate = <48000>; |
|---|
| 150 | + |
|---|
| 151 | + dais = <&cpu_port>; |
|---|
| 152 | + }; |
|---|
| 153 | + |
|---|
| 154 | + audio-codec { |
|---|
| 155 | + ... |
|---|
| 156 | + port { |
|---|
| 157 | + codec_endpoint: endpoint { |
|---|
| 158 | + remote-endpoint = <&cpu_endpoint>; |
|---|
| 159 | + }; |
|---|
| 160 | + }; |
|---|
| 161 | + }; |
|---|
| 162 | + |
|---|
| 163 | + dai-controller { |
|---|
| 164 | + ... |
|---|
| 165 | + cpu_port: port { |
|---|
| 166 | + cpu_endpoint: endpoint { |
|---|
| 167 | + remote-endpoint = <&codec_endpoint>; |
|---|
| 168 | + |
|---|
| 169 | + dai-format = "left_j"; |
|---|
| 170 | + ... |
|---|
| 171 | + }; |
|---|
| 172 | + }; |
|---|
| 173 | + }; |
|---|
| 174 | + |
|---|
| 175 | +----------------------- |
|---|
| 176 | +Example: 2 CPU 1 Codec (Mixing) |
|---|
| 177 | +----------------------- |
|---|
| 178 | + |
|---|
| 179 | + sound_card { |
|---|
| 180 | + compatible = "audio-graph-card"; |
|---|
| 181 | + |
|---|
| 182 | + label = "sound-card"; |
|---|
| 183 | + routing = "codec Playback", "DAI0 Playback", |
|---|
| 184 | + "codec Playback", "DAI1 Playback", |
|---|
| 185 | + "DAI0 Capture", "codec Capture"; |
|---|
| 186 | + |
|---|
| 187 | + dais = <&cpu_port>; |
|---|
| 188 | + }; |
|---|
| 189 | + |
|---|
| 190 | + audio-codec { |
|---|
| 191 | + ... |
|---|
| 192 | + |
|---|
| 193 | + audio-graph-card,prefix = "codec"; |
|---|
| 194 | + audio-graph-card,convert-rate = <48000>; |
|---|
| 195 | + port { |
|---|
| 196 | + reg = <0>; |
|---|
| 197 | + codec_endpoint0: endpoint@0 { |
|---|
| 198 | + remote-endpoint = <&cpu_endpoint0>; |
|---|
| 199 | + }; |
|---|
| 200 | + codec_endpoint1: endpoint@1 { |
|---|
| 201 | + remote-endpoint = <&cpu_endpoint1>; |
|---|
| 202 | + }; |
|---|
| 203 | + }; |
|---|
| 204 | + }; |
|---|
| 205 | + |
|---|
| 206 | + dai-controller { |
|---|
| 207 | + ... |
|---|
| 208 | + cpu_port: port { |
|---|
| 209 | + cpu_endpoint0: endpoint@0 { |
|---|
| 210 | + remote-endpoint = <&codec_endpoint0>; |
|---|
| 211 | + |
|---|
| 212 | + dai-format = "left_j"; |
|---|
| 213 | + ... |
|---|
| 214 | + }; |
|---|
| 215 | + cpu_endpoint1: endpoint@1 { |
|---|
| 216 | + remote-endpoint = <&codec_endpoint1>; |
|---|
| 217 | + |
|---|
| 218 | + dai-format = "left_j"; |
|---|
| 219 | + ... |
|---|
| 220 | + }; |
|---|
| 221 | + }; |
|---|
| 222 | + }; |
|---|
| 223 | + |
|---|
| 224 | +----------------------- |
|---|
| 225 | +Example: Multi DAI with DPCM |
|---|
| 226 | +----------------------- |
|---|
| 227 | + |
|---|
| 228 | + CPU0 ------ ak4613 |
|---|
| 229 | + CPU1 ------ HDMI |
|---|
| 230 | + CPU2 ------ PCM3168A-p /* DPCM 1ch/2ch */ |
|---|
| 231 | + CPU3 --/ /* DPCM 3ch/4ch */ |
|---|
| 232 | + CPU4 --/ /* DPCM 5ch/6ch */ |
|---|
| 233 | + CPU5 --/ /* DPCM 7ch/8ch */ |
|---|
| 234 | + CPU6 ------ PCM3168A-c |
|---|
| 235 | + |
|---|
| 236 | + sound_card: sound { |
|---|
| 237 | + compatible = "audio-graph-card"; |
|---|
| 238 | + |
|---|
| 239 | + label = "sound-card"; |
|---|
| 240 | + |
|---|
| 241 | + routing = "pcm3168a Playback", "DAI2 Playback", |
|---|
| 242 | + "pcm3168a Playback", "DAI3 Playback", |
|---|
| 243 | + "pcm3168a Playback", "DAI4 Playback", |
|---|
| 244 | + "pcm3168a Playback", "DAI5 Playback"; |
|---|
| 245 | + |
|---|
| 246 | + dais = <&snd_port0 /* ak4613 */ |
|---|
| 247 | + &snd_port1 /* HDMI0 */ |
|---|
| 248 | + &snd_port2 /* pcm3168a playback */ |
|---|
| 249 | + &snd_port3 /* pcm3168a capture */ |
|---|
| 250 | + >; |
|---|
| 251 | + }; |
|---|
| 252 | + |
|---|
| 253 | + ak4613: codec@10 { |
|---|
| 254 | + ... |
|---|
| 255 | + port { |
|---|
| 256 | + ak4613_endpoint: endpoint { |
|---|
| 257 | + remote-endpoint = <&rsnd_endpoint0>; |
|---|
| 258 | + }; |
|---|
| 259 | + }; |
|---|
| 260 | + }; |
|---|
| 261 | + |
|---|
| 262 | + pcm3168a: audio-codec@44 { |
|---|
| 263 | + ... |
|---|
| 264 | + audio-graph-card,prefix = "pcm3168a"; |
|---|
| 265 | + audio-graph-card,convert-channels = <8>; /* TDM Split */ |
|---|
| 266 | + ports { |
|---|
| 267 | + port@0 { |
|---|
| 268 | + reg = <0>; |
|---|
| 269 | + pcm3168a_endpoint_p1: endpoint@1 { |
|---|
| 270 | + remote-endpoint = <&rsnd_endpoint2>; |
|---|
| 271 | + ... |
|---|
| 272 | + }; |
|---|
| 273 | + pcm3168a_endpoint_p2: endpoint@2 { |
|---|
| 274 | + remote-endpoint = <&rsnd_endpoint3>; |
|---|
| 275 | + ... |
|---|
| 276 | + }; |
|---|
| 277 | + pcm3168a_endpoint_p3: endpoint@3 { |
|---|
| 278 | + remote-endpoint = <&rsnd_endpoint4>; |
|---|
| 279 | + ... |
|---|
| 280 | + }; |
|---|
| 281 | + pcm3168a_endpoint_p4: endpoint@4 { |
|---|
| 282 | + remote-endpoint = <&rsnd_endpoint5>; |
|---|
| 283 | + ... |
|---|
| 284 | + }; |
|---|
| 285 | + }; |
|---|
| 286 | + port@1 { |
|---|
| 287 | + reg = <1>; |
|---|
| 288 | + pcm3168a_endpoint_c: endpoint { |
|---|
| 289 | + remote-endpoint = <&rsnd_endpoint6>; |
|---|
| 290 | + ... |
|---|
| 291 | + }; |
|---|
| 292 | + }; |
|---|
| 293 | + }; |
|---|
| 294 | + }; |
|---|
| 295 | + |
|---|
| 296 | + &sound { |
|---|
| 297 | + ports { |
|---|
| 298 | + snd_port0: port@0 { |
|---|
| 299 | + rsnd_endpoint0: endpoint { |
|---|
| 300 | + remote-endpoint = <&ak4613_endpoint>; |
|---|
| 301 | + ... |
|---|
| 302 | + }; |
|---|
| 303 | + }; |
|---|
| 304 | + snd_port1: port@1 { |
|---|
| 305 | + rsnd_endpoint1: endpoint { |
|---|
| 306 | + remote-endpoint = <&dw_hdmi0_snd_in>; |
|---|
| 307 | + ... |
|---|
| 308 | + }; |
|---|
| 309 | + }; |
|---|
| 310 | + snd_port2: port@2 { |
|---|
| 311 | + #address-cells = <1>; |
|---|
| 312 | + #size-cells = <0>; |
|---|
| 313 | + rsnd_endpoint2: endpoint@2 { |
|---|
| 314 | + remote-endpoint = <&pcm3168a_endpoint_p1>; |
|---|
| 315 | + ... |
|---|
| 316 | + }; |
|---|
| 317 | + rsnd_endpoint3: endpoint@3 { |
|---|
| 318 | + remote-endpoint = <&pcm3168a_endpoint_p2>; |
|---|
| 319 | + ... |
|---|
| 320 | + }; |
|---|
| 321 | + rsnd_endpoint4: endpoint@4 { |
|---|
| 322 | + remote-endpoint = <&pcm3168a_endpoint_p3>; |
|---|
| 323 | + ... |
|---|
| 324 | + }; |
|---|
| 325 | + rsnd_endpoint5: endpoint@5 { |
|---|
| 326 | + remote-endpoint = <&pcm3168a_endpoint_p4>; |
|---|
| 327 | + ... |
|---|
| 328 | + }; |
|---|
| 329 | + }; |
|---|
| 330 | + snd_port3: port@6 { |
|---|
| 331 | + rsnd_endpoint6: endpoint { |
|---|
| 332 | + remote-endpoint = <&pcm3168a_endpoint_c>; |
|---|
| 333 | + ... |
|---|
| 334 | + }; |
|---|
| 335 | + }; |
|---|
| 336 | + }; |
|---|
| 337 | + }; |
|---|