summaryrefslogblamecommitdiff
path: root/sound/soc/generic/audio-graph-card2-custom-sample.dtsi
blob: 9efd31206c9b3f4e85a932c824fbb62842d880c4 (plain) (tree)


















                                                                                        
















                                                                           






                                                                    






                                                 
          








                                             
                              



                                                    
          



















                                                     
                 


                                                      


                                          
                                         
                              










                                                 




                                               













                                                      








                                                                  




                                                                  









                                                                  


                                                                   





                                                                    
 






                                                  



                                               

                            
                          
                                                             




                                                  



















                                                                                        





















                                                             
                  

                       


                                             







                                                                      
                                 


                                                     


                                                                                                                                       
                          
 







                                                                      
                                 


                                                     


                                                                                                                                       
                          
 








                                                                      
                                 


                                                     


                                                                                                                                   
                          
 











                                                       
                                 


                                                     


                                                                                                                                     
                          
 











                                                       
                                 


                                                     


                                                                                                                                      
                          
 







                                                               
                                 


                                                     


                                                                                                                                        
                          















































































































































                                                                                                                                             
                  

                      


                                             
                                 



                                                     








                                                                                 

                                                                                                           
 








                                                                                    

                                                                                                           
                          
 
                                 



                                                     








                                                                                 
                                                                                                             
 








                                                                                    
                                                                                                          

                          

                             

                                             






                                                 
                                 




                                                     
                                                          

                                                                                                             
                          
 











                                                             
                                 




                                                     
                                                           
                                               

                                                                                                             
                          
                  












                                                                      


                                             

                                        
                                      
                                                                                                           
 


                                                                                                           

                                        

                                                                                                         

                                              

                                                                                                         

                                          
                                                                                                             







                                                                                                             













                                                                      


                                             





                                                              
                                      
                                                                                                       
 


                                                                                                           

                                        

                                                       
                                                                                                  
                          

                                              

                                                                                                       

                                           

                                                  

                                                                                                       

                                                 

                                                  



                                                                                                          

                                          


                                                                                                           






                                                                                                            


                  
// SPDX-License-Identifier: GPL-2.0
/*
 * audio-graph-card2-custom-sample.dtsi
 *
 * Copyright (C) 2020 Renesas Electronics Corp.
 * Copyright (C) 2020 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
 *
 * This sample indicates how to use audio-graph-card2 and its
 * custom driver. "audio-graph-card2-custom-sample" is the custome driver
 * which is using audio-graph-card2.
 *
 * You can easily use this sample by adding below line on your DT file,
 * and add new CONFIG to your .config.
 *
 *	#include "../../../../../sound/soc/generic/audio-graph-card2-custom-sample.dtsi"
 *
 *	CONFIG_SND_AUDIO_GRAPH_CARD2
 *	CONFIG_SND_AUDIO_GRAPH_CARD2_CUSTOM_SAMPLE
 *	CONFIG_SND_TEST_COMPONENT
 *
 *
 * You can indicate more detail each device behavior as debug if you modify
 * "compatible" on each test-component. see below
 *
 *	test_cpu {
 *	-	compatible = "test-cpu";
 *	+	compatible = "test-cpu-verbose";
 *		...
 *	};
 *
 *	test_codec {
 *	-	compatible = "test-codec";
 *	+	compatible = "test-codec-verbose";
 *		...
 *	};
 *
 *
 * Below sample doesn't use "format" property,
 * because test-component driver (test-cpu/test-codec) is supporting
 * snd_soc_dai_ops :: .auto_selectable_formats.
 * see
 *	snd_soc_runtime_get_dai_fmt()
 *	linux/sound/soc/generic/test-component.c :: test_dai_formats
 */
