1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Device Tree for ULCB + Kingfisher + Audio Graph 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) CPU2 (2ch)  ----> (8ch) (Y) PCM3168A-p (TDM-0 : 0,1ch)
15 *	(D) CPU3 (2ch)  --/			   (TDM-1 : 2,3ch)
16 *	(E) CPU4 (2ch)  --/			   (TDM-2 : 4,5ch)
17 *	(F) CPU5 (2ch)  --/			   (TDM-3 : 6,7ch)
18 *	(G) CPU6 (6ch) <----  (6ch) (Z) PCM3168A-c
19 *
20 *	(A) aplay   -D plughw:0,0 xxx.wav (MIX-0)
21 *	(B) aplay   -D plughw:0,1 xxx.wav (MIX-1)
22 *	(C) aplay   -D plughw:1,0 xxx.wav (TDM-0)
23 *	(D) aplay   -D plughw:1,1 xxx.wav (TDM-1)
24 *	(E) aplay   -D plughw:1,2 xxx.wav (TDM-2)
25 *	(F) aplay   -D plughw:1,3 xxx.wav (TDM-3)
26 *
27 *	(A) arecord -D plughw:0,0 xxx.wav
28 *	(G) arecord -D plughw:1,4 xxx.wav
29 */
30/ {
31	sound_card_kf: expand-sound {
32		compatible = "audio-graph-scu-card";
33		label = "snd-kf-split";
34
35		routing = "pcm3168a Playback", "DAI2 Playback",
36			  "pcm3168a Playback", "DAI3 Playback",
37			  "pcm3168a Playback", "DAI4 Playback",
38			  "pcm3168a Playback", "DAI5 Playback";
39
40		dais = <&snd_kf1 /* (C) CPU2 */
41			&snd_kf2 /* (D) CPU3 */
42			&snd_kf3 /* (E) CPU4 */
43			&snd_kf4 /* (F) CPU5 */
44			&snd_kf5 /* (G) GPU6 */
45		>;
46	};
47};
48
49&pcm3168a {
50	ports {
51		#address-cells = <1>;
52		#size-cells = <0>;
53		mclk-fs = <512>;
54
55		/*
56		 * (Y) PCM3168A-p
57		 */
58		port@0 {
59			#address-cells = <1>;
60			#size-cells = <0>;
61			reg = <0>;
62			prefix = "pcm3168a";
63			convert-channels = <8>; /* to 8ch TDM */
64
65			/* (C) CPU2 -> (Y) PCM3168A-p */
66			pcm3168a_endpoint_p1: endpoint@0 {
67				reg = <0>;
68				remote-endpoint = <&rsnd_for_pcm3168a_play1>;
69				clocks = <&clksndsel>;
70			};
71			/* (D) CPU3 -> (Y) PCM3168A-p */
72			pcm3168a_endpoint_p2: endpoint@1 {
73				reg = <1>;
74				remote-endpoint = <&rsnd_for_pcm3168a_play2>;
75				clocks = <&clksndsel>;
76			};
77			/* (E) CPU4 -> (Y) PCM3168A-p */
78			pcm3168a_endpoint_p3: endpoint@2 {
79				reg = <2>;
80				remote-endpoint = <&rsnd_for_pcm3168a_play3>;
81				clocks = <&clksndsel>;
82			};
83			/* (F) CPU5 -> (Y) PCM3168A-p */
84			pcm3168a_endpoint_p4: endpoint@3 {
85				reg = <3>;
86				remote-endpoint = <&rsnd_for_pcm3168a_play4>;
87				clocks = <&clksndsel>;
88			};
89		};
90		/*
91		 * (Z) PCM3168A-c
92		 */
93		port@1 {
94			reg = <1>;
95			/* (G) CPU6 <- PCM3168A-c */
96			pcm3168a_endpoint_c: endpoint {
97				remote-endpoint = <&rsnd_for_pcm3168a_capture>;
98				clocks = <&clksndsel>;
99			};
100		};
101	};
102};
103
104&rcar_sound {
105	ports@1 {
106		#address-cells = <1>;
107		#size-cells = <0>;
108		reg = <1>;
109
110		/*
111		 * (C) CPU2
112		 */
113		snd_kf1: port@2 {
114			reg = <2>;
115			rsnd_for_pcm3168a_play1: endpoint {
116				remote-endpoint = <&pcm3168a_endpoint_p1>;
117				bitclock-master;
118				frame-master;
119				playback = <&ssiu30 &ssi3>;
120			};
121		};
122		/*
123		 * (D) CPU3
124		 */
125		snd_kf2: port@3 {
126			reg = <3>;
127			rsnd_for_pcm3168a_play2: endpoint {
128				remote-endpoint = <&pcm3168a_endpoint_p2>;
129				bitclock-master;
130				frame-master;
131				playback = <&ssiu31 &ssi3>;
132			};
133		};
134		/*
135		 * (E) CPU4
136		 */
137		snd_kf3: port@4 {
138			reg = <4>;
139			rsnd_for_pcm3168a_play3: endpoint {
140				remote-endpoint = <&pcm3168a_endpoint_p3>;
141				bitclock-master;
142				frame-master;
143				playback = <&ssiu32 &ssi3>;
144			};
145		};
146		/*
147		 * (F) CPU5
148		 */
149		snd_kf4: port@5 {
150			reg = <5>;
151			rsnd_for_pcm3168a_play4: endpoint {
152				remote-endpoint = <&pcm3168a_endpoint_p4>;
153				bitclock-master;
154				frame-master;
155				playback = <&ssiu33 &ssi3>;
156			};
157		};
158		/*
159		 * (G) CPU6
160		 */
161		snd_kf5: port@6 {
162			reg = <6>;
163			rsnd_for_pcm3168a_capture: endpoint {
164				remote-endpoint = <&pcm3168a_endpoint_c>;
165				bitclock-master;
166				frame-master;
167				dai-tdm-slot-num = <6>;
168				capture  = <&ssi4>;
169			};
170		};
171	};
172};
173