// SPDX-License-Identifier: GPL-2.0
/*
 * Device Tree for ULCB + Kingfisher + Audio Graph Card2 (MIX + TDM Split)
 *
 * Copyright (C) 2022 Renesas Electronics Corp.
 */

/*
 * Note:
 * The HDMI output is ignored due to the limited number of subdevices
 *
 *	(A) CPU0 (2ch) <----> (2ch) (X)	ak4613	   (MIX-0)
 *	(B) CPU1 (2ch)  --/			   (MIX-1)
 *	(C) CPU3 (2ch)  ----> (8ch) (Y)	PCM3168A-p (TDM-0 : 0,1ch)
 *	(D) CPU2 (2ch)  --/			   (TDM-1 : 2,3ch)
 *	(E) CPU4 (2ch)  --/			   (TDM-2 : 4,5ch)
 *	(F) CPU5 (2ch)  --/			   (TDM-3 : 6,7ch)
 *	(G) CPU6 (6ch) <----  (6ch) (Z)	PCM3168A-c
 *
 *	(A) aplay   -D plughw:0,0 xxx.wav (MIX-0)
 *	(B) aplay   -D plughw:0,1 xxx.wav (MIX-1)
 *	(C) aplay   -D plughw:0,2 xxx.wav (TDM-0)
 *	(D) aplay   -D plughw:0,3 xxx.wav (TDM-1)
 *	(E) aplay   -D plughw:0,4 xxx.wav (TDM-2)
 *	(F) aplay   -D plughw:0,5 xxx.wav (TDM-3)
 *
 *	(A) arecord -D plughw:0,0 xxx.wav
 *	(G) arecord -D plughw:0,6 xxx.wav
 */
&sound_card {
	routing = "ak4613 Playback",   "DAI0 Playback",
		  "ak4613 Playback",   "DAI1 Playback",
		  "DAI0 Capture",      "ak4613 Capture",
		  "pcm3168a Playback", "DAI2 Playback",
		  "pcm3168a Playback", "DAI3 Playback",
		  "pcm3168a Playback", "DAI4 Playback",
		  "pcm3168a Playback", "DAI5 Playback",
		  "DAI6 Capture",      "pcm3168a Capture";

	/delete-property/ dais;
	links = <&fe_a		/* (A) CPU0	  */
		 &fe_b		/* (B) CPU1	  */
		 &fe_c		/* (C) CPU2	  */
		 &fe_d		/* (D) CPU3	  */
		 &fe_e		/* (E) CPU4	  */
		 &fe_f		/* (F) CPU5	  */
		 &rsnd_g	/* (G) CPU6	  */
		 &be_x		/* (X) ak4613	  */
		 &be_y		/* (Y) PCM3168A-p */
	>;

	dpcm {
		ports@0 {
		/*
		 * FE
		 *
		 * (A)/(B) are defined on ulcb
		 * (C) CPU2
		 * (D) CPU3
		 * (E) CPU4
		 * (F) CPU5
		 */
		fe_c:	port@2 { reg = <2>; fe_c_ep: endpoint { remote-endpoint = <&rsnd_c_ep>; }; };
		fe_d:	port@3 { reg = <3>; fe_d_ep: endpoint { remote-endpoint = <&rsnd_d_ep>; }; };
		fe_e:	port@4 { reg = <4>; fe_e_ep: endpoint { remote-endpoint = <&rsnd_e_ep>; }; };
		fe_f:	port@5 { reg = <5>; fe_f_ep: endpoint { remote-endpoint = <&rsnd_f_ep>; }; };
		};

		ports@1 {
		/*
		 * BE
		 *
		 * (X) is defined on ulcb
		 * (Y) PCM3168A-p
		 */
		be_y:	port@1 { reg = <1>; be_y_ep: endpoint { remote-endpoint = <&pcm3168a_y_ep>; }; };
		};
	};
};

&pcm3168a {
	ports {
		#address-cells = <1>;
		#size-cells = <0>;

		mclk-fs = <512>;
		prefix = "pcm3168a";

		/*
		 * (Y) PCM3168A-p
		 */
		port@0 {
			reg = <0>;
			convert-channels = <8>; /* to 8ch TDM */
			pcm3168a_y_ep: endpoint {
				remote-endpoint = <&be_y_ep>;
				clocks = <&clksndsel>;
			};
		};
		/*
		 * (Z) PCM3168A-c
		 */
		port@1 {
			reg = <1>;
			pcm3168a_z_ep: endpoint {
				remote-endpoint = <&rsnd_g_ep>;
				clocks = <&clksndsel>;
			};
		};
	};
};

&rcar_sound {
	ports {
		/* (A)/(B) are defined in ulcb.dtsi */

		/*
		 * (C) CPU2
		 */
		port@2 {
			reg = <2>;
			rsnd_c_ep: endpoint {
				remote-endpoint = <&fe_c_ep>;
				bitclock-master;
				frame-master;
				playback = <&ssiu30 &ssi3>;
			};
		};
		/*
		 * (D) CPU3
		 */
		port@3 {
			reg = <3>;
			rsnd_d_ep: endpoint {
				remote-endpoint = <&fe_d_ep>;
				bitclock-master;
				frame-master;
				playback = <&ssiu31 &ssi3>;
			};
		};
		/*
		 * (E) CPU4
		 */
		port@4 {
			reg = <4>;
			rsnd_e_ep: endpoint {
				remote-endpoint = <&fe_e_ep>;
				bitclock-master;
				frame-master;
				playback = <&ssiu32 &ssi3>;
			};
		};
		/*
		 * (F) CPU5
		 */
		port@5 {
			reg = <5>;
			rsnd_f_ep: endpoint {
				remote-endpoint = <&fe_f_ep>;
				bitclock-master;
				frame-master;
				playback = <&ssiu33 &ssi3>;
			};
		};
		/*
		 * (G) CPU6
		 */
		rsnd_g: port@6 {
			reg = <6>;
			rsnd_g_ep: endpoint {
				remote-endpoint = <&pcm3168a_z_ep>;
				bitclock-master;
				frame-master;
				capture = <&ssi4>;
			};
		};
	};
};