1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Device Tree for ULCB + Kingfisher + Simple Audio Card (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/ {
36	sound_card_kf: expand-sound {
37		#address-cells = <1>;
38		#size-cells = <0>;
39
40		compatible = "simple-scu-audio-card";
41		label = "snd-kf-split";
42
43		simple-audio-card,routing = "pcm3168a Playback", "DAI2 Playback",
44					    "pcm3168a Playback", "DAI3 Playback",
45					    "pcm3168a Playback", "DAI4 Playback",
46					    "pcm3168a Playback", "DAI5 Playback",
47					    "DAI6 Capture",      "pcm3168a Capture",
48					    "DAI7 Capture",      "pcm3168a Capture",
49					    "DAI8 Capture",      "pcm3168a Capture";
50
51		simple-audio-card,dai-link@0 {
52			#address-cells = <1>;
53			#size-cells = <0>;
54			reg = <0>;
55			convert-channels = <8>; /* to 8ch TDM */
56
57			/*
58			 * (C) CPU2
59			 */
60			cpu@0 {
61				reg = <0>;
62				bitclock-master;
63				frame-master;
64				sound-dai = <&rcar_sound 2>;
65			};
66			/*
67			 * (D) CPU3
68			 */
69			cpu@1 {
70				reg = <1>;
71				sound-dai = <&rcar_sound 3>;
72			};
73			/*
74			 * (E) CPU4
75			 */
76			cpu@2 {
77				reg = <2>;
78				sound-dai = <&rcar_sound 4>;
79			};
80			/*
81			 * (F) CPU5
82			 */
83			cpu@3 {
84				reg = <3>;
85				sound-dai = <&rcar_sound 5>;
86			};
87			/*
88			 * (Y) PCM3168A-p
89			 */
90			codec {
91				prefix = "pcm3168a";
92				mclk-fs = <512>;
93				sound-dai = <&pcm3168a 0>;
94			};
95		};
96
97		simple-audio-card,dai-link@1 {
98			#address-cells = <1>;
99			#size-cells = <0>;
100			reg = <1>;
101			convert-channels = <6>; /* to 6ch TDM */
102
103			/*
104			 * (G) CPU6
105			 */
106			cpu@0 {
107				reg = <0>;
108				bitclock-master;
109				frame-master;
110				sound-dai = <&rcar_sound 6>;
111			};
112			/*
113			 * (H) CPU7
114			 */
115			cpu@1 {
116				reg = <1>;
117				bitclock-master;
118				frame-master;
119				sound-dai = <&rcar_sound 7>;
120			};
121			/*
122			 * (I) CPU8
123			 */
124			cpu@2 {
125				reg = <2>;
126				bitclock-master;
127				frame-master;
128				sound-dai = <&rcar_sound 8>;
129			};
130
131			/*
132			 * (Z) PCM3168A-c
133			 */
134			codec {
135				prefix = "pcm3168a";
136				mclk-fs = <512>;
137				sound-dai = <&pcm3168a 1>;
138			};
139		};
140	};
141};
142
143&pcm3168a {
144	/*
145	 * (Y) PCM3168A-p
146	 * (Z) PCM3168A-c
147	 */
148	#sound-dai-cells = <1>;
149};
150
151&rcar_sound {
152	rcar_sound,dai@1 {
153		reg = <1>;
154
155		/* dai0-1 are defined in ulcb.dtsi */
156
157		/*
158		 * (C) CPU2
159		 */
160		dai2 {
161			playback = <&ssiu30 &ssi3>;
162		};
163		/*
164		 * (D) CPU3
165		 */
166		dai3 {
167			playback = <&ssiu31 &ssi3>;
168		};
169		/*
170		 * (E) CPU4
171		 */
172		dai4 {
173			playback = <&ssiu32 &ssi3>;
174		};
175		/*
176		 * (F) CPU5
177		 */
178		dai5 {
179			playback = <&ssiu33 &ssi3>;
180		};
181		/*
182		 * (G) CPU6
183		 */
184		dai6 {
185			capture = <&ssiu40 &ssi4>;
186		};
187		/*
188		 * (H) CPU7
189		 */
190		dai7 {
191			capture = <&ssiu41 &ssi4>;
192		};
193		/*
194		 * (I) CPU8
195		 */
196		dai8 {
197			capture = <&ssiu42 &ssi4>;
198		};
199	};
200};
201