1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * audio-graph-card2-custom-sample.dtsi 4 * 5 * Copyright (C) 2020 Renesas Electronics Corp. 6 * Copyright (C) 2020 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> 7 * 8 * This sample indicates how to use audio-graph-card2 and its 9 * custom driver. "audio-graph-card2-custom-sample" is the custome driver 10 * which is using audio-graph-card2. 11 * 12 * You can easily use this sample by adding below line on your DT file, 13 * and add new CONFIG to your .config. 14 * 15 * #include "../../../../../sound/soc/generic/audio-graph-card2-custom-sample.dtsi" 16 * 17 * CONFIG_SND_AUDIO_GRAPH_CARD2 18 * CONFIG_SND_AUDIO_GRAPH_CARD2_CUSTOM_SAMPLE 19 * CONFIG_SND_TEST_COMPONENT 20 * 21 * 22 * You can indicate more detail each device behavior as debug if you modify 23 * "compatible" on each test-component. see below 24 * 25 * test_cpu { 26 * - compatible = "test-cpu"; 27 * + compatible = "test-cpu-verbose"; 28 * ... 29 * }; 30 * 31 * test_codec { 32 * - compatible = "test-codec"; 33 * + compatible = "test-codec-verbose"; 34 * ... 35 * }; 36 * 37 * 38 * Below sample doesn't use "format" property, 39 * because test-component driver (test-cpu/test-codec) is supporting 40 * snd_soc_dai_ops :: .auto_selectable_formats. 41 * see 42 * snd_soc_runtime_get_dai_fmt() 43 * linux/sound/soc/generic/test-component.c :: test_dai_formats 44 */ 45 / { 46 /* 47 * @ : used at links 48 * 49 * [Normal] 50 * cpu0 <-@-----------------> codec0 51 * 52 * [Semi-Multi] 53 * 54 * CPU:Codec = 1:N 55 * 56 * +-+ 57 * cpu7 <-@------->| |-> codec12 58 * | |-> codec13 59 * +-+ 60 * 61 * [Multi-CPU/Codec-0] 62 * +-+ +-+ 63 * cpu1 <--| |<-@--------->| |-> codec1 64 * cpu2 <--| | | |-> codec2 65 * +-+ +-+ 66 * 67 * [Multi-CPU/Codec-1] 68 * 69 * +-+ +-+ 70 * | |<-@--------->| | 71 * | | | | 72 * cpu8 <--| |<----------->| |-> codec14 73 * cpu9 <--| |<---+------->| |-> codec15 74 * +-+ \------>| |-> codec16 75 * +-+ 76 * 77 * [Multi-CPU/Codec-2] 78 * 79 * +-+ +-+ 80 * | |<-@--------->| | 81 * | | | | 82 * cpu10 <-| |<----------->| |-> codec17 83 * cpu11 <-| |<-----+----->| |-> codec18 84 * cpu12 <-| |<----/ +-+ 85 * +-+ 86 * 87 * [DPCM] 88 * 89 * CPU3/CPU4 are converting rate to 44100 90 * 91 * FE BE 92 * **** 93 * cpu3 <-@--* *--@-> codec3 94 * cpu4 <-@--* * (44.1kHz) 95 * **** 96 * 97 * [DPCM-Multi] 98 * 99 * --NOTE-- 100 * Multi-FE is not supported by ASoC. 101 * 102 * FE BE 103 * **** +-+ 104 * cpu5 <-@--* *--@-> | | -> codec4 105 * cpu6 <-@--* * | | -> codec5 106 * **** +-+ 107 * 108 * [Codec2Codec] 109 * +-@-> codec6 110 * | 111 * +---> codec7 112 * 113 * [Codec2Codec-Multi] 114 * 115 * --NOTE-- 116 * Multi connect N:M is not supported by ASoC. 117 * 118 * +-+ 119 * +-@->| |-> codec8 120 * | | |-> codec9 121 * | +-+ 122 * | +-+ 123 * +--->| |-> codec10 124 * | |-> codec11 125 * +-+ 126 */ 127 audio-graph-card2-custom-sample { 128 /* 129 * You can use audio-graph-card2 directly by using 130 * 131 * compatible = "audio-graph-card2"; 132 */ 133 compatible = "audio-graph-card2-custom-sample"; 134 135 /* for [DPCM] */ 136 /* BE FE */ 137 routing = "TC DAI3 Playback", "DAI3 Playback", 138 "TC DAI3 Playback", "DAI4 Playback", 139 "DAI3 Capture", "TC DAI3 Capture", 140 "DAI4 Capture", "TC DAI3 Capture", 141 /* for [DPCM-Multi] */ 142 /* BE FE */ 143 "TC DAI4 Playback", "DAI5 Playback", 144 "TC DAI5 Playback", "DAI5 Playback", 145 "TC DAI4 Playback", "DAI6 Playback", 146 "TC DAI5 Playback", "DAI6 Playback", 147 "DAI5 Capture", "TC DAI4 Capture", 148 "DAI5 Capture", "TC DAI5 Capture", 149 "DAI6 Capture", "TC DAI4 Capture", 150 "DAI6 Capture", "TC DAI5 Capture", 151 /* for [Codec2Codec] */ 152 "TC OUT", "TC DAI7 Playback", 153 "TC DAI6 Capture", "TC IN", 154 /* for [Codec2Codec-Multi] */ 155 "TC OUT", "TC DAI10 Playback", 156 "TC DAI8 Capture", "TC IN", 157 "TC OUT", "TC DAI11 Playback", 158 "TC DAI9 Capture", "TC IN"; 159 160 links = < 161 /* 162 * [Normal]: cpu side only 163 * cpu0/codec0 164 */ 165 &cpu0 166 167 /* 168 * [Semi-Multi] 169 * cpu7/codec12/codec13 170 */ 171 &sm0 172 173 /* 174 * [Multi-CPU/Codec-0]: cpu side only 175 * cpu1/cpu2/codec1/codec2 176 */ 177 &mcpu0 178 179 /* 180 * [Multi-CPU/Codec-1]: cpu side only 181 * cpu8/cpu9/codec14/codec15/codec16 182 * 183 * Because it will reach to the maximum of sound minor number, 184 * disable it so far. 185 * If you want to try it, please disable some other one instead. 186 */ 187 //&mcpu1 188 189 /* 190 * [Multi-CPU/Codec-2]: cpu side only 191 * cpu10/cpu11/cpu12/codec17/codec18 192 * 193 * Because it will reach to the maximum of sound minor number, 194 * disable it so far. 195 * If you want to try it, please disable some other one instead. 196 */ 197 //&mcpu2 198 199 /* 200 * [DPCM]: both FE / BE 201 * cpu3/cpu4/codec3 202 */ 203 &fe00 &fe01 &be0 204 205 /* 206 * [DPCM-Multi]: both FE / BE 207 * cpu5/cpu6/codec4/codec5 208 */ 209 &fe10 &fe11 &be1 210 211 /* 212 * [Codec2Codec]: cpu side only 213 * codec6/codec7 214 */ 215 &c2c 216 217 /* 218 * [Codec2Codec-Multi]: cpu side only 219 * codec8/codec9/codec10/codec11 220 */ 221 &c2c_m 222 >; 223 224 multi { 225 #address-cells = <1>; 226 #size-cells = <0>; 227 228 /* 229 * [Multi-CPU-0] 230 * 231 * +---+ +---+ 232 * cpu1 <--|A X|<-@------->|x a|-> codec1 233 * cpu2 <--|B | | b|-> codec2 234 * +---+ +---+ 235 */ 236 ports@0 { 237 reg = <0>; 238 #address-cells = <1>; 239 #size-cells = <0>; 240 mcpu0: port@0 { reg = <0>; mcpu00_ep: endpoint { remote-endpoint = <&mcodec00_ep>; };};/* (X) to pair */ 241 port@1 { reg = <1>; mcpu01_ep: endpoint { remote-endpoint = <&cpu1_ep>; };};/* (A) Multi Element */ 242 port@2 { reg = <2>; mcpu02_ep: endpoint { remote-endpoint = <&cpu2_ep>; };};/* (B) Multi Element */ 243 }; 244 245 /* 246 * [Multi-Codec-0] 247 * 248 * +---+ +---+ 249 * cpu1 <--|A X|<-@------->|x a|-> codec1 250 * cpu2 <--|B | | b|-> codec2 251 * +---+ +---+ 252 */ 253 ports@1 { 254 reg = <1>; 255 #address-cells = <1>; 256 #size-cells = <0>; 257 port@0 { reg = <0>; mcodec00_ep: endpoint { remote-endpoint = <&mcpu00_ep>; };};/* (x) to pair */ 258 port@1 { reg = <1>; mcodec01_ep: endpoint { remote-endpoint = <&codec1_ep>; };};/* (a) Multi Element */ 259 port@2 { reg = <2>; mcodec02_ep: endpoint { remote-endpoint = <&codec2_ep>; };};/* (b) Multi Element */ 260 }; 261 262 /* 263 * [DPCM-Multi]::BE 264 * 265 * FE BE 266 * **** +---+ 267 * cpu5 <-@--* *-----@--->|x a|-> codec4 268 * cpu6 <-@--* * | b|-> codec5 269 * **** +---+ 270 */ 271 ports@2 { 272 reg = <2>; 273 #address-cells = <1>; 274 #size-cells = <0>; 275 port@0 { reg = <0>; mbe_ep: endpoint { remote-endpoint = <&be10_ep>; };};/* (x) to pair */ 276 port@1 { reg = <1>; mbe1_ep: endpoint { remote-endpoint = <&codec4_ep>; };};/* (a) Multi Element */ 277 port@2 { reg = <2>; mbe2_ep: endpoint { remote-endpoint = <&codec5_ep>; };};/* (b) Multi Element */ 278 }; 279 280 /* 281 * [Codec2Codec-Multi]::CPU 282 * 283 * +---+ 284 * +-@->|X A|-> codec8 285 * | | B|-> codec9 286 * | +---+ 287 * | +---+ 288 * +--->|x a|-> codec10 289 * | b|-> codec11 290 * +---+ 291 */ 292 ports@3 { 293 reg = <3>; 294 #address-cells = <1>; 295 #size-cells = <0>; 296 port@0 { reg = <0>; mc2c0_ep: endpoint { remote-endpoint = <&c2cmf_ep>; };};/* (X) to pair */ 297 port@1 { reg = <1>; mc2c00_ep: endpoint { remote-endpoint = <&codec8_ep>; };};/* (A) Multi Element */ 298 port@2 { reg = <2>; mc2c01_ep: endpoint { remote-endpoint = <&codec9_ep>; };};/* (B) Multi Element */ 299 }; 300 301 /* 302 * [Codec2Codec-Multi]::Codec 303 * 304 * +---+ 305 * +-@->|X A|-> codec8 306 * | | B|-> codec9 307 * | +---+ 308 * | +---+ 309 * +--->|x a|-> codec10 310 * | b|-> codec11 311 * +---+ 312 */ 313 ports@4 { 314 reg = <4>; 315 #address-cells = <1>; 316 #size-cells = <0>; 317 port@0 { reg = <0>; mc2c1_ep: endpoint { remote-endpoint = <&c2cmb_ep>; };};/* (x) to pair */ 318 port@1 { reg = <1>; mc2c10_ep: endpoint { remote-endpoint = <&codec10_ep>; };};/* (a) Multi Element */ 319 port@2 { reg = <2>; mc2c11_ep: endpoint { remote-endpoint = <&codec11_ep>; };};/* (b) Multi Element */ 320 }; 321 322 /* 323 * [Semi-Multi] 324 * 325 * +---+ 326 * cpu7 <-@------->|X A|-> codec12 327 * | B|-> codec13 328 * +---+ 329 */ 330 ports@5 { 331 reg = <5>; 332 #address-cells = <1>; 333 #size-cells = <0>; 334 port@0 { reg = <0>; smcodec0_ep: endpoint { remote-endpoint = <&cpu7_ep>; };};/* (X) to pair */ 335 port@1 { reg = <1>; smcodec1_ep: endpoint { remote-endpoint = <&codec12_ep>; };};/* (A) Multi Element */ 336 port@2 { reg = <2>; smcodec2_ep: endpoint { remote-endpoint = <&codec13_ep>; };};/* (B) Multi Element */ 337 }; 338 339 /* 340 * [Multi-CPU-1] 341 * 342 * +---+ +---+ 343 * | X|<-@------->|x | 344 * | | | | 345 * cpu8 <--|A 1|<--------->|3 a|-> codec14 346 * cpu9 <--|B 2|<---+----->|4 b|-> codec15 347 * +---+ \---->|5 c|-> codec16 348 * +---+ 349 */ 350 ports@6 { 351 reg = <6>; 352 #address-cells = <1>; 353 #size-cells = <0>; 354 mcpu1: port@0 { reg = <0>; mcpu10_ep: endpoint { remote-endpoint = <&mcodec10_ep>; };}; /* (X) to pair */ 355 port@1 { 356 #address-cells = <1>; 357 #size-cells = <0>; 358 reg = <1>; 359 mcpu11_ep: endpoint@0 { reg = <0>; remote-endpoint = <&cpu8_ep>; }; /* (A) Multi Element */ 360 mcpu11_ep_0: endpoint@1 { reg = <1>; remote-endpoint = <&mcodec11_ep_0>; }; /* (1) connected Codec */ 361 }; 362 port@2 { 363 #address-cells = <1>; 364 #size-cells = <0>; 365 reg = <2>; 366 mcpu12_ep: endpoint@0 { reg = <0>; remote-endpoint = <&cpu9_ep>; }; /* (B) Multi Element */ 367 mcpu12_ep_0: endpoint@1 { reg = <1>; remote-endpoint = <&mcodec12_ep_0>; }; /* (2) connected Codec */ 368 mcpu12_ep_1: endpoint@2 { reg = <2>; remote-endpoint = <&mcodec13_ep_0>; }; /* (2) connected Codec */ 369 }; 370 }; 371 372 /* 373 * [Multi-Codec-1] 374 * 375 * +---+ +---+ 376 * | X|<-@------->|x | 377 * | | | | 378 * cpu8 <--|A 1|<--------->|3 a|-> codec14 379 * cpu9 <--|B 2|<---+----->|4 b|-> codec15 380 * +---+ \---->|5 c|-> codec16 381 * +---+ 382 */ 383 ports@7 { 384 reg = <7>; 385 #address-cells = <1>; 386 #size-cells = <0>; 387 port@0 { reg = <0>; mcodec10_ep: endpoint { remote-endpoint = <&mcpu10_ep>; };}; /* (x) to pair */ 388 port@1 { 389 #address-cells = <1>; 390 #size-cells = <0>; 391 reg = <1>; 392 mcodec11_ep: endpoint@0 { reg = <0>; remote-endpoint = <&codec14_ep>; }; /* (a) Multi Element */ 393 mcodec11_ep_0: endpoint@1 { reg = <1>; remote-endpoint = <&mcpu11_ep_0>; }; /* (3) connected CPU */ 394 }; 395 port@2 { 396 #address-cells = <1>; 397 #size-cells = <0>; 398 reg = <2>; 399 mcodec12_ep: endpoint@0 { reg = <0>; remote-endpoint = <&codec15_ep>; }; /* (b) Multi Element */ 400 mcodec12_ep_0: endpoint@1 { reg = <1>; remote-endpoint = <&mcpu12_ep_0>; }; /* (4) connected CPU */ 401 }; 402 port@3 { 403 #address-cells = <1>; 404 #size-cells = <0>; 405 reg = <3>; 406 mcodec13_ep: endpoint@0 { reg = <0>; remote-endpoint = <&codec16_ep>; }; /* (c) Multi Element */ 407 mcodec13_ep_0: endpoint@1 { reg = <1>; remote-endpoint = <&mcpu12_ep_1>; }; /* (5) connected CPU */ 408 }; 409 }; 410 411 /* 412 * [Multi-CPU-2] 413 * 414 * +---+ +---+ 415 * | X|<-@------->|x | 416 * | | | | 417 * cpu10 <-|A 1|<--------->|4 a|-> codec17 418 * cpu11 <-|B 2|<-----+--->|5 b|-> codec18 419 * cpu12 <-|C 3|<----/ +---+ 420 * +---+ 421 */ 422 ports@8 { 423 reg = <8>; 424 #address-cells = <1>; 425 #size-cells = <0>; 426 mcpu2: port@0 { reg = <0>; mcpu20_ep: endpoint { remote-endpoint = <&mcodec20_ep>; };}; /* (X) to pair */ 427 port@1 { 428 #address-cells = <1>; 429 #size-cells = <0>; 430 reg = <1>; 431 mcpu21_ep: endpoint@0 { reg = <0>; remote-endpoint = <&cpu10_ep>; }; /* (A) Multi Element */ 432 mcpu21_ep_0: endpoint@1 { reg = <1>; remote-endpoint = <&mcodec21_ep_0>; }; /* (1) connected Codec */ 433 }; 434 port@2 { 435 #address-cells = <1>; 436 #size-cells = <0>; 437 reg = <2>; 438 mcpu22_ep: endpoint@0 { reg = <0>; remote-endpoint = <&cpu11_ep>; }; /* (B) Multi Element */ 439 mcpu22_ep_0: endpoint@1 { reg = <1>; remote-endpoint = <&mcodec22_ep_0>; }; /* (2) connected Codec */ 440 }; 441 port@3 { 442 #address-cells = <1>; 443 #size-cells = <0>; 444 reg = <3>; 445 mcpu23_ep: endpoint@0 { reg = <0>; remote-endpoint = <&cpu12_ep>; }; /* (C) Multi Element */ 446 mcpu23_ep_0: endpoint@1 { reg = <1>; remote-endpoint = <&mcodec22_ep_1>; }; /* (3) connected Codec */ 447 }; 448 }; 449 450 /* 451 * [Multi-Codec-2] 452 * 453 * +---+ +---+ 454 * | X|<-@------->|x | 455 * | | | | 456 * cpu10 <-|A 1|<--------->|4 a|-> codec17 457 * cpu11 <-|B 2|<-----+--->|5 b|-> codec18 458 * cpu12 <-|C 3|<----/ +---+ 459 * +---+ 460 */ 461 ports@9 { 462 reg = <9>; 463 #address-cells = <1>; 464 #size-cells = <0>; 465 port@0 { reg = <0>; mcodec20_ep: endpoint { remote-endpoint = <&mcpu20_ep>; };}; /* (x) to pair */ 466 port@1 { 467 #address-cells = <1>; 468 #size-cells = <0>; 469 reg = <1>; 470 mcodec21_ep: endpoint@0 { reg = <0>; remote-endpoint = <&codec17_ep>; }; /* (a) Multi Element */ 471 mcodec21_ep_0: endpoint@1 { reg = <1>; remote-endpoint = <&mcpu21_ep_0>; }; /* (4) connected CPU */ 472 }; 473 port@2 { 474 #address-cells = <1>; 475 #size-cells = <0>; 476 reg = <2>; 477 mcodec22_ep: endpoint@0 { reg = <0>; remote-endpoint = <&codec18_ep>; }; /* (b) Multi Element */ 478 mcodec22_ep_0: endpoint@1 { reg = <1>; remote-endpoint = <&mcpu22_ep_0>; }; /* (5) connected CPU */ 479 mcodec22_ep_1: endpoint@2 { reg = <2>; remote-endpoint = <&mcpu23_ep_0>; }; /* (5) connected CPU */ 480 }; 481 }; 482 }; 483 484 dpcm { 485 #address-cells = <1>; 486 #size-cells = <0>; 487 488 ports@0 { 489 reg = <0>; 490 491 #address-cells = <1>; 492 #size-cells = <0>; 493 /* 494 * [DPCM]::FE 495 * 496 * FE BE 497 * **** 498 * cpu3 <-@(fe00)--* *--(be0)@--> codec3 499 * cpu4 <-@(fe01)--* * (44.1kHz) 500 * **** 501 */ 502 fe00: port@0 { reg = <0>; fe00_ep: endpoint { remote-endpoint = <&cpu3_ep>; }; }; 503 fe01: port@1 { reg = <1>; fe01_ep: endpoint { remote-endpoint = <&cpu4_ep>; }; }; 504 505 /* 506 * [DPCM-Multi]::FE 507 * 508 * FE BE 509 * **** +-+ 510 * cpu5 <-@(fe10)--* *---(be1)@-->| |-> codec4 511 * cpu6 <-@(fe11)--* * | |-> codec5 512 * **** +-+ 513 */ 514 fe10: port@2 { reg = <2>; fe10_ep: endpoint { remote-endpoint = <&cpu5_ep>; }; }; 515 fe11: port@3 { reg = <3>; fe11_ep: endpoint { remote-endpoint = <&cpu6_ep>; }; }; 516 }; 517 518 ports@1 { 519 reg = <1>; 520 521 #address-cells = <1>; 522 #size-cells = <0>; 523 /* 524 * [DPCM]::BE 525 * 526 * FE BE 527 * **** 528 * cpu3 <-@(fe00)--* *--(be0)@--> codec3 529 * cpu4 <-@(fe01)--* * (44.1kHz) 530 * **** 531 */ 532 be0: port@0 { reg = <0>; be00_ep: endpoint { remote-endpoint = <&codec3_ep>; }; }; 533 534 /* 535 * [DPCM-Multi]::BE 536 * 537 * FE BE 538 * **** +-+ 539 * cpu5 <-@(fe10)--* *---(be1)@-->| |-> codec4 540 * cpu6 <-@(fe11)--* * | |-> codec5 541 * **** +-+ 542 */ 543 be1: port@1 { reg = <1>; be10_ep: endpoint { remote-endpoint = <&mbe_ep>; }; }; 544 }; 545 }; 546 547 codec2codec { 548 #address-cells = <1>; 549 #size-cells = <0>; 550 /* 551 * [Codec2Codec] 552 * 553 * +-@(c2c)-> codec6 554 * | 555 * +--------> codec7 556 */ 557 ports@0 { 558 reg = <0>; 559 560 #address-cells = <1>; 561 #size-cells = <0>; 562 563 /* use default settings */ 564 c2c: port@0 { reg = <0>; c2cf_ep: endpoint { remote-endpoint = <&codec6_ep>; }; }; 565 port@1 { reg = <1>; c2cb_ep: endpoint { remote-endpoint = <&codec7_ep>; }; }; 566 }; 567 568 /* 569 * [Codec2Codec-Multi] 570 * 571 * +-+ 572 * +-@(c2c_m)-->| |-> codec8 573 * | | |-> codec9 574 * | +-+ 575 * | +-+ 576 * +----------->| |-> codec10 577 * | |-> codec11 578 * +-+ 579 */ 580 ports@1 { 581 reg = <1>; 582 583 #address-cells = <1>; 584 #size-cells = <0>; 585 586 /* use original settings */ 587 rate = <48000>; 588 c2c_m: port@0 { reg = <0>; c2cmf_ep: endpoint { remote-endpoint = <&mc2c0_ep>; }; }; 589 port@1 { reg = <1>; c2cmb_ep: endpoint { remote-endpoint = <&mc2c1_ep>; }; }; 590 }; 591 }; 592 }; 593 594 test_cpu { 595 /* 596 * update compatible to indicate more detail behaviour 597 * if you want. see test-compatible for more detail. 598 * 599 * ex) 600 * - compatible = "test-cpu"; 601 * + compatible = "test-cpu-verbose"; 602 */ 603 compatible = "test-cpu"; 604 ports { 605 #address-cells = <1>; 606 #size-cells = <0>; 607 608 bitclock-master; 609 frame-master; 610 /* [Normal] */ 611 cpu0: port@0 { reg = <0>; cpu0_ep: endpoint { remote-endpoint = <&codec0_ep>; }; }; 612 613 /* [Multi-CPU-0] */ 614 port@1 { reg = <1>; cpu1_ep: endpoint { remote-endpoint = <&mcpu01_ep>; }; }; 615 port@2 { reg = <2>; cpu2_ep: endpoint { remote-endpoint = <&mcpu02_ep>; }; }; 616 617 /* [DPCM]::FE */ 618 port@3 { reg = <3>; cpu3_ep: endpoint { remote-endpoint = <&fe00_ep>; }; }; 619 port@4 { reg = <4>; cpu4_ep: endpoint { remote-endpoint = <&fe01_ep>; }; }; 620 621 /* [DPCM-Multi]::FE */ 622 port@5 { reg = <5>; cpu5_ep: endpoint { remote-endpoint = <&fe10_ep>; }; }; 623 port@6 { reg = <6>; cpu6_ep: endpoint { remote-endpoint = <&fe11_ep>; }; }; 624 625 /* [Semi-Multi] */ 626 sm0: port@7 { reg = <7>; cpu7_ep: endpoint { remote-endpoint = <&smcodec0_ep>; }; }; 627 628 /* [Multi-CPU-1] */ 629 port@8 { reg = <8>; cpu8_ep: endpoint { remote-endpoint = <&mcpu11_ep>; }; }; 630 port@9 { reg = <9>; cpu9_ep: endpoint { remote-endpoint = <&mcpu12_ep>; }; }; 631 /* [Multi-CPU-2] */ 632 port@a { reg = <10>; cpu10_ep: endpoint { remote-endpoint = <&mcpu21_ep>; }; }; 633 port@b { reg = <11>; cpu11_ep: endpoint { remote-endpoint = <&mcpu22_ep>; }; }; 634 port@c { reg = <12>; cpu12_ep: endpoint { remote-endpoint = <&mcpu23_ep>; }; }; 635 }; 636 }; 637 638 test_codec { 639 /* 640 * update compatible to indicate more detail behaviour 641 * if you want. see test-compatible for more detail. 642 * 643 * ex) 644 * - compatible = "test-codec"; 645 * + compatible = "test-codec-verbose"; 646 */ 647 compatible = "test-codec"; 648 ports { 649 #address-cells = <1>; 650 #size-cells = <0>; 651 652 /* 653 * prefix can be added to *component*, 654 * see audio-graph-card2::routing 655 */ 656 prefix = "TC"; 657 658 /* [Normal] */ 659 port@0 { reg = <0>; codec0_ep: endpoint { remote-endpoint = <&cpu0_ep>; }; }; 660 661 /* [Multi-Codec-0] */ 662 port@1 { reg = <1>; codec1_ep: endpoint { remote-endpoint = <&mcodec01_ep>; }; }; 663 port@2 { reg = <2>; codec2_ep: endpoint { remote-endpoint = <&mcodec02_ep>; }; }; 664 665 /* [DPCM]::BE */ 666 port@3 { 667 convert-rate = <44100>; 668 reg = <3>; codec3_ep: endpoint { remote-endpoint = <&be00_ep>; }; 669 }; 670 671 /* [DPCM-Multi]::BE */ 672 port@4 { reg = <4>; codec4_ep: endpoint { remote-endpoint = <&mbe1_ep>; }; }; 673 port@5 { reg = <5>; codec5_ep: endpoint { remote-endpoint = <&mbe2_ep>; }; }; 674 675 /* [Codec2Codec] */ 676 port@6 { bitclock-master; 677 frame-master; 678 reg = <6>; codec6_ep: endpoint { remote-endpoint = <&c2cf_ep>; }; }; 679 port@7 { reg = <7>; codec7_ep: endpoint { remote-endpoint = <&c2cb_ep>; }; }; 680 681 /* [Codec2Codec-Multi] */ 682 port@8 { bitclock-master; 683 frame-master; 684 reg = <8>; codec8_ep: endpoint { remote-endpoint = <&mc2c00_ep>; }; }; 685 port@9 { reg = <9>; codec9_ep: endpoint { remote-endpoint = <&mc2c01_ep>; }; }; 686 port@a { reg = <10>; codec10_ep: endpoint { remote-endpoint = <&mc2c10_ep>; }; }; 687 port@b { reg = <11>; codec11_ep: endpoint { remote-endpoint = <&mc2c11_ep>; }; }; 688 689 /* [Semi-Multi] */ 690 port@c { reg = <12>; codec12_ep: endpoint { remote-endpoint = <&smcodec1_ep>; }; }; 691 port@d { reg = <13>; codec13_ep: endpoint { remote-endpoint = <&smcodec2_ep>; }; }; 692 693 /* [Multi-Codec-1] */ 694 port@e { reg = <14>; codec14_ep: endpoint { remote-endpoint = <&mcodec11_ep>; }; }; 695 port@f { reg = <15>; codec15_ep: endpoint { remote-endpoint = <&mcodec12_ep>; }; }; 696 port@10 { reg = <16>; codec16_ep: endpoint { remote-endpoint = <&mcodec13_ep>; }; }; 697 /* [Multi-Codec-2] */ 698 port@11 { reg = <17>; codec17_ep: endpoint { remote-endpoint = <&mcodec21_ep>; }; }; 699 port@12 { reg = <18>; codec18_ep: endpoint { remote-endpoint = <&mcodec22_ep>; }; }; 700 }; 701 }; 702 };
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.