// SPDX-License-Identifier: GPL-2.0
/*
 * Device Tree for ULCB + Kingfisher + Audio Graph Card (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) CPU2 (2ch)  ----> (8ch) (Y) PCM3168A-p (TDM-0 : 0,1ch)
 *	(D) CPU3 (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:1,0 xxx.wav (TDM-0)
 *	(D) aplay   -D plughw:1,1 xxx.wav (TDM-1)
 *	(E) aplay   -D plughw:1,2 xxx.wav (TDM-2)
 *	(F) aplay   -D plughw:1,3 xxx.wav (TDM-3)
 *
 *	(A) arecord -D plughw:0,0 xxx.wav
 *	(G) arecord -D plughw:1,4 xxx.wav
 */
/ {
	sound_card_kf: expand-sound {
		compatible = "audio-graph-scu-card";
		label = "snd-kf-split";

		routing = "pcm3168a Playback", "DAI2 Playback",
			  "pcm3168a Playback", "DAI3 Playback",
			  "pcm3168a Playback", "DAI4 Playback",
			  "pcm3168a Playback", "DAI5 Playback";

		dais = <&snd_kf1 /* (C) CPU2 */
			&snd_kf2 /* (D) CPU3 */
			&snd_kf3 /* (E) CPU4 */
			&snd_kf4 /* (F) CPU5 */
			&snd_kf5 /* (G) GPU6 */
		>;
	};
};

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

		/*
		 * (Y) PCM3168A-p
		 */
		port@0 {
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0>;
			prefix = "pcm3168a";
			convert-channels = <8>; /* to 8ch TDM */

			/* (C) CPU2 -> (Y) PCM3168A-p */
			pcm3168a_endpoint_p1: endpoint@0 {
				reg = <0>;
				remote-endpoint = <&rsnd_for_pcm3168a_play1>;
				clocks = <&clksndsel>;
			};
			/* (D) CPU3 -> (Y) PCM3168A-p */
			pcm3168a_endpoint_p2: endpoint@1 {
				reg = <1>;
				remote-endpoint = <&rsnd_for_pcm3168a_play2>;
				clocks = <&clksndsel>;
			};
			/* (E) CPU4 -> (Y) PCM3168A-p */
			pcm3168a_endpoint_p3: endpoint@2 {
				reg = <2>;
				remote-endpoint = <&rsnd_for_pcm3168a_play3>;
				clocks = <&clksndsel>;
			};
			/* (F) CPU5 -> (Y) PCM3168A-p */
			pcm3168a_endpoint_p4: endpoint@3 {
				reg = <3>;
				remote-endpoint = <&rsnd_for_pcm3168a_play4>;
				clocks = <&clksndsel>;
			};
		};
		/*
		 * (Z) PCM3168A-c
		 */
		port@1 {
			reg = <1>;
			/* (G) CPU6 <- PCM3168A-c */
			pcm3168a_endpoint_c: endpoint {
				remote-endpoint = <&rsnd_for_pcm3168a_capture>;
				clocks = <&clksndsel>;
			};
		};
	};
};

&rcar_sound {
	ports@1 {
		#address-cells = <1>;
		#size-cells = <0>;
		reg = <1>;

		/*
		 * (C) CPU2
		 */
		snd_kf1: port@2 {
			reg = <2>;
			rsnd_for_pcm3168a_play1: endpoint {
				remote-endpoint = <&pcm3168a_endpoint_p1>;
				bitclock-master;
				frame-master;
				playback = <&ssiu30 &ssi3>;
			};
		};
		/*
		 * (D) CPU3
		 */
		snd_kf2: port@3 {
			reg = <3>;
			rsnd_for_pcm3168a_play2: endpoint {
				remote-endpoint = <&pcm3168a_endpoint_p2>;
				bitclock-master;
				frame-master;
				playback = <&ssiu31 &ssi3>;
			};
		};
		/*
		 * (E) CPU4
		 */
		snd_kf3: port@4 {
			reg = <4>;
			rsnd_for_pcm3168a_play3: endpoint {
				remote-endpoint = <&pcm3168a_endpoint_p3>;
				bitclock-master;
				frame-master;
				playback = <&ssiu32 &ssi3>;
			};
		};
		/*
		 * (F) CPU5
		 */
		snd_kf4: port@5 {
			reg = <5>;
			rsnd_for_pcm3168a_play4: endpoint {
				remote-endpoint = <&pcm3168a_endpoint_p4>;
				bitclock-master;
				frame-master;
				playback = <&ssiu33 &ssi3>;
			};
		};
		/*
		 * (G) CPU6
		 */
		snd_kf5: port@6 {
			reg = <6>;
			rsnd_for_pcm3168a_capture: endpoint {
				remote-endpoint = <&pcm3168a_endpoint_c>;
				bitclock-master;
				frame-master;
				dai-tdm-slot-num = <6>;
				capture  = <&ssi4>;
			};
		};
	};
};
