xref: /linux/arch/arm64/boot/dts/renesas/ulcb-kf-audio-graph-card2-mix+split.dtsi (revision 0ea5c948cb64bab5bc7a5516774eb8536f05aa0d)
115ec87e0SKuninori Morimoto// SPDX-License-Identifier: GPL-2.0
215ec87e0SKuninori Morimoto/*
315ec87e0SKuninori Morimoto * Device Tree for ULCB + Kingfisher + Audio Graph Card2 (MIX + TDM Split)
415ec87e0SKuninori Morimoto *
515ec87e0SKuninori Morimoto * Copyright (C) 2022 Renesas Electronics Corp.
615ec87e0SKuninori Morimoto */
715ec87e0SKuninori Morimoto
815ec87e0SKuninori Morimoto/*
915ec87e0SKuninori Morimoto * Note:
1015ec87e0SKuninori Morimoto * The HDMI output is ignored due to the limited number of subdevices
1115ec87e0SKuninori Morimoto *
1215ec87e0SKuninori Morimoto *	(A) CPU0 (2ch) <----> (2ch) (X)	ak4613	   (MIX-0)
1315ec87e0SKuninori Morimoto *	(B) CPU1 (2ch)  --/			   (MIX-1)
1415ec87e0SKuninori Morimoto *	(C) CPU3 (2ch)  ----> (8ch) (Y)	PCM3168A-p (TDM-0 : 0,1ch)
1515ec87e0SKuninori Morimoto *	(D) CPU2 (2ch)  --/			   (TDM-1 : 2,3ch)
1615ec87e0SKuninori Morimoto *	(E) CPU4 (2ch)  --/			   (TDM-2 : 4,5ch)
1715ec87e0SKuninori Morimoto *	(F) CPU5 (2ch)  --/			   (TDM-3 : 6,7ch)
1815ec87e0SKuninori Morimoto *	(G) CPU6 (6ch) <----  (6ch) (Z)	PCM3168A-c
1915ec87e0SKuninori Morimoto *
2015ec87e0SKuninori Morimoto *	(A) aplay   -D plughw:0,0 xxx.wav (MIX-0)
2115ec87e0SKuninori Morimoto *	(B) aplay   -D plughw:0,1 xxx.wav (MIX-1)
22*d70be079SKuninori Morimoto *	(C) aplay   -D plughw:1,0 xxx.wav (TDM-0)
23*d70be079SKuninori Morimoto *	(D) aplay   -D plughw:1,1 xxx.wav (TDM-1)
24*d70be079SKuninori Morimoto *	(E) aplay   -D plughw:1,2 xxx.wav (TDM-2)
25*d70be079SKuninori Morimoto *	(F) aplay   -D plughw:1,3 xxx.wav (TDM-3)
2615ec87e0SKuninori Morimoto *
2715ec87e0SKuninori Morimoto *	(A) arecord -D plughw:0,0 xxx.wav
28*d70be079SKuninori Morimoto *	(G) arecord -D plughw:1,4 xxx.wav
2915ec87e0SKuninori Morimoto */
30*d70be079SKuninori Morimoto/ {
31*d70be079SKuninori Morimoto	sound_card_kf: expand-sound {
32*d70be079SKuninori Morimoto		compatible = "audio-graph-card2";
33*d70be079SKuninori Morimoto		label = "snd-kf-split";
34*d70be079SKuninori Morimoto
35*d70be079SKuninori Morimoto		routing = "pcm3168a Playback", "DAI2 Playback",
3615ec87e0SKuninori Morimoto			  "pcm3168a Playback", "DAI3 Playback",
3715ec87e0SKuninori Morimoto			  "pcm3168a Playback", "DAI4 Playback",
3815ec87e0SKuninori Morimoto			  "pcm3168a Playback", "DAI5 Playback",
3915ec87e0SKuninori Morimoto			  "DAI6 Capture",      "pcm3168a Capture";
4015ec87e0SKuninori Morimoto
41*d70be079SKuninori Morimoto		links = <&fe_c		/* (C) CPU2	  */
4215ec87e0SKuninori Morimoto			 &fe_d		/* (D) CPU3	  */
4315ec87e0SKuninori Morimoto			 &fe_e		/* (E) CPU4	  */
4415ec87e0SKuninori Morimoto			 &fe_f		/* (F) CPU5	  */
4515ec87e0SKuninori Morimoto			 &rsnd_g	/* (G) CPU6	  */
4615ec87e0SKuninori Morimoto			 &be_y		/* (Y) PCM3168A-p */
4715ec87e0SKuninori Morimoto		>;
4815ec87e0SKuninori Morimoto
4915ec87e0SKuninori Morimoto		dpcm {
50*d70be079SKuninori Morimoto			#address-cells = <1>;
51*d70be079SKuninori Morimoto			#size-cells = <0>;
52*d70be079SKuninori Morimoto
5315ec87e0SKuninori Morimoto			ports@0 {
54*d70be079SKuninori Morimoto				#address-cells = <1>;
55*d70be079SKuninori Morimoto				#size-cells = <0>;
56*d70be079SKuninori Morimoto				reg = <0>;
57*d70be079SKuninori Morimoto
5815ec87e0SKuninori Morimoto				/*
5915ec87e0SKuninori Morimoto				 * FE
6015ec87e0SKuninori Morimoto				 *
6115ec87e0SKuninori Morimoto				 * (C) CPU2
6215ec87e0SKuninori Morimoto				 * (D) CPU3
6315ec87e0SKuninori Morimoto				 * (E) CPU4
6415ec87e0SKuninori Morimoto				 * (F) CPU5
6515ec87e0SKuninori Morimoto				 */
6615ec87e0SKuninori Morimoto			fe_c:	port@2 { reg = <2>; fe_c_ep: endpoint { remote-endpoint = <&rsnd_c_ep>; }; };
6715ec87e0SKuninori Morimoto			fe_d:	port@3 { reg = <3>; fe_d_ep: endpoint { remote-endpoint = <&rsnd_d_ep>; }; };
6815ec87e0SKuninori Morimoto			fe_e:	port@4 { reg = <4>; fe_e_ep: endpoint { remote-endpoint = <&rsnd_e_ep>; }; };
6915ec87e0SKuninori Morimoto			fe_f:	port@5 { reg = <5>; fe_f_ep: endpoint { remote-endpoint = <&rsnd_f_ep>; }; };
7015ec87e0SKuninori Morimoto			};
7115ec87e0SKuninori Morimoto
7215ec87e0SKuninori Morimoto			ports@1 {
73*d70be079SKuninori Morimoto				reg = <1>;
7415ec87e0SKuninori Morimoto				/*
7515ec87e0SKuninori Morimoto				 * BE
7615ec87e0SKuninori Morimoto				 *
7715ec87e0SKuninori Morimoto				 * (Y) PCM3168A-p
7815ec87e0SKuninori Morimoto				 */
79*d70be079SKuninori Morimoto			be_y:	port { be_y_ep: endpoint { remote-endpoint = <&pcm3168a_y_ep>; }; };
80*d70be079SKuninori Morimoto			};
8115ec87e0SKuninori Morimoto		};
8215ec87e0SKuninori Morimoto	};
8315ec87e0SKuninori Morimoto};
8415ec87e0SKuninori Morimoto
8515ec87e0SKuninori Morimoto&pcm3168a {
8615ec87e0SKuninori Morimoto	ports {
8715ec87e0SKuninori Morimoto		#address-cells = <1>;
8815ec87e0SKuninori Morimoto		#size-cells = <0>;
8915ec87e0SKuninori Morimoto
9015ec87e0SKuninori Morimoto		mclk-fs = <512>;
9115ec87e0SKuninori Morimoto		prefix = "pcm3168a";
9215ec87e0SKuninori Morimoto
9315ec87e0SKuninori Morimoto		/*
9415ec87e0SKuninori Morimoto		 * (Y) PCM3168A-p
9515ec87e0SKuninori Morimoto		 */
9615ec87e0SKuninori Morimoto		port@0 {
9715ec87e0SKuninori Morimoto			reg = <0>;
9815ec87e0SKuninori Morimoto			convert-channels = <8>; /* to 8ch TDM */
9915ec87e0SKuninori Morimoto			pcm3168a_y_ep: endpoint {
10015ec87e0SKuninori Morimoto				remote-endpoint = <&be_y_ep>;
10115ec87e0SKuninori Morimoto				clocks = <&clksndsel>;
10215ec87e0SKuninori Morimoto			};
10315ec87e0SKuninori Morimoto		};
10415ec87e0SKuninori Morimoto		/*
10515ec87e0SKuninori Morimoto		 * (Z) PCM3168A-c
10615ec87e0SKuninori Morimoto		 */
10715ec87e0SKuninori Morimoto		port@1 {
10815ec87e0SKuninori Morimoto			reg = <1>;
10915ec87e0SKuninori Morimoto			pcm3168a_z_ep: endpoint {
11015ec87e0SKuninori Morimoto				remote-endpoint = <&rsnd_g_ep>;
11115ec87e0SKuninori Morimoto				clocks = <&clksndsel>;
11215ec87e0SKuninori Morimoto			};
11315ec87e0SKuninori Morimoto		};
11415ec87e0SKuninori Morimoto	};
11515ec87e0SKuninori Morimoto};
11615ec87e0SKuninori Morimoto
11715ec87e0SKuninori Morimoto&rcar_sound {
118*d70be079SKuninori Morimoto	ports@1 {
119*d70be079SKuninori Morimoto		#address-cells = <1>;
120*d70be079SKuninori Morimoto		#size-cells = <0>;
121*d70be079SKuninori Morimoto		reg = <1>;
12215ec87e0SKuninori Morimoto
12315ec87e0SKuninori Morimoto		/*
12415ec87e0SKuninori Morimoto		 * (C) CPU2
12515ec87e0SKuninori Morimoto		 */
12615ec87e0SKuninori Morimoto		port@2 {
12715ec87e0SKuninori Morimoto			reg = <2>;
12815ec87e0SKuninori Morimoto			rsnd_c_ep: endpoint {
12915ec87e0SKuninori Morimoto				remote-endpoint = <&fe_c_ep>;
13015ec87e0SKuninori Morimoto				bitclock-master;
13115ec87e0SKuninori Morimoto				frame-master;
13215ec87e0SKuninori Morimoto				playback = <&ssiu30 &ssi3>;
13315ec87e0SKuninori Morimoto			};
13415ec87e0SKuninori Morimoto		};
13515ec87e0SKuninori Morimoto		/*
13615ec87e0SKuninori Morimoto		 * (D) CPU3
13715ec87e0SKuninori Morimoto		 */
13815ec87e0SKuninori Morimoto		port@3 {
13915ec87e0SKuninori Morimoto			reg = <3>;
14015ec87e0SKuninori Morimoto			rsnd_d_ep: endpoint {
14115ec87e0SKuninori Morimoto				remote-endpoint = <&fe_d_ep>;
14215ec87e0SKuninori Morimoto				bitclock-master;
14315ec87e0SKuninori Morimoto				frame-master;
14415ec87e0SKuninori Morimoto				playback = <&ssiu31 &ssi3>;
14515ec87e0SKuninori Morimoto			};
14615ec87e0SKuninori Morimoto		};
14715ec87e0SKuninori Morimoto		/*
14815ec87e0SKuninori Morimoto		 * (E) CPU4
14915ec87e0SKuninori Morimoto		 */
15015ec87e0SKuninori Morimoto		port@4 {
15115ec87e0SKuninori Morimoto			reg = <4>;
15215ec87e0SKuninori Morimoto			rsnd_e_ep: endpoint {
15315ec87e0SKuninori Morimoto				remote-endpoint = <&fe_e_ep>;
15415ec87e0SKuninori Morimoto				bitclock-master;
15515ec87e0SKuninori Morimoto				frame-master;
15615ec87e0SKuninori Morimoto				playback = <&ssiu32 &ssi3>;
15715ec87e0SKuninori Morimoto			};
15815ec87e0SKuninori Morimoto		};
15915ec87e0SKuninori Morimoto		/*
16015ec87e0SKuninori Morimoto		 * (F) CPU5
16115ec87e0SKuninori Morimoto		 */
16215ec87e0SKuninori Morimoto		port@5 {
16315ec87e0SKuninori Morimoto			reg = <5>;
16415ec87e0SKuninori Morimoto			rsnd_f_ep: endpoint {
16515ec87e0SKuninori Morimoto				remote-endpoint = <&fe_f_ep>;
16615ec87e0SKuninori Morimoto				bitclock-master;
16715ec87e0SKuninori Morimoto				frame-master;
16815ec87e0SKuninori Morimoto				playback = <&ssiu33 &ssi3>;
16915ec87e0SKuninori Morimoto			};
17015ec87e0SKuninori Morimoto		};
17115ec87e0SKuninori Morimoto		/*
17215ec87e0SKuninori Morimoto		 * (G) CPU6
17315ec87e0SKuninori Morimoto		 */
17415ec87e0SKuninori Morimoto		rsnd_g: port@6 {
17515ec87e0SKuninori Morimoto			reg = <6>;
17615ec87e0SKuninori Morimoto			rsnd_g_ep: endpoint {
17715ec87e0SKuninori Morimoto				remote-endpoint = <&pcm3168a_z_ep>;
17815ec87e0SKuninori Morimoto				bitclock-master;
17915ec87e0SKuninori Morimoto				frame-master;
18015ec87e0SKuninori Morimoto				capture = <&ssi4>;
18115ec87e0SKuninori Morimoto			};
18215ec87e0SKuninori Morimoto		};
18315ec87e0SKuninori Morimoto	};
18415ec87e0SKuninori Morimoto};
185