xref: /linux/arch/arm64/boot/dts/renesas/ulcb-kf-audio-graph-card2-mix+split.dtsi (revision 2f24482304ebd32c5aa374f31465b9941a860b92)
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Device Tree for ULCB + Kingfisher + Audio Graph Card2 (MIX + TDM Split)
4 *
5 * Copyright (C) 2022 Renesas Electronics Corp.
6 */
7
8/*
9 * Note:
10 * The HDMI output is ignored due to the limited number of subdevices
11 *
12 *	(A) CPU0 (2ch) <----> (2ch) (X)	ak4613	   (MIX-0)
13 *	(B) CPU1 (2ch)  --/			   (MIX-1)
14 *	(C) CPU3 (2ch)  ----> (8ch) (Y)	PCM3168A-p (TDM-0 : 0,1ch)
15 *	(D) CPU2 (2ch)  --/			   (TDM-1 : 2,3ch)
16 *	(E) CPU4 (2ch)  --/			   (TDM-2 : 4,5ch)
17 *	(F) CPU5 (2ch)  --/			   (TDM-3 : 6,7ch)
18 *	(G) CPU6 (2ch) <----  (6ch) (Z) PCM3168A-c (TDM-a: 0,1ch)
19 *	(H) CPU7 (2ch) <--/			   (TDM-b: 2,3ch)
20 *	(I) CPU8 (2ch) <--/			   (TDM-c: 4,5ch)
21 *
22 *	(A) aplay   -D plughw:0,0 xxx.wav (MIX-0)
23 *	(B) aplay   -D plughw:0,1 xxx.wav (MIX-1)
24 *	(C) aplay   -D plughw:1,0 xxx.wav (TDM-0)
25 *	(D) aplay   -D plughw:1,1 xxx.wav (TDM-1)
26 *	(E) aplay   -D plughw:1,2 xxx.wav (TDM-2)
27 *	(F) aplay   -D plughw:1,3 xxx.wav (TDM-3)
28 *
29 *	(A) arecord -D plughw:0,0 xxx.wav
30 *	(G) arecord -D plughw:1,4 xxx.wav (TDM-a)
31 *	(H) arecord -D plughw:1,5 xxx.wav (TDM-b)
32 *	(I) arecord -D plughw:1,6 xxx.wav (TDM-c)
33 */
34/ {
35	sound_card_kf: expand-sound {
36		compatible = "audio-graph-card2";
37		label = "snd-kf-split";
38
39		routing = "pcm3168a Playback", "DAI2 Playback",
40			  "pcm3168a Playback", "DAI3 Playback",
41			  "pcm3168a Playback", "DAI4 Playback",
42			  "pcm3168a Playback", "DAI5 Playback",
43			  "DAI6 Capture",      "pcm3168a Capture",
44			  "DAI7 Capture",      "pcm3168a Capture",
45			  "DAI8 Capture",      "pcm3168a Capture";
46
47		links = <&fe_c		/* (C) CPU2	  */
48			 &fe_d		/* (D) CPU3	  */
49			 &fe_e		/* (E) CPU4	  */
50			 &fe_f		/* (F) CPU5	  */
51			 &fe_g		/* (G) CPU6	  */
52			 &fe_h		/* (H) CPU7	  */
53			 &fe_i		/* (I) CPU8	  */
54			 &be_y		/* (Y) PCM3168A-p */
55			 &be_z		/* (Z) PCM3168A-c */
56		>;
57
58		dpcm: dpcm {
59			#address-cells = <1>;
60			#size-cells = <0>;
61			non-supplier;
62
63			ports@0 {
64				#address-cells = <1>;
65				#size-cells = <0>;
66				reg = <0>;
67
68				/*
69				 * FE
70				 *
71				 * (C) CPU2
72				 * (D) CPU3
73				 * (E) CPU4
74				 * (F) CPU5
75				 * (G) CPU6
76				 * (H) CPU7
77				 * (I) CPU8
78				 */
79			fe_c:	port@2 { reg = <2>; fe_c_ep: endpoint { remote-endpoint = <&rsnd_c_ep>; }; };
80			fe_d:	port@3 { reg = <3>; fe_d_ep: endpoint { remote-endpoint = <&rsnd_d_ep>; }; };
81			fe_e:	port@4 { reg = <4>; fe_e_ep: endpoint { remote-endpoint = <&rsnd_e_ep>; }; };
82			fe_f:	port@5 { reg = <5>; fe_f_ep: endpoint { remote-endpoint = <&rsnd_f_ep>; }; };
83
84			fe_g:	port@6 { reg = <6>; fe_g_ep: endpoint { remote-endpoint = <&rsnd_g_ep>; }; };
85			fe_h:	port@7 { reg = <7>; fe_h_ep: endpoint { remote-endpoint = <&rsnd_h_ep>; }; };
86			fe_i:	port@8 { reg = <8>; fe_i_ep: endpoint { remote-endpoint = <&rsnd_i_ep>; }; };
87			};
88
89			ports@1 {
90				#address-cells = <1>;
91				#size-cells = <0>;
92				reg = <1>;
93				/*
94				 * BE
95				 *
96				 * (Y) PCM3168A-p
97				 * (Z) PCM3168A-c
98				 */
99			be_y:	port@0 { reg = <0>; be_y_ep: endpoint { remote-endpoint = <&pcm3168a_y_ep>; }; };
100			be_z:	port@1 { reg = <1>; be_z_ep: endpoint { remote-endpoint = <&pcm3168a_z_ep>; }; };
101			};
102		};
103	};
104};
105
106&pcm3168a {
107	ports {
108		#address-cells = <1>;
109		#size-cells = <0>;
110
111		mclk-fs = <512>;
112		prefix = "pcm3168a";
113
114		/*
115		 * (Y) PCM3168A-p
116		 */
117		port@0 {
118			reg = <0>;
119			convert-channels = <8>; /* to 8ch TDM */
120			pcm3168a_y_ep: endpoint {
121				remote-endpoint = <&be_y_ep>;
122				clocks = <&clksndsel>;
123			};
124		};
125		/*
126		 * (Z) PCM3168A-c
127		 */
128		port@1 {
129			reg = <1>;
130			convert-channels = <6>; /* to 6ch TDM */
131			pcm3168a_z_ep: endpoint {
132				remote-endpoint = <&be_z_ep>;
133				clocks = <&clksndsel>;
134			};
135		};
136	};
137};
138
139&rcar_sound {
140	ports@1 {
141		#address-cells = <1>;
142		#size-cells = <0>;
143		reg = <1>;
144
145		/*
146		 * (C) CPU2
147		 */
148		port@2 {
149			reg = <2>;
150			rsnd_c_ep: endpoint {
151				remote-endpoint = <&fe_c_ep>;
152				bitclock-master;
153				frame-master;
154				playback = <&ssiu30 &ssi3>;
155			};
156		};
157		/*
158		 * (D) CPU3
159		 */
160		port@3 {
161			reg = <3>;
162			rsnd_d_ep: endpoint {
163				remote-endpoint = <&fe_d_ep>;
164				bitclock-master;
165				frame-master;
166				playback = <&ssiu31 &ssi3>;
167			};
168		};
169		/*
170		 * (E) CPU4
171		 */
172		port@4 {
173			reg = <4>;
174			rsnd_e_ep: endpoint {
175				remote-endpoint = <&fe_e_ep>;
176				bitclock-master;
177				frame-master;
178				playback = <&ssiu32 &ssi3>;
179			};
180		};
181		/*
182		 * (F) CPU5
183		 */
184		port@5 {
185			reg = <5>;
186			rsnd_f_ep: endpoint {
187				remote-endpoint = <&fe_f_ep>;
188				bitclock-master;
189				frame-master;
190				playback = <&ssiu33 &ssi3>;
191			};
192		};
193		/*
194		 * (G) CPU6
195		 */
196		port@6 {
197			reg = <6>;
198			rsnd_g_ep: endpoint {
199				remote-endpoint = <&fe_g_ep>;
200				bitclock-master;
201				frame-master;
202				capture = <&ssiu40 &ssi4>;
203			};
204		};
205		/*
206		 * (H) CPU7
207		 */
208		port@7 {
209			reg = <7>;
210			rsnd_h_ep: endpoint {
211				remote-endpoint = <&fe_h_ep>;
212				bitclock-master;
213				frame-master;
214				capture = <&ssiu41 &ssi4>;
215			};
216		};
217		/*
218		 * (I) CPU8
219		 */
220		port@8 {
221			reg = <8>;
222			rsnd_i_ep: endpoint {
223				remote-endpoint = <&fe_i_ep>;
224				bitclock-master;
225				frame-master;
226				capture = <&ssiu42 &ssi4>;
227			};
228		};
229	};
230};
231