// 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>; }; };
		};
	};
};
