343 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			343 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
// 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 {
 | 
						|
			ports@0 {
 | 
						|
			/* [Multi-CPU] */
 | 
						|
			mcpu0:	port@0 { mcpu0_ep: endpoint { remote-endpoint = <&mcodec0_ep>; }; };
 | 
						|
				port@1 { mcpu1_ep: endpoint { remote-endpoint = <&cpu1_ep>;    }; };
 | 
						|
				port@2 { mcpu2_ep: endpoint { remote-endpoint = <&cpu2_ep>;    }; };
 | 
						|
			};
 | 
						|
 | 
						|
			/* [Multi-Codec] */
 | 
						|
			ports@1 {
 | 
						|
				port@0 { mcodec0_ep: endpoint { remote-endpoint = <&mcpu0_ep>;  }; };
 | 
						|
				port@1 { mcodec1_ep: endpoint { remote-endpoint = <&codec1_ep>; }; };
 | 
						|
				port@2 { mcodec2_ep: endpoint { remote-endpoint = <&codec2_ep>; }; };
 | 
						|
			};
 | 
						|
 | 
						|
			/* [DPCM-Multi]::BE */
 | 
						|
			ports@2 {
 | 
						|
				port@0 { mbe_ep:  endpoint { remote-endpoint = <&be10_ep>;  }; };
 | 
						|
				port@1 { mbe1_ep: endpoint { remote-endpoint = <&codec4_ep>; }; };
 | 
						|
				port@2 { mbe2_ep: endpoint { remote-endpoint = <&codec5_ep>; }; };
 | 
						|
			};
 | 
						|
 | 
						|
			/* [Codec2Codec-Multi]::CPU */
 | 
						|
			ports@3 {
 | 
						|
				port@0 { mc2c0_ep:  endpoint { remote-endpoint = <&c2cmf_ep>;  }; };
 | 
						|
				port@1 { mc2c00_ep: endpoint { remote-endpoint = <&codec8_ep>; }; };
 | 
						|
				port@2 { mc2c01_ep: endpoint { remote-endpoint = <&codec9_ep>; }; };
 | 
						|
			};
 | 
						|
 | 
						|
			/* [Codec2Codec-Multi]::Codec */
 | 
						|
			ports@4 {
 | 
						|
				port@0 { mc2c1_ep:  endpoint { remote-endpoint = <&c2cmb_ep>;  }; };
 | 
						|
				port@1 { mc2c10_ep: endpoint { remote-endpoint = <&codec10_ep>; }; };
 | 
						|
				port@2 { mc2c11_ep: endpoint { remote-endpoint = <&codec11_ep>; }; };
 | 
						|
			};
 | 
						|
 | 
						|
			/* [Semi-Multi] */
 | 
						|
			ports@5 {
 | 
						|
				port@0 { smcodec0_ep: endpoint { remote-endpoint = <&cpu7_ep>;    }; };
 | 
						|
				port@1 { smcodec1_ep: endpoint { remote-endpoint = <&codec12_ep>; }; };
 | 
						|
				port@2 { smcodec2_ep: endpoint { remote-endpoint = <&codec13_ep>; }; };
 | 
						|
			};
 | 
						|
		};
 | 
						|
 | 
						|
		dpcm {
 | 
						|
			ports@0 {
 | 
						|
			/* [DPCM]::FE */
 | 
						|
			fe00:	port@0 { fe00_ep: endpoint { remote-endpoint = <&cpu3_ep>; }; };
 | 
						|
			fe01:	port@1 { fe01_ep: endpoint { remote-endpoint = <&cpu4_ep>; }; };
 | 
						|
 | 
						|
			/* [DPCM-Multi]::FE */
 | 
						|
			fe10:	port@2 { fe10_ep: endpoint { remote-endpoint = <&cpu5_ep>; }; };
 | 
						|
			fe11:	port@3 { fe11_ep: endpoint { remote-endpoint = <&cpu6_ep>; }; };
 | 
						|
			};
 | 
						|
 | 
						|
			ports@1 {
 | 
						|
			/* [DPCM]::BE */
 | 
						|
			be0:	port@0 { be00_ep: endpoint { remote-endpoint = <&codec3_ep>; }; };
 | 
						|
 | 
						|
			/* [DPCM-Multi]::BE */
 | 
						|
			be1:	port@1 { be10_ep: endpoint { remote-endpoint = <&mbe_ep>; }; };
 | 
						|
			};
 | 
						|
		};
 | 
						|
 | 
						|
		codec2codec {
 | 
						|
			/* [Codec2Codec] */
 | 
						|
			ports@0 {
 | 
						|
				/* use default settings */
 | 
						|
			c2c:	port@0 { c2cf_ep: endpoint { remote-endpoint = <&codec6_ep>; }; };
 | 
						|
				port@1 { c2cb_ep: endpoint { remote-endpoint = <&codec7_ep>; }; };
 | 
						|
			};
 | 
						|
 | 
						|
			/* [Codec2Codec-Multi] */
 | 
						|
			ports@1 {
 | 
						|
				/* use original settings */
 | 
						|
				rate = <48000>;
 | 
						|
			c2c_m:	port@0 { c2cmf_ep: endpoint { remote-endpoint = <&mc2c0_ep>; }; };
 | 
						|
				port@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 {
 | 
						|
			bitclock-master;
 | 
						|
			frame-master;
 | 
						|
			/* [Normal] */
 | 
						|
			cpu0: port@0 { cpu0_ep: endpoint { remote-endpoint = <&codec0_ep>; }; };
 | 
						|
 | 
						|
			/* [Multi-CPU] */
 | 
						|
			      port@1 { cpu1_ep: endpoint { remote-endpoint = <&mcpu1_ep>; }; };
 | 
						|
			      port@2 { cpu2_ep: endpoint { remote-endpoint = <&mcpu2_ep>; }; };
 | 
						|
 | 
						|
			/* [DPCM]::FE */
 | 
						|
			      port@3 { cpu3_ep: endpoint { remote-endpoint = <&fe00_ep>; }; };
 | 
						|
			      port@4 { cpu4_ep: endpoint { remote-endpoint = <&fe01_ep>; }; };
 | 
						|
 | 
						|
			/* [DPCM-Multi]::FE */
 | 
						|
			      port@5 { cpu5_ep: endpoint { remote-endpoint = <&fe10_ep>; }; };
 | 
						|
			      port@6 { cpu6_ep: endpoint { remote-endpoint = <&fe11_ep>; }; };
 | 
						|
 | 
						|
			/* [Semi-Multi] */
 | 
						|
			sm0:  port@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 {
 | 
						|
			/*
 | 
						|
			 * prefix can be added to *component*,
 | 
						|
			 * see audio-graph-card2::routing
 | 
						|
			 */
 | 
						|
			prefix = "TC";
 | 
						|
 | 
						|
			/* [Normal] */
 | 
						|
			port@0  { codec0_ep:  endpoint { remote-endpoint = <&cpu0_ep>; }; };
 | 
						|
 | 
						|
			/* [Multi-Codec] */
 | 
						|
			port@1  { codec1_ep:  endpoint { remote-endpoint = <&mcodec1_ep>; }; };
 | 
						|
			port@2  { codec2_ep:  endpoint { remote-endpoint = <&mcodec2_ep>; }; };
 | 
						|
 | 
						|
			/* [DPCM]::BE */
 | 
						|
			port@3  {
 | 
						|
				convert-rate = <44100>;
 | 
						|
				codec3_ep:  endpoint { remote-endpoint = <&be00_ep>; };
 | 
						|
			};
 | 
						|
 | 
						|
			/* [DPCM-Multi]::BE */
 | 
						|
			port@4  { codec4_ep:  endpoint { remote-endpoint = <&mbe1_ep>; }; };
 | 
						|
			port@5  { codec5_ep:  endpoint { remote-endpoint = <&mbe2_ep>; }; };
 | 
						|
 | 
						|
			/* [Codec2Codec] */
 | 
						|
			port@6  { bitclock-master;
 | 
						|
				  frame-master;
 | 
						|
				  codec6_ep:  endpoint { remote-endpoint = <&c2cf_ep>; }; };
 | 
						|
			port@7  { codec7_ep:  endpoint { remote-endpoint = <&c2cb_ep>; }; };
 | 
						|
 | 
						|
			/* [Codec2Codec-Multi] */
 | 
						|
			port@8  { bitclock-master;
 | 
						|
				  frame-master;
 | 
						|
				  codec8_ep:  endpoint { remote-endpoint = <&mc2c00_ep>; }; };
 | 
						|
			port@9  { codec9_ep:  endpoint { remote-endpoint = <&mc2c01_ep>; }; };
 | 
						|
			port@10 { codec10_ep: endpoint { remote-endpoint = <&mc2c10_ep>; }; };
 | 
						|
			port@11 { codec11_ep: endpoint { remote-endpoint = <&mc2c11_ep>; }; };
 | 
						|
 | 
						|
			/* [Semi-Multi] */
 | 
						|
			port@12 { codec12_ep: endpoint { remote-endpoint = <&smcodec1_ep>; }; };
 | 
						|
			port@13 { codec13_ep: endpoint { remote-endpoint = <&smcodec2_ep>; }; };
 | 
						|
		};
 | 
						|
	};
 | 
						|
};
 |