// SPDX-License-Identifier: GPL-2.0
/*
 * Device Tree Source for the White Hawk board with ARD-AUDIO-DA7212 Board
 *
 * You can find and buy "ARD-AUDIO-DA7212" at Digi-Key
 *
 *	https://www.digikey.jp/en/products/detail/ARD-AUDIO-DA7212/1564-1021-ND/5456357
 *
 * Copyright (C) 2022 Renesas Electronics Corp.
 *
 *
 * [Connection]
 *
 * White Hawk				ARD-AUDIO-DA7212
 * +----------------------------+
 * |CPU board			|
 * |				|
 * |CN40 (IO PIN HEADER)	|
 * |	AUDIO_CLKIN_V	  pin1  |<--\	+---------------+
 * |(*) GP1_25/SL_SW2_V	  pin2  |<--/	|J2		|
 * |	AUDIO_CLKOUT_V	  pin5  |<----->| pin7  MCLK	|
 * |	SSI_SCK_V	  pin9  |<----->| pin1  BCLK	|
 * |	SSI_WS_V	  pin13 |<----->| pin3  WCLK	|
 * |	SSI_SD_V	  pin15 |<----->| pin5  DATIN	| (@)
 * |				|   \-->| pin15 DATOUT	| [CAPTURE]
 * +----------------------------+	+---------------+
 * +----------------------------+
 * |Breakout board		|
 * |				|	+---------------+
 * |CN34 (I2C CN)		|	|J1		|
 * |	I2C0_SCL	   pin3 |<----->| pin20 SCL	|
 * |	I2C0_SDA	   pin5 |<----->| pin18 SDA	|
 * |				|	+---------------+
 * |				|	+-----------------------+
 * |CN4 (Power)		        |	|J7			|
 * |	3v3 (v)		   pin9 |<----->| pin4  / pin8  3.3v	|
 * |	GND (v)	    pin3 / pin4 |<----->| pin12 / pin14 GND	|
 * +----------------------------+	+-----------------------+
 * (*)	GP1_25/SL_SW2_V is used as TPU
 * (@)	Connect to pin5 (DATIN = playback) or pin15 (DATOUT = capture)
 * (v)	These are just sample pins. You can find many 3v3 / GND pins on
 *	White Hawk board, not only CN4. You can use other pins for it.
 *
 * [How to enable]
 *
 * You need these configs
 *
 *	CONFIG_PWM
 *	CONFIG_PWM_RENESAS_TPU
 *	CONFIG_COMMON_CLK_PWM
 *	CONFIG_SND_SOC_DA7213
 *
 * [How to use]
 *
 * 44.1kHz groups sound is available by default.
 * You need to update audio_clkin settings to switch to 48kHz groups sound.
 * see
 *	[(C) clock]
 *
 * You can use capture if you change the settings
 * see
 *	[CAPTURE]
 *
 * You need to setup Headphone
 *
 *	> amixer set "Headphone" 40%
 *	> amixer set "Headphone" on
 *	> amixer set "Mixout Left DAC Left" on
 *	> amixer set "Mixout Right DAC Right" on
 */

/dts-v1/;
/plugin/;
#include <dt-bindings/clock/r8a779g0-cpg-mssr.h>

&{/} {
	sound_card: sound {
		compatible = "audio-graph-card";
		label = "rcar-sound";

		dais = <&rsnd_port>;	/* DA7212 Audio Codec */
	};

	tpu_clk: tpu-clk {
		compatible = "pwm-clock";
		#clock-cells = <0>;

		/* 44.1kHz groups [(C) clock] */
		clock-frequency = <11289600>;
		pwms = <&tpu 0 88 0>;	/* 1000000000 / 88 =~ 11289600 */

		/* 48  kHz groups [(C) clock] */
//		clock-frequency = <12288000>;
//		pwms = <&tpu 0 81 0>;	/* 1000000000 / 81 =~ 12288000 */
	};

};

&pfc {
	sound_pins: sound {
		groups = "ssi_ctrl", "ssi_data";
		function = "ssi";
	};

	sound_clk_pins: sound-clk {
		groups = "audio_clkin", "audio_clkout";
		function = "audio_clk";
	};

	tpu0_pins: tpu0 {
		groups = "tpu_to0_a";
		function = "tpu";
	};
};

&tpu {
	pinctrl-0 = <&tpu0_pins>;
	pinctrl-names = "default";

	status = "okay";
};

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

	codec@1a {
		compatible = "dlg,da7212";

		#sound-dai-cells = <0>;
		reg = <0x1a>;

		clocks = <&rcar_sound>;
		clock-names = "mclk";

		dlg,micbias1-lvl = <2500>;
		dlg,micbias2-lvl = <2500>;
		dlg,dmic-data-sel = "lrise_rfall";
		dlg,dmic-samplephase = "between_clkedge";
		dlg,dmic-clkrate = <3000000>;

		VDDA-supply   = <&reg_1p8v>;
		VDDMIC-supply = <&reg_3p3v>;
		VDDIO-supply  = <&reg_3p3v>;

		port {
			da7212_endpoint: endpoint {
				remote-endpoint = <&rsnd_endpoint>;
			};
		};
	};
};

&rcar_sound {
	pinctrl-0 = <&sound_clk_pins>, <&sound_pins>;
	pinctrl-names = "default";

	/* Single DAI */
	#sound-dai-cells = <0>;

	/* audio_clkout */
	#clock-cells = <0>;
	clock-frequency = <5644800>; /* 44.1kHz groups [(C) clock] */
//	clock-frequency = <6144000>; /* 48  kHz groups [(C) clock] */

	status = "okay";

	/* Update <clkin> to <tpu_clk> */
	clocks = <&cpg CPG_MOD 2926>, <&cpg CPG_MOD 2927>, <&tpu_clk>;

	ports {
		rsnd_port: port {
			rsnd_endpoint: endpoint {
				remote-endpoint = <&da7212_endpoint>;

				dai-format = "i2s";
				bitclock-master = <&rsnd_endpoint>;
				frame-master = <&rsnd_endpoint>;

				/* Mutually exclusive with 'capture' */
				playback = <&ssi0>;
				/* [CAPTURE] */
				/* capture = <&ssi0>; */
			};
		};
	};
};