// 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";
 *		...
 *	};
 *
 */
/ {
	/*
	 * @ : used at links
	 *
	 * [Normal]
	 *	cpu0 <-@-----------------> codec0
	 *
	 * [Semi-Multi]
	 *
	 * CPU:Codec = 1:N
	 *
	 *			+-+
	 *	cpu7 <-@------->| |-> codec12
	 *			| |-> codec13
	 *			+-+
	 *
	 * [Multi-CPU/Codec]
	 *		+-+		+-+
	 *	cpu1 <--| |<-@--------->| |-> codec1
	 *	cpu2 <--| |		| |-> codec2
	 *		+-+		+-+
	 *
	 * [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] */
			&sm0

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

			/*
			 * [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>;

			ports@0 {
				reg = <0>;
				#address-cells = <1>;
				#size-cells = <0>;
			/* [Multi-CPU] */
			mcpu0:	port@0 { reg = <0>; mcpu0_ep: endpoint { remote-endpoint = <&mcodec0_ep>; }; };
				port@1 { reg = <1>; mcpu1_ep: endpoint { remote-endpoint = <&cpu1_ep>;    }; };
				port@2 { reg = <2>; mcpu2_ep: endpoint { remote-endpoint = <&cpu2_ep>;    }; };
			};

			/* [Multi-Codec] */
			ports@1 {
				reg = <1>;
				#address-cells = <1>;
				#size-cells = <0>;
				port@0 { reg = <0>; mcodec0_ep: endpoint { remote-endpoint = <&mcpu0_ep>;  }; };
				port@1 { reg = <1>; mcodec1_ep: endpoint { remote-endpoint = <&codec1_ep>; }; };
				port@2 { reg = <2>; mcodec2_ep: endpoint { remote-endpoint = <&codec2_ep>; }; };
			};

			/* [DPCM-Multi]::BE */
			ports@2 {
				reg = <2>;
				#address-cells = <1>;
				#size-cells = <0>;
				port@0 { reg = <0>; mbe_ep:  endpoint { remote-endpoint = <&be10_ep>;  }; };
				port@1 { reg = <1>; mbe1_ep: endpoint { remote-endpoint = <&codec4_ep>; }; };
				port@2 { reg = <2>; mbe2_ep: endpoint { remote-endpoint = <&codec5_ep>; }; };
			};

			/* [Codec2Codec-Multi]::CPU */
			ports@3 {
				reg = <3>;
				#address-cells = <1>;
				#size-cells = <0>;
				port@0 { reg = <0>; mc2c0_ep:  endpoint { remote-endpoint = <&c2cmf_ep>;  }; };
				port@1 { reg = <1>; mc2c00_ep: endpoint { remote-endpoint = <&codec8_ep>; }; };
				port@2 { reg = <2>; mc2c01_ep: endpoint { remote-endpoint = <&codec9_ep>; }; };
			};

			/* [Codec2Codec-Multi]::Codec */
			ports@4 {
				reg = <4>;
				#address-cells = <1>;
				#size-cells = <0>;
				port@0 { reg = <0>; mc2c1_ep:  endpoint { remote-endpoint = <&c2cmb_ep>;  }; };
				port@1 { reg = <1>; mc2c10_ep: endpoint { remote-endpoint = <&codec10_ep>; }; };
				port@2 { reg = <2>; mc2c11_ep: endpoint { remote-endpoint = <&codec11_ep>; }; };
			};

			/* [Semi-Multi] */
			ports@5 {
				reg = <5>;
				#address-cells = <1>;
				#size-cells = <0>;
				port@0 { reg = <0>; smcodec0_ep: endpoint { remote-endpoint = <&cpu7_ep>;    }; };
				port@1 { reg = <1>; smcodec1_ep: endpoint { remote-endpoint = <&codec12_ep>; }; };
				port@2 { reg = <2>; smcodec2_ep: endpoint { remote-endpoint = <&codec13_ep>; }; };
			};
		};

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

			ports@0 {
				reg = <0>;

				#address-cells = <1>;
				#size-cells = <0>;
			/* [DPCM]::FE */
			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 */
			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 */
			be0:	port@0 { reg = <0>; be00_ep: endpoint { remote-endpoint = <&codec3_ep>; }; };

			/* [DPCM-Multi]::BE */
			be1:	port@1 { reg = <1>; be10_ep: endpoint { remote-endpoint = <&mbe_ep>; }; };
			};
		};

		codec2codec {
			#address-cells = <1>;
			#size-cells = <0>;
			/* [Codec2Codec] */
			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] */
			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] */
			      port@1 { reg = <1>; cpu1_ep: endpoint { remote-endpoint = <&mcpu1_ep>; }; };
			      port@2 { reg = <2>; cpu2_ep: endpoint { remote-endpoint = <&mcpu2_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>; }; };
		};
	};

	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] */
			port@1  { reg = <1>; codec1_ep:  endpoint { remote-endpoint = <&mcodec1_ep>; }; };
			port@2  { reg = <2>; codec2_ep:  endpoint { remote-endpoint = <&mcodec2_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>; }; };

		};
	};
};