/ {
	/*
	 * @ : used at links
	 *
	 * [Normal]
	 *	cpu0 <-@-----------------> codec0
	 *
	 * [Semi-Multi]
	 *
	 * CPU:Codec = 1:N
	 *
	 *			+-+
	 *	cpu7 <-@------->| |-> codec12
	 *			| |-> codec13
	 *			+-+
	 *
	 * [Multi-CPU/Codec-0]
	 *		+-+		+-+
	 *	cpu1 <--| |<-@--------->| |-> codec1
	 *	cpu2 <--| |		| |-> codec2
	 *		+-+		+-+
	 *
	 * [Multi-CPU/Codec-1]
	 *
	 *		+-+		+-+
	 *		| |<-@--------->| |
	 *		| |		| |
	 *	cpu8 <--| |<----------->| |-> codec14
	 *	cpu9 <--| |<---+------->| |-> codec15
	 *		+-+	\------>| |-> codec16
	 *				+-+
	 *
	 * [Multi-CPU/Codec-2]
	 *
	 *		+-+		+-+
	 *		| |<-@--------->| |
	 *		| |		| |
	 *	cpu10 <-| |<----------->| |-> codec17
	 *	cpu11 <-| |<-----+----->| |-> codec18
	 *	cpu12 <-| |<----/	+-+
	 *		+-+
	 *
	 * [DPCM]
	 *
	 *	CPU3/CPU4 are converting rate to 44100
	 *
	 *	FE		BE
	 *		  ****
	 *	cpu3 <-@--*  *--@-> codec3
	 *	cpu4 <-@--*  *  (44.1kHz)
	 *		  ****
	 *
	 * [DPCM-Multi]
	 *
	 * --NOTE--
	 * Multi-FE is not supported by ASoC.
	 *
	 *	FE		BE
	 *		  ****	    +-+
	 *	cpu5 <-@--*  *--@-> | | -> codec4
	 *	cpu6 <-@--*  *	    | | -> codec5
	 *		  ****	    +-+
	 *
	 * [Codec2Codec]
	 *			   +-@-> codec6
	 *			   |
	 *			   +---> codec7
	 *
	 * [Codec2Codec-Multi]
	 *
	 * --NOTE--
	 * Multi connect N:M is not supported by ASoC.
	 *
	 *				+-+
	 *			   +-@->| |-> codec8
	 *			   |	| |-> codec9
	 *			   |	+-+
	 *			   |	+-+
	 *			   +--->| |-> codec10
	 *				| |-> codec11
	 *				+-+
	 */
	audio-graph-card2-custom-sample {
		/*
		 * You can use audio-graph-card2 directly by using
		 *
		 * compatible = "audio-graph-card2";
		 */
		compatible = "audio-graph-card2-custom-sample";

			/* for [DPCM]		   */
			/* BE			FE */
		routing = "TC DAI3 Playback",	"DAI3 Playback",
			  "TC DAI3 Playback",	"DAI4 Playback",
			  "DAI3 Capture",	"TC DAI3 Capture",
			  "DAI4 Capture",	"TC DAI3 Capture",
			/* for [DPCM-Multi]	   */
			/* BE			FE */
			  "TC DAI4 Playback",	"DAI5 Playback",
			  "TC DAI5 Playback",	"DAI5 Playback",
			  "TC DAI4 Playback",	"DAI6 Playback",
			  "TC DAI5 Playback",	"DAI6 Playback",
			  "DAI5 Capture",	"TC DAI4 Capture",
			  "DAI5 Capture",	"TC DAI5 Capture",
			  "DAI6 Capture",	"TC DAI4 Capture",
			  "DAI6 Capture",	"TC DAI5 Capture",
			/* for [Codec2Codec] */
			  "TC OUT",		"TC DAI7 Playback",
			  "TC DAI6 Capture",	"TC IN",
			/* for [Codec2Codec-Multi] */
			  "TC OUT",		"TC DAI10 Playback",
			  "TC DAI8 Capture",	"TC IN",
			  "TC OUT",		"TC DAI11 Playback",
			  "TC DAI9 Capture",	"TC IN";

		links = <
			/*
			 * [Normal]: cpu side only
			 * cpu0/codec0
			 */
			 &cpu0

			/*
			 * [Semi-Multi]
			 * cpu7/codec12/codec13
			 */
			&sm0

			/*
			 * [Multi-CPU/Codec-0]: cpu side only
			 * cpu1/cpu2/codec1/codec2
			 */
			 &mcpu0

			/*
			 * [Multi-CPU/Codec-1]: cpu side only
			 * cpu8/cpu9/codec14/codec15/codec16
			 *
			 * Because it will reach to the maximum of sound minor number,
			 * disable it so far.
			 * If you want to try it, please disable some other one instead.
			 */
			//&mcpu1

			/*
			 * [Multi-CPU/Codec-2]: cpu side only
			 * cpu10/cpu11/cpu12/codec17/codec18
			 *
			 * Because it will reach to the maximum of sound minor number,
			 * disable it so far.
			 * If you want to try it, please disable some other one instead.
			 */
			//&mcpu2

			/*
			 * [DPCM]: both FE / BE
			 * cpu3/cpu4/codec3
			 */
			 &fe00 &fe01 &be0

			/*
			 * [DPCM-Multi]: both FE / BE
			 * cpu5/cpu6/codec4/codec5
			 */
			 &fe10 &fe11 &be1

			/*
			 * [Codec2Codec]: cpu side only
			 * codec6/codec7
			 */
			 &c2c

			/*
			 * [Codec2Codec-Multi]: cpu side only
			 * codec8/codec9/codec10/codec11
			 */
			 &c2c_m
		>;

		multi {
			#address-cells = <1>;
			#size-cells = <0>;

			/*
			 * [Multi-CPU-0]
			 *
			 *		+---+		+---+
			 *	cpu1 <--|A X|<-@------->|x a|-> codec1
			 *	cpu2 <--|B  |		|  b|-> codec2
			 *		+---+		+---+
			 */
			ports@0 {
				reg = <0>;
				#address-cells = <1>;
				#size-cells = <0>;
			mcpu0:	port@0 { reg = <0>; mcpu00_ep: endpoint { remote-endpoint = <&mcodec00_ep>; };};/* (X) to pair */
				port@1 { reg = <1>; mcpu01_ep: endpoint { remote-endpoint = <&cpu1_ep>;     };};/* (A) Multi Element */
				port@2 { reg = <2>; mcpu02_ep: endpoint { remote-endpoint = <&cpu2_ep>;     };};/* (B) Multi Element */
			};

			/*
			 * [Multi-Codec-0]
			 *
			 *		+---+		+---+
			 *	cpu1 <--|A X|<-@------->|x a|-> codec1
			 *	cpu2 <--|B  |		|  b|-> codec2
			 *		+---+		+---+
			 */
			ports@1 {
				reg = <1>;
				#address-cells = <1>;
				#size-cells = <0>;
				port@0 { reg = <0>; mcodec00_ep: endpoint { remote-endpoint = <&mcpu00_ep>; };};/* (x) to pair */
				port@1 { reg = <1>; mcodec01_ep: endpoint { remote-endpoint = <&codec1_ep>; };};/* (a) Multi Element */
				port@2 { reg = <2>; mcodec02_ep: endpoint { remote-endpoint = <&codec2_ep>; };};/* (b) Multi Element */
			};

			/*
			 * [DPCM-Multi]::BE
			 *
			 *	FE			BE
			 *		  ****		+---+
			 *	cpu5 <-@--*  *-----@--->|x a|-> codec4
			 *	cpu6 <-@--*  *		|  b|-> codec5
			 *		  ****		+---+
			 */
			ports@2 {
				reg = <2>;
				#address-cells = <1>;
				#size-cells = <0>;
				port@0 { reg = <0>; mbe_ep:  endpoint { remote-endpoint = <&be10_ep>;   };};/* (x) to pair */
				port@1 { reg = <1>; mbe1_ep: endpoint { remote-endpoint = <&codec4_ep>; };};/* (a) Multi Element */
				port@2 { reg = <2>; mbe2_ep: endpoint { remote-endpoint = <&codec5_ep>; };};/* (b) Multi Element */
			};

			/*
			 * [Codec2Codec-Multi]::CPU
			 *
			 *		+---+
			 *	   +-@->|X A|-> codec8
			 *	   |	|  B|-> codec9
			 *	   |	+---+
			 *	   |	+---+
			 *	   +--->|x a|-> codec10
			 *		|  b|-> codec11
			 *		+---+
			 */
			ports@3 {
				reg = <3>;
				#address-cells = <1>;
				#size-cells = <0>;
				port@0 { reg = <0>; mc2c0_ep:  endpoint { remote-endpoint = <&c2cmf_ep>;  };};/* (X) to pair */
				port@1 { reg = <1>; mc2c00_ep: endpoint { remote-endpoint = <&codec8_ep>; };};/* (A) Multi Element */
				port@2 { reg = <2>; mc2c01_ep: endpoint { remote-endpoint = <&codec9_ep>; };};/* (B) Multi Element */
			};

			/*
			 * [Codec2Codec-Multi]::Codec
			 *
			 *		+---+
			 *	   +-@->|X A|-> codec8
			 *	   |	|  B|-> codec9
			 *	   |	+---+
			 *	   |	+---+
			 *	   +--->|x a|-> codec10
			 *		|  b|-> codec11
			 *		+---+
			 */
			ports@4 {
				reg = <4>;
				#address-cells = <1>;
				#size-cells = <0>;
				port@0 { reg = <0>; mc2c1_ep:  endpoint { remote-endpoint = <&c2cmb_ep>;   };};/* (x) to pair */
				port@1 { reg = <1>; mc2c10_ep: endpoint { remote-endpoint = <&codec10_ep>; };};/* (a) Multi Element */
				port@2 { reg = <2>; mc2c11_ep: endpoint { remote-endpoint = <&codec11_ep>; };};/* (b) Multi Element */
			};

			/*
			 * [Semi-Multi]
			 *
			 *			+---+
			 *	cpu7 <-@------->|X A|-> codec12
			 *			|  B|-> codec13
			 *			+---+
			 */
			ports@5 {
				reg = <5>;
				#address-cells = <1>;
				#size-cells = <0>;
				port@0 { reg = <0>; smcodec0_ep: endpoint { remote-endpoint = <&cpu7_ep>;    };};/* (X) to pair */
				port@1 { reg = <1>; smcodec1_ep: endpoint { remote-endpoint = <&codec12_ep>; };};/* (A) Multi Element */
				port@2 { reg = <2>; smcodec2_ep: endpoint { remote-endpoint = <&codec13_ep>; };};/* (B) Multi Element */
			};

			/*
			 * [Multi-CPU-1]
			 *
			 *		+---+		+---+
			 *		|  X|<-@------->|x  |
			 *		|   |		|   |
			 *	cpu8 <--|A 1|<--------->|3 a|-> codec14
			 *	cpu9 <--|B 2|<---+----->|4 b|-> codec15
			 *		+---+	  \---->|5 c|-> codec16
			 *				+---+
			 */
			ports@6 {
				reg = <6>;
				#address-cells = <1>;
				#size-cells = <0>;
			mcpu1:	port@0 { reg = <0>; mcpu10_ep: endpoint { remote-endpoint = <&mcodec10_ep>; };};    /* (X) to pair */
				port@1 {
					#address-cells = <1>;
					#size-cells = <0>;
					reg = <1>;
					mcpu11_ep:   endpoint@0 { reg = <0>; remote-endpoint = <&cpu8_ep>;       }; /* (A) Multi Element */
					mcpu11_ep_0: endpoint@1 { reg = <1>; remote-endpoint = <&mcodec11_ep_0>; }; /* (1) connected Codec */
				};
				port@2 {
					#address-cells = <1>;
					#size-cells = <0>;
					reg = <2>;
					mcpu12_ep:   endpoint@0 { reg = <0>; remote-endpoint = <&cpu9_ep>;       }; /* (B) Multi Element */
					mcpu12_ep_0: endpoint@1 { reg = <1>; remote-endpoint = <&mcodec12_ep_0>; }; /* (2) connected Codec */
					mcpu12_ep_1: endpoint@2 { reg = <2>; remote-endpoint = <&mcodec13_ep_0>; }; /* (2) connected Codec */
				};
			};

			/*
			 * [Multi-Codec-1]
			 *
			 *		+---+		+---+
			 *		|  X|<-@------->|x  |
			 *		|   |		|   |
			 *	cpu8 <--|A 1|<--------->|3 a|-> codec14
			 *	cpu9 <--|B 2|<---+----->|4 b|-> codec15
			 *		+---+	  \---->|5 c|-> codec16
			 *				+---+
			 */
			ports@7 {
				reg = <7>;
				#address-cells = <1>;
				#size-cells = <0>;
				port@0 { reg = <0>; mcodec10_ep: endpoint { remote-endpoint = <&mcpu10_ep>;  };};   /* (x) to pair */
				port@1 {
					#address-cells = <1>;
					#size-cells = <0>;
					reg = <1>;
					mcodec11_ep:   endpoint@0 { reg = <0>; remote-endpoint = <&codec14_ep>;  }; /* (a) Multi Element */
					mcodec11_ep_0: endpoint@1 { reg = <1>; remote-endpoint = <&mcpu11_ep_0>; }; /* (3) connected CPU */
				};
				port@2 {
					#address-cells = <1>;
					#size-cells = <0>;
					reg = <2>;
					mcodec12_ep:   endpoint@0 { reg = <0>; remote-endpoint = <&codec15_ep>;  }; /* (b) Multi Element */
					mcodec12_ep_0: endpoint@1 { reg = <1>; remote-endpoint = <&mcpu12_ep_0>; }; /* (4) connected CPU */
				};
				port@3 {
					#address-cells = <1>;
					#size-cells = <0>;
					reg = <3>;
					mcodec13_ep:   endpoint@0 { reg = <0>; remote-endpoint = <&codec16_ep>;  }; /* (c) Multi Element */
					mcodec13_ep_0: endpoint@1 { reg = <1>; remote-endpoint = <&mcpu12_ep_1>; }; /* (5) connected CPU */
				};
			};

			/*
			 * [Multi-CPU-2]
			 *
			 *		+---+		+---+
			 *		|  X|<-@------->|x  |
			 *		|   |		|   |
			 *	cpu10 <-|A 1|<--------->|4 a|-> codec17
			 *	cpu11 <-|B 2|<-----+--->|5 b|-> codec18
			 *	cpu12 <-|C 3|<----/	+---+
			 *		+---+
			 */
			ports@8 {
				reg = <8>;
				#address-cells = <1>;
				#size-cells = <0>;
			mcpu2:	port@0 { reg = <0>; mcpu20_ep: endpoint { remote-endpoint = <&mcodec20_ep>; };};    /* (X) to pair */
				port@1 {
					#address-cells = <1>;
					#size-cells = <0>;
					reg = <1>;
					mcpu21_ep:   endpoint@0 { reg = <0>; remote-endpoint = <&cpu10_ep>;      }; /* (A) Multi Element */
					mcpu21_ep_0: endpoint@1 { reg = <1>; remote-endpoint = <&mcodec21_ep_0>; }; /* (1) connected Codec */
				};
				port@2 {
					#address-cells = <1>;
					#size-cells = <0>;
					reg = <2>;
					mcpu22_ep:   endpoint@0 { reg = <0>; remote-endpoint = <&cpu11_ep>;      }; /* (B) Multi Element */
					mcpu22_ep_0: endpoint@1 { reg = <1>; remote-endpoint = <&mcodec22_ep_0>; }; /* (2) connected Codec */
				};
				port@3 {
					#address-cells = <1>;
					#size-cells = <0>;
					reg = <3>;
					mcpu23_ep:   endpoint@0 { reg = <0>; remote-endpoint = <&cpu12_ep>;      }; /* (C) Multi Element */
					mcpu23_ep_0: endpoint@1 { reg = <1>; remote-endpoint = <&mcodec22_ep_1>; }; /* (3) connected Codec */
				};
			};

			/*
			 * [Multi-Codec-2]
			 *
			 *		+---+		+---+
			 *		|  X|<-@------->|x  |
			 *		|   |		|   |
			 *	cpu10 <-|A 1|<--------->|4 a|-> codec17
			 *	cpu11 <-|B 2|<-----+--->|5 b|-> codec18
			 *	cpu12 <-|C 3|<----/	+---+
			 *		+---+
			 */
			ports@9 {
				reg = <9>;
				#address-cells = <1>;
				#size-cells = <0>;
				port@0 { reg = <0>; mcodec20_ep: endpoint { remote-endpoint = <&mcpu20_ep>;  };};   /* (x) to pair */
				port@1 {
					#address-cells = <1>;
					#size-cells = <0>;
					reg = <1>;
					mcodec21_ep:   endpoint@0 { reg = <0>; remote-endpoint = <&codec17_ep>;  }; /* (a) Multi Element */
					mcodec21_ep_0: endpoint@1 { reg = <1>; remote-endpoint = <&mcpu21_ep_0>; }; /* (4) connected CPU */
				};
				port@2 {
					#address-cells = <1>;
					#size-cells = <0>;
					reg = <2>;
					mcodec22_ep:   endpoint@0 { reg = <0>; remote-endpoint = <&codec18_ep>;  }; /* (b) Multi Element */
					mcodec22_ep_0: endpoint@1 { reg = <1>; remote-endpoint = <&mcpu22_ep_0>; }; /* (5) connected CPU */
					mcodec22_ep_1: endpoint@2 { reg = <2>; remote-endpoint = <&mcpu23_ep_0>; }; /* (5) connected CPU */
				};
			};
		};

		dpcm {
			#address-cells = <1>;
			#size-cells = <0>;

			ports@0 {
				reg = <0>;

				#address-cells = <1>;
				#size-cells = <0>;
				/*
				 * [DPCM]::FE
				 *
				 *	FE				BE
				 *			****
				 *	cpu3 <-@(fe00)--*  *--(be0)@--> codec3
				 *	cpu4 <-@(fe01)--*  *		(44.1kHz)
				 *			****
				 */
			fe00:	port@0 { reg = <0>; fe00_ep: endpoint { remote-endpoint = <&cpu3_ep>; }; };
			fe01:	port@1 { reg = <1>; fe01_ep: endpoint { remote-endpoint = <&cpu4_ep>; }; };

				/*
				 * [DPCM-Multi]::FE
				 *
				 *		FE			BE
				 *			****		+-+
				 *	cpu5 <-@(fe10)--*  *---(be1)@-->| |-> codec4
				 *	cpu6 <-@(fe11)--*  *		| |-> codec5
				 *			****		+-+
				 */
			fe10:	port@2 { reg = <2>; fe10_ep: endpoint { remote-endpoint = <&cpu5_ep>; }; };
			fe11:	port@3 { reg = <3>; fe11_ep: endpoint { remote-endpoint = <&cpu6_ep>; }; };
			};

			ports@1 {
				reg = <1>;

				#address-cells = <1>;
				#size-cells = <0>;
				/*
				 * [DPCM]::BE
				 *
				 *	FE				BE
				 *			****
				 *	cpu3 <-@(fe00)--*  *--(be0)@--> codec3
				 *	cpu4 <-@(fe01)--*  *		(44.1kHz)
				 *			****
				 */
			be0:	port@0 { reg = <0>; be00_ep: endpoint { remote-endpoint = <&codec3_ep>; }; };

				/*
				 * [DPCM-Multi]::BE
				 *
				 *		FE			BE
				 *			****		+-+
				 *	cpu5 <-@(fe10)--*  *---(be1)@-->| |-> codec4
				 *	cpu6 <-@(fe11)--*  *		| |-> codec5
				 *			****		+-+
				 */
			be1:	port@1 { reg = <1>; be10_ep: endpoint { remote-endpoint = <&mbe_ep>; }; };
			};
		};

		codec2codec {
			#address-cells = <1>;
			#size-cells = <0>;
			/*
			 * [Codec2Codec]
			 *
			 *	+-@(c2c)-> codec6
			 *	|
			 *	+--------> codec7
			 */
			ports@0 {
				reg = <0>;

				#address-cells = <1>;
				#size-cells = <0>;

				/* use default settings */
			c2c:	port@0 { reg = <0>; c2cf_ep: endpoint { remote-endpoint = <&codec6_ep>; }; };
				port@1 { reg = <1>; c2cb_ep: endpoint { remote-endpoint = <&codec7_ep>; }; };
			};

			/*
			 * [Codec2Codec-Multi]
			 *
			 *			+-+
			 *	   +-@(c2c_m)-->| |-> codec8
			 *	   |		| |-> codec9
			 *	   |		+-+
			 *	   |		+-+
			 *	   +----------->| |-> codec10
			 *			| |-> codec11
			 *			+-+
			 */
			ports@1 {
				reg = <1>;

				#address-cells = <1>;
				#size-cells = <0>;

				/* use original settings */
				rate = <48000>;
			c2c_m:	port@0 { reg = <0>; c2cmf_ep: endpoint { remote-endpoint = <&mc2c0_ep>; }; };
				port@1 { reg = <1>; c2cmb_ep: endpoint { remote-endpoint = <&mc2c1_ep>; }; };
			};
		};
	};

	test_cpu {
		/*
		 * update compatible to indicate more detail behaviour
		 * if you want. see test-compatible for more detail.
		 *
		 * ex)
		 *	- compatible = "test-cpu";
		 *	+ compatible = "test-cpu-verbose";
		 */
		compatible = "test-cpu";
		ports {
			#address-cells = <1>;
			#size-cells = <0>;

			bitclock-master;
			frame-master;
			/* [Normal] */
			cpu0: port@0 { reg = <0>; cpu0_ep: endpoint { remote-endpoint = <&codec0_ep>; }; };

			/* [Multi-CPU-0] */
			      port@1 { reg = <1>; cpu1_ep: endpoint { remote-endpoint = <&mcpu01_ep>; }; };
			      port@2 { reg = <2>; cpu2_ep: endpoint { remote-endpoint = <&mcpu02_ep>; }; };

			/* [DPCM]::FE */
			      port@3 { reg = <3>; cpu3_ep: endpoint { remote-endpoint = <&fe00_ep>; }; };
			      port@4 { reg = <4>; cpu4_ep: endpoint { remote-endpoint = <&fe01_ep>; }; };

			/* [DPCM-Multi]::FE */
			      port@5 { reg = <5>; cpu5_ep: endpoint { remote-endpoint = <&fe10_ep>; }; };
			      port@6 { reg = <6>; cpu6_ep: endpoint { remote-endpoint = <&fe11_ep>; }; };

			/* [Semi-Multi] */
			sm0:  port@7 { reg = <7>; cpu7_ep: endpoint { remote-endpoint = <&smcodec0_ep>; }; };

			/* [Multi-CPU-1] */
			      port@8 { reg = <8>; cpu8_ep: endpoint { remote-endpoint = <&mcpu11_ep>;   }; };
			      port@9 { reg = <9>; cpu9_ep: endpoint { remote-endpoint = <&mcpu12_ep>;   }; };
			/* [Multi-CPU-2] */
			      port@a { reg = <10>; cpu10_ep: endpoint { remote-endpoint = <&mcpu21_ep>; }; };
			      port@b { reg = <11>; cpu11_ep: endpoint { remote-endpoint = <&mcpu22_ep>; }; };
			      port@c { reg = <12>; cpu12_ep: endpoint { remote-endpoint = <&mcpu23_ep>; }; };
		};
	};

	test_codec {
		/*
		 * update compatible to indicate more detail behaviour
		 * if you want. see test-compatible for more detail.
		 *
		 * ex)
		 *	- compatible = "test-codec";
		 *	+ compatible = "test-codec-verbose";
		 */
		compatible = "test-codec";
		ports {
			#address-cells = <1>;
			#size-cells = <0>;

			/*
			 * prefix can be added to *component*,
			 * see audio-graph-card2::routing
			 */
			prefix = "TC";

			/* [Normal] */
			port@0  { reg = <0>; codec0_ep:  endpoint { remote-endpoint = <&cpu0_ep>; }; };

			/* [Multi-Codec-0] */
			port@1  { reg = <1>; codec1_ep:  endpoint { remote-endpoint = <&mcodec01_ep>; }; };
			port@2  { reg = <2>; codec2_ep:  endpoint { remote-endpoint = <&mcodec02_ep>; }; };

			/* [DPCM]::BE */
			port@3  {
				convert-rate = <44100>;
				reg = <3>; codec3_ep:  endpoint { remote-endpoint = <&be00_ep>; };
			};

			/* [DPCM-Multi]::BE */
			port@4  { reg = <4>; codec4_ep:  endpoint { remote-endpoint = <&mbe1_ep>; }; };
			port@5  { reg = <5>; codec5_ep:  endpoint { remote-endpoint = <&mbe2_ep>; }; };

			/* [Codec2Codec] */
			port@6  { bitclock-master;
				  frame-master;
				  reg = <6>; codec6_ep:  endpoint { remote-endpoint = <&c2cf_ep>; }; };
			port@7  { reg = <7>; codec7_ep:  endpoint { remote-endpoint = <&c2cb_ep>; }; };

			/* [Codec2Codec-Multi] */
			port@8  { bitclock-master;
				  frame-master;
				  reg = <8>;  codec8_ep:  endpoint { remote-endpoint = <&mc2c00_ep>; }; };
			port@9  { reg = <9>;  codec9_ep:  endpoint { remote-endpoint = <&mc2c01_ep>; }; };
			port@a  { reg = <10>; codec10_ep: endpoint { remote-endpoint = <&mc2c10_ep>; }; };
			port@b  { reg = <11>; codec11_ep: endpoint { remote-endpoint = <&mc2c11_ep>; }; };

			/* [Semi-Multi] */
			port@c { reg = <12>; codec12_ep: endpoint { remote-endpoint = <&smcodec1_ep>; }; };
			port@d { reg = <13>; codec13_ep: endpoint { remote-endpoint = <&smcodec2_ep>; }; };

			/* [Multi-Codec-1] */
			port@e  { reg = <14>; codec14_ep: endpoint { remote-endpoint = <&mcodec11_ep>; }; };
			port@f  { reg = <15>; codec15_ep: endpoint { remote-endpoint = <&mcodec12_ep>; }; };
			port@10 { reg = <16>; codec16_ep: endpoint { remote-endpoint = <&mcodec13_ep>; }; };
			/* [Multi-Codec-2] */
			port@11 { reg = <17>; codec17_ep: endpoint { remote-endpoint = <&mcodec21_ep>; }; };
			port@12 { reg = <18>; codec18_ep: endpoint { remote-endpoint = <&mcodec22_ep>; }; };
		};
	};
};