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