1*ccb26ac5SKuninori Morimoto// SPDX-License-Identifier: GPL-2.0
2*ccb26ac5SKuninori Morimoto/*
3*ccb26ac5SKuninori Morimoto * Device Tree for ULCB + Kingfisher + Audio Graph Card (MIX + TDM Split)
4*ccb26ac5SKuninori Morimoto *
5*ccb26ac5SKuninori Morimoto * Copyright (C) 2022 Renesas Electronics Corp.
6*ccb26ac5SKuninori Morimoto */
7*ccb26ac5SKuninori Morimoto
8*ccb26ac5SKuninori Morimoto/*
9*ccb26ac5SKuninori Morimoto * Note:
10*ccb26ac5SKuninori Morimoto * The HDMI output is ignored due to the limited number of subdevices
11*ccb26ac5SKuninori Morimoto *
12*ccb26ac5SKuninori Morimoto *	(A) CPU0 (2ch) <----> (2ch) (X) ak4613	   (MIX-0)
13*ccb26ac5SKuninori Morimoto *	(B) CPU1 (2ch)  --/			   (MIX-1)
14*ccb26ac5SKuninori Morimoto *	(C) CPU2 (2ch)  ----> (8ch) (Y) PCM3168A-p (TDM-0 : 0,1ch)
15*ccb26ac5SKuninori Morimoto *	(D) CPU3 (2ch)  --/			   (TDM-1 : 2,3ch)
16*ccb26ac5SKuninori Morimoto *	(E) CPU4 (2ch)  --/			   (TDM-2 : 4,5ch)
17*ccb26ac5SKuninori Morimoto *	(F) CPU5 (2ch)  --/			   (TDM-3 : 6,7ch)
18*ccb26ac5SKuninori Morimoto *	(G) CPU6 (6ch) <----  (6ch) (Z) PCM3168A-c
19*ccb26ac5SKuninori Morimoto *
20*ccb26ac5SKuninori Morimoto *	(A) aplay   -D plughw:0,0 xxx.wav (MIX-0)
21*ccb26ac5SKuninori Morimoto *	(B) aplay   -D plughw:0,1 xxx.wav (MIX-1)
22*ccb26ac5SKuninori Morimoto *	(C) aplay   -D plughw:0,2 xxx.wav (TDM-0)
23*ccb26ac5SKuninori Morimoto *	(D) aplay   -D plughw:0,3 xxx.wav (TDM-1)
24*ccb26ac5SKuninori Morimoto *	(E) aplay   -D plughw:0,4 xxx.wav (TDM-2)
25*ccb26ac5SKuninori Morimoto *	(F) aplay   -D plughw:0,5 xxx.wav (TDM-3)
26*ccb26ac5SKuninori Morimoto *
27*ccb26ac5SKuninori Morimoto *	(A) arecord -D plughw:0,0 xxx.wav
28*ccb26ac5SKuninori Morimoto *	(G) arecord -D plughw:0,6 xxx.wav
29*ccb26ac5SKuninori Morimoto */
30*ccb26ac5SKuninori Morimoto
31*ccb26ac5SKuninori Morimoto&sound_card {
32*ccb26ac5SKuninori Morimoto	routing = "ak4613 Playback",   "DAI0 Playback",
33*ccb26ac5SKuninori Morimoto		  "ak4613 Playback",   "DAI1 Playback",
34*ccb26ac5SKuninori Morimoto		  "DAI0 Capture",      "ak4613 Capture",
35*ccb26ac5SKuninori Morimoto		  "pcm3168a Playback", "DAI2 Playback",
36*ccb26ac5SKuninori Morimoto		  "pcm3168a Playback", "DAI3 Playback",
37*ccb26ac5SKuninori Morimoto		  "pcm3168a Playback", "DAI4 Playback",
38*ccb26ac5SKuninori Morimoto		  "pcm3168a Playback", "DAI5 Playback";
39*ccb26ac5SKuninori Morimoto
40*ccb26ac5SKuninori Morimoto	dais = <&rsnd_port0 /* (A) CPU0 */
41*ccb26ac5SKuninori Morimoto		&rsnd_port1 /* (B) CPU1 */
42*ccb26ac5SKuninori Morimoto		&rsnd_port2 /* (C) CPU2 */
43*ccb26ac5SKuninori Morimoto		&rsnd_port3 /* (D) CPU3 */
44*ccb26ac5SKuninori Morimoto		&rsnd_port4 /* (E) CPU4 */
45*ccb26ac5SKuninori Morimoto		&rsnd_port5 /* (F) CPU5 */
46*ccb26ac5SKuninori Morimoto		&rsnd_port6 /* (G) GPU6 */
47*ccb26ac5SKuninori Morimoto	>;
48*ccb26ac5SKuninori Morimoto};
49*ccb26ac5SKuninori Morimoto
50*ccb26ac5SKuninori Morimoto&pcm3168a {
51*ccb26ac5SKuninori Morimoto	ports {
52*ccb26ac5SKuninori Morimoto		#address-cells = <1>;
53*ccb26ac5SKuninori Morimoto		#size-cells = <0>;
54*ccb26ac5SKuninori Morimoto		mclk-fs = <512>;
55*ccb26ac5SKuninori Morimoto
56*ccb26ac5SKuninori Morimoto		/*
57*ccb26ac5SKuninori Morimoto		 * (Y) PCM3168A-p
58*ccb26ac5SKuninori Morimoto		 */
59*ccb26ac5SKuninori Morimoto		port@0 {
60*ccb26ac5SKuninori Morimoto			#address-cells = <1>;
61*ccb26ac5SKuninori Morimoto			#size-cells = <0>;
62*ccb26ac5SKuninori Morimoto			reg = <0>;
63*ccb26ac5SKuninori Morimoto			prefix = "pcm3168a";
64*ccb26ac5SKuninori Morimoto			convert-channels = <8>; /* to 8ch TDM */
65*ccb26ac5SKuninori Morimoto
66*ccb26ac5SKuninori Morimoto			/* (C) CPU2 -> (Y) PCM3168A-p */
67*ccb26ac5SKuninori Morimoto			pcm3168a_endpoint_p1: endpoint@0 {
68*ccb26ac5SKuninori Morimoto				reg = <0>;
69*ccb26ac5SKuninori Morimoto				remote-endpoint = <&rsnd_for_pcm3168a_play1>;
70*ccb26ac5SKuninori Morimoto				clocks = <&clksndsel>;
71*ccb26ac5SKuninori Morimoto			};
72*ccb26ac5SKuninori Morimoto			/* (D) CPU3 -> (Y) PCM3168A-p */
73*ccb26ac5SKuninori Morimoto			pcm3168a_endpoint_p2: endpoint@1 {
74*ccb26ac5SKuninori Morimoto				reg = <1>;
75*ccb26ac5SKuninori Morimoto				remote-endpoint = <&rsnd_for_pcm3168a_play2>;
76*ccb26ac5SKuninori Morimoto				clocks = <&clksndsel>;
77*ccb26ac5SKuninori Morimoto			};
78*ccb26ac5SKuninori Morimoto			/* (E) CPU4 -> (Y) PCM3168A-p */
79*ccb26ac5SKuninori Morimoto			pcm3168a_endpoint_p3: endpoint@2 {
80*ccb26ac5SKuninori Morimoto				reg = <2>;
81*ccb26ac5SKuninori Morimoto				remote-endpoint = <&rsnd_for_pcm3168a_play3>;
82*ccb26ac5SKuninori Morimoto				clocks = <&clksndsel>;
83*ccb26ac5SKuninori Morimoto			};
84*ccb26ac5SKuninori Morimoto			/* (F) CPU5 -> (Y) PCM3168A-p */
85*ccb26ac5SKuninori Morimoto			pcm3168a_endpoint_p4: endpoint@3 {
86*ccb26ac5SKuninori Morimoto				reg = <3>;
87*ccb26ac5SKuninori Morimoto				remote-endpoint = <&rsnd_for_pcm3168a_play4>;
88*ccb26ac5SKuninori Morimoto				clocks = <&clksndsel>;
89*ccb26ac5SKuninori Morimoto			};
90*ccb26ac5SKuninori Morimoto		};
91*ccb26ac5SKuninori Morimoto		/*
92*ccb26ac5SKuninori Morimoto		 * (Z) PCM3168A-c
93*ccb26ac5SKuninori Morimoto		 */
94*ccb26ac5SKuninori Morimoto		port@1 {
95*ccb26ac5SKuninori Morimoto			reg = <1>;
96*ccb26ac5SKuninori Morimoto			/* (G) CPU6 <- PCM3168A-c */
97*ccb26ac5SKuninori Morimoto			pcm3168a_endpoint_c: endpoint {
98*ccb26ac5SKuninori Morimoto				remote-endpoint = <&rsnd_for_pcm3168a_capture>;
99*ccb26ac5SKuninori Morimoto				clocks = <&clksndsel>;
100*ccb26ac5SKuninori Morimoto			};
101*ccb26ac5SKuninori Morimoto		};
102*ccb26ac5SKuninori Morimoto	};
103*ccb26ac5SKuninori Morimoto};
104*ccb26ac5SKuninori Morimoto
105*ccb26ac5SKuninori Morimoto&rcar_sound {
106*ccb26ac5SKuninori Morimoto	ports {
107*ccb26ac5SKuninori Morimoto		/* rsnd_port0-1 are defined in ulcb.dtsi */
108*ccb26ac5SKuninori Morimoto
109*ccb26ac5SKuninori Morimoto		/*
110*ccb26ac5SKuninori Morimoto		 * (C) CPU2
111*ccb26ac5SKuninori Morimoto		 */
112*ccb26ac5SKuninori Morimoto		rsnd_port2: port@2 {
113*ccb26ac5SKuninori Morimoto			reg = <2>;
114*ccb26ac5SKuninori Morimoto			rsnd_for_pcm3168a_play1: endpoint {
115*ccb26ac5SKuninori Morimoto				remote-endpoint = <&pcm3168a_endpoint_p1>;
116*ccb26ac5SKuninori Morimoto				bitclock-master;
117*ccb26ac5SKuninori Morimoto				frame-master;
118*ccb26ac5SKuninori Morimoto				playback = <&ssiu30 &ssi3>;
119*ccb26ac5SKuninori Morimoto			};
120*ccb26ac5SKuninori Morimoto		};
121*ccb26ac5SKuninori Morimoto		/*
122*ccb26ac5SKuninori Morimoto		 * (D) CPU3
123*ccb26ac5SKuninori Morimoto		 */
124*ccb26ac5SKuninori Morimoto		rsnd_port3: port@3 {
125*ccb26ac5SKuninori Morimoto			reg = <3>;
126*ccb26ac5SKuninori Morimoto			rsnd_for_pcm3168a_play2: endpoint {
127*ccb26ac5SKuninori Morimoto				remote-endpoint = <&pcm3168a_endpoint_p2>;
128*ccb26ac5SKuninori Morimoto				bitclock-master;
129*ccb26ac5SKuninori Morimoto				frame-master;
130*ccb26ac5SKuninori Morimoto				playback = <&ssiu31 &ssi3>;
131*ccb26ac5SKuninori Morimoto			};
132*ccb26ac5SKuninori Morimoto		};
133*ccb26ac5SKuninori Morimoto		/*
134*ccb26ac5SKuninori Morimoto		 * (E) CPU4
135*ccb26ac5SKuninori Morimoto		 */
136*ccb26ac5SKuninori Morimoto		rsnd_port4: port@4 {
137*ccb26ac5SKuninori Morimoto			reg = <4>;
138*ccb26ac5SKuninori Morimoto			rsnd_for_pcm3168a_play3: endpoint {
139*ccb26ac5SKuninori Morimoto				remote-endpoint = <&pcm3168a_endpoint_p3>;
140*ccb26ac5SKuninori Morimoto				bitclock-master;
141*ccb26ac5SKuninori Morimoto				frame-master;
142*ccb26ac5SKuninori Morimoto				playback = <&ssiu32 &ssi3>;
143*ccb26ac5SKuninori Morimoto			};
144*ccb26ac5SKuninori Morimoto		};
145*ccb26ac5SKuninori Morimoto		/*
146*ccb26ac5SKuninori Morimoto		 * (F) CPU5
147*ccb26ac5SKuninori Morimoto		 */
148*ccb26ac5SKuninori Morimoto		rsnd_port5: port@5 {
149*ccb26ac5SKuninori Morimoto			reg = <5>;
150*ccb26ac5SKuninori Morimoto			rsnd_for_pcm3168a_play4: endpoint {
151*ccb26ac5SKuninori Morimoto				remote-endpoint = <&pcm3168a_endpoint_p4>;
152*ccb26ac5SKuninori Morimoto				bitclock-master;
153*ccb26ac5SKuninori Morimoto				frame-master;
154*ccb26ac5SKuninori Morimoto				playback = <&ssiu33 &ssi3>;
155*ccb26ac5SKuninori Morimoto			};
156*ccb26ac5SKuninori Morimoto		};
157*ccb26ac5SKuninori Morimoto		/*
158*ccb26ac5SKuninori Morimoto		 * (G) CPU6
159*ccb26ac5SKuninori Morimoto		 */
160*ccb26ac5SKuninori Morimoto		rsnd_port6: port@6 {
161*ccb26ac5SKuninori Morimoto			reg = <6>;
162*ccb26ac5SKuninori Morimoto			rsnd_for_pcm3168a_capture: endpoint {
163*ccb26ac5SKuninori Morimoto				remote-endpoint = <&pcm3168a_endpoint_c>;
164*ccb26ac5SKuninori Morimoto				bitclock-master;
165*ccb26ac5SKuninori Morimoto				frame-master;
166*ccb26ac5SKuninori Morimoto				dai-tdm-slot-num = <6>;
167*ccb26ac5SKuninori Morimoto				capture  = <&ssi4>;
168*ccb26ac5SKuninori Morimoto			};
169*ccb26ac5SKuninori Morimoto		};
170*ccb26ac5SKuninori Morimoto	};
171*ccb26ac5SKuninori Morimoto};
172