// SPDX-License-Identifier: GPL-2.0
/*
 * Device Tree for ULCB + Kingfisher + Simple Audio 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) 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 {

	simple-audio-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";

	/* dai-link@0 is defined in ulcb.dtsi */

	simple-audio-card,dai-link@1 {
		#address-cells = <1>;
		#size-cells = <0>;
		reg = <1>;
		convert-channels = <8>; /* to 8ch TDM */

		/*
		 * (C) CPU2
		 */
		cpu@0 {
			reg = <0>;
			bitclock-master;
			frame-master;
			sound-dai = <&rcar_sound 2>;
		};
		/*
		 * (D) CPU3
		 */
		cpu@1 {
			reg = <1>;
			sound-dai = <&rcar_sound 3>;
		};
		/*
		 * (E) CPU4
		 */
		cpu@2 {
			reg = <2>;
			sound-dai = <&rcar_sound 4>;
		};
		/*
		 * (F) CPU5
		 */
		cpu@3 {
			reg = <3>;
			sound-dai = <&rcar_sound 5>;
		};
		/*
		 * (Y) PCM3168A-p
		 */
		codec {
			prefix = "pcm3168a";
			mclk-fs = <512>;
			sound-dai = <&pcm3168a 0>;
		};
	};
	simple-audio-card,dai-link@2 {
		reg = <2>;
		/*
		 * (G) CPU6
		 */
		cpu {
			bitclock-master;
			frame-master;
			sound-dai = <&rcar_sound 6>;
		};
		/*
		 * (Z) PCM3168A-c
		 */
		codec {
			prefix = "pcm3168a";
			mclk-fs = <512>;
			sound-dai = <&pcm3168a 1>;
		};
	};
};

&pcm3168a {
	/*
	 * (Y) PCM3168A-p
	 * (Z) PCM3168A-c
	 */
	#sound-dai-cells = <1>;
};

&rcar_sound {
	rcar_sound,dai {

		/* dai0-1 are defined in ulcb.dtsi */

		/*
		 * (C) CPU2
		 */
		dai2 {
			playback = <&ssiu30 &ssi3>;
		};
		/*
		 * (D) CPU3
		 */
		dai3 {
			playback = <&ssiu31 &ssi3>;
		};
		/*
		 * (E) CPU4
		 */
		dai4 {
			playback = <&ssiu32 &ssi3>;
		};
		/*
		 * (F) CPU5
		 */
		dai5 {
			playback = <&ssiu33 &ssi3>;
		};
		/*
		 * (G) CPU6
		 */
		dai6 {
			capture = <&ssi4>;
		};
	};
};
