1*e0d1619fSKuninori Morimoto// SPDX-License-Identifier: GPL-2.0
2*e0d1619fSKuninori Morimoto/*
3*e0d1619fSKuninori Morimoto * Device Tree Source for the White Hawk board with ARD-AUDIO-DA7212 Board
4*e0d1619fSKuninori Morimoto *
5*e0d1619fSKuninori Morimoto * You can find and buy "ARD-AUDIO-DA7212" at Digi-Key
6*e0d1619fSKuninori Morimoto *
7*e0d1619fSKuninori Morimoto *	https://www.digikey.jp/en/products/detail/ARD-AUDIO-DA7212/1564-1021-ND/5456357
8*e0d1619fSKuninori Morimoto *
9*e0d1619fSKuninori Morimoto * Copyright (C) 2022 Renesas Electronics Corp.
10*e0d1619fSKuninori Morimoto *
11*e0d1619fSKuninori Morimoto *
12*e0d1619fSKuninori Morimoto * [Connection]
13*e0d1619fSKuninori Morimoto *
14*e0d1619fSKuninori Morimoto * White Hawk				ARD-AUDIO-DA7212
15*e0d1619fSKuninori Morimoto * +----------------------------+
16*e0d1619fSKuninori Morimoto * |CPU board			|
17*e0d1619fSKuninori Morimoto * |				|
18*e0d1619fSKuninori Morimoto * |CN40 (IO PIN HEADER)	|
19*e0d1619fSKuninori Morimoto * |	AUDIO_CLKIN_V	  pin1  |<--\	+---------------+
20*e0d1619fSKuninori Morimoto * |(*) GP1_25/SL_SW2_V	  pin2  |<--/	|J2		|
21*e0d1619fSKuninori Morimoto * |	AUDIO_CLKOUT_V	  pin5  |<----->| pin7  MCLK	|
22*e0d1619fSKuninori Morimoto * |	SSI_SCK_V	  pin9  |<----->| pin1  BCLK	|
23*e0d1619fSKuninori Morimoto * |	SSI_WS_V	  pin13 |<----->| pin3  WCLK	|
24*e0d1619fSKuninori Morimoto * |	SSI_SD_V	  pin15 |<----->| pin5  DATIN	| (@)
25*e0d1619fSKuninori Morimoto * |				|   \-->| pin15 DATOUT	| [CAPTURE]
26*e0d1619fSKuninori Morimoto * +----------------------------+	+---------------+
27*e0d1619fSKuninori Morimoto * +----------------------------+
28*e0d1619fSKuninori Morimoto * |Breakout board		|
29*e0d1619fSKuninori Morimoto * |				|	+---------------+
30*e0d1619fSKuninori Morimoto * |CN34 (I2C CN)		|	|J1		|
31*e0d1619fSKuninori Morimoto * |	I2C0_SCL	   pin3 |<----->| pin20 SCL	|
32*e0d1619fSKuninori Morimoto * |	I2C0_SDA	   pin5 |<----->| pin18 SDA	|
33*e0d1619fSKuninori Morimoto * |				|	+---------------+
34*e0d1619fSKuninori Morimoto * |				|	+-----------------------+
35*e0d1619fSKuninori Morimoto * |CN4 (Power)		        |	|J7			|
36*e0d1619fSKuninori Morimoto * |	3v3 (v)		   pin9 |<----->| pin4  / pin8  3.3v	|
37*e0d1619fSKuninori Morimoto * |	GND (v)	    pin3 / pin4 |<----->| pin12 / pin14 GND	|
38*e0d1619fSKuninori Morimoto * +----------------------------+	+-----------------------+
39*e0d1619fSKuninori Morimoto * (*)	GP1_25/SL_SW2_V is used as TPU
40*e0d1619fSKuninori Morimoto * (@)	Connect to pin5 (DATIN = playback) or pin15 (DATOUT = capture)
41*e0d1619fSKuninori Morimoto * (v)	These are just sample pins. You can find many 3v3 / GND pins on
42*e0d1619fSKuninori Morimoto *	White Hawk board, not only CN4. You can use other pins for it.
43*e0d1619fSKuninori Morimoto *
44*e0d1619fSKuninori Morimoto * [How to enable]
45*e0d1619fSKuninori Morimoto *
46*e0d1619fSKuninori Morimoto * You need these configs
47*e0d1619fSKuninori Morimoto *
48*e0d1619fSKuninori Morimoto *	CONFIG_PWM
49*e0d1619fSKuninori Morimoto *	CONFIG_PWM_RENESAS_TPU
50*e0d1619fSKuninori Morimoto *	CONFIG_COMMON_CLK_PWM
51*e0d1619fSKuninori Morimoto *	CONFIG_SND_SOC_DA7213
52*e0d1619fSKuninori Morimoto *
53*e0d1619fSKuninori Morimoto * [How to use]
54*e0d1619fSKuninori Morimoto *
55*e0d1619fSKuninori Morimoto * 44.1kHz groups sound is available by default.
56*e0d1619fSKuninori Morimoto * You need to update audio_clkin settings to switch to 48kHz groups sound.
57*e0d1619fSKuninori Morimoto * see
58*e0d1619fSKuninori Morimoto *	[(C) clock]
59*e0d1619fSKuninori Morimoto *
60*e0d1619fSKuninori Morimoto * You can use capture if you change the settings
61*e0d1619fSKuninori Morimoto * see
62*e0d1619fSKuninori Morimoto *	[CAPTURE]
63*e0d1619fSKuninori Morimoto *
64*e0d1619fSKuninori Morimoto * You need to setup Headphone
65*e0d1619fSKuninori Morimoto *
66*e0d1619fSKuninori Morimoto *	> amixer set "Headphone" 40%
67*e0d1619fSKuninori Morimoto *	> amixer set "Headphone" on
68*e0d1619fSKuninori Morimoto *	> amixer set "Mixout Left DAC Left" on
69*e0d1619fSKuninori Morimoto *	> amixer set "Mixout Right DAC Right" on
70*e0d1619fSKuninori Morimoto */
71*e0d1619fSKuninori Morimoto
72*e0d1619fSKuninori Morimoto/dts-v1/;
73*e0d1619fSKuninori Morimoto/plugin/;
74*e0d1619fSKuninori Morimoto#include <dt-bindings/clock/r8a779g0-cpg-mssr.h>
75*e0d1619fSKuninori Morimoto
76*e0d1619fSKuninori Morimoto&{/} {
77*e0d1619fSKuninori Morimoto	sound_card: sound {
78*e0d1619fSKuninori Morimoto		compatible = "audio-graph-card";
79*e0d1619fSKuninori Morimoto		label = "rcar-sound";
80*e0d1619fSKuninori Morimoto
81*e0d1619fSKuninori Morimoto		dais = <&rsnd_port>;	/* DA7212 Audio Codec */
82*e0d1619fSKuninori Morimoto	};
83*e0d1619fSKuninori Morimoto
84*e0d1619fSKuninori Morimoto	tpu_clk: tpu-clk {
85*e0d1619fSKuninori Morimoto		compatible = "pwm-clock";
86*e0d1619fSKuninori Morimoto		#clock-cells = <0>;
87*e0d1619fSKuninori Morimoto
88*e0d1619fSKuninori Morimoto		/* 44.1kHz groups [(C) clock] */
89*e0d1619fSKuninori Morimoto		clock-frequency = <11289600>;
90*e0d1619fSKuninori Morimoto		pwms = <&tpu 0 88 0>;	/* 1000000000 / 88 =~ 11289600 */
91*e0d1619fSKuninori Morimoto
92*e0d1619fSKuninori Morimoto		/* 48  kHz groups [(C) clock] */
93*e0d1619fSKuninori Morimoto//		clock-frequency = <12288000>;
94*e0d1619fSKuninori Morimoto//		pwms = <&tpu 0 81 0>;	/* 1000000000 / 81 =~ 12288000 */
95*e0d1619fSKuninori Morimoto	};
96*e0d1619fSKuninori Morimoto
97*e0d1619fSKuninori Morimoto};
98*e0d1619fSKuninori Morimoto
99*e0d1619fSKuninori Morimoto&pfc {
100*e0d1619fSKuninori Morimoto	sound_pins: sound {
101*e0d1619fSKuninori Morimoto		groups = "ssi_ctrl", "ssi_data";
102*e0d1619fSKuninori Morimoto		function = "ssi";
103*e0d1619fSKuninori Morimoto	};
104*e0d1619fSKuninori Morimoto
105*e0d1619fSKuninori Morimoto	sound_clk_pins: sound-clk {
106*e0d1619fSKuninori Morimoto		groups = "audio_clkin", "audio_clkout";
107*e0d1619fSKuninori Morimoto		function = "audio_clk";
108*e0d1619fSKuninori Morimoto	};
109*e0d1619fSKuninori Morimoto
110*e0d1619fSKuninori Morimoto	tpu0_pins: tpu0 {
111*e0d1619fSKuninori Morimoto		groups = "tpu_to0_a";
112*e0d1619fSKuninori Morimoto		function = "tpu";
113*e0d1619fSKuninori Morimoto	};
114*e0d1619fSKuninori Morimoto};
115*e0d1619fSKuninori Morimoto
116*e0d1619fSKuninori Morimoto&tpu {
117*e0d1619fSKuninori Morimoto	pinctrl-0 = <&tpu0_pins>;
118*e0d1619fSKuninori Morimoto	pinctrl-names = "default";
119*e0d1619fSKuninori Morimoto
120*e0d1619fSKuninori Morimoto	status = "okay";
121*e0d1619fSKuninori Morimoto};
122*e0d1619fSKuninori Morimoto
123*e0d1619fSKuninori Morimoto&i2c0 {
124*e0d1619fSKuninori Morimoto	#address-cells = <1>;
125*e0d1619fSKuninori Morimoto	#size-cells = <0>;
126*e0d1619fSKuninori Morimoto
127*e0d1619fSKuninori Morimoto	codec@1a {
128*e0d1619fSKuninori Morimoto		compatible = "dlg,da7212";
129*e0d1619fSKuninori Morimoto
130*e0d1619fSKuninori Morimoto		#sound-dai-cells = <0>;
131*e0d1619fSKuninori Morimoto		reg = <0x1a>;
132*e0d1619fSKuninori Morimoto
133*e0d1619fSKuninori Morimoto		clocks = <&rcar_sound>;
134*e0d1619fSKuninori Morimoto		clock-names = "mclk";
135*e0d1619fSKuninori Morimoto
136*e0d1619fSKuninori Morimoto		dlg,micbias1-lvl = <2500>;
137*e0d1619fSKuninori Morimoto		dlg,micbias2-lvl = <2500>;
138*e0d1619fSKuninori Morimoto		dlg,dmic-data-sel = "lrise_rfall";
139*e0d1619fSKuninori Morimoto		dlg,dmic-samplephase = "between_clkedge";
140*e0d1619fSKuninori Morimoto		dlg,dmic-clkrate = <3000000>;
141*e0d1619fSKuninori Morimoto
142*e0d1619fSKuninori Morimoto		VDDA-supply   = <&reg_1p8v>;
143*e0d1619fSKuninori Morimoto		VDDMIC-supply = <&reg_3p3v>;
144*e0d1619fSKuninori Morimoto		VDDIO-supply  = <&reg_3p3v>;
145*e0d1619fSKuninori Morimoto
146*e0d1619fSKuninori Morimoto		port {
147*e0d1619fSKuninori Morimoto			da7212_endpoint: endpoint {
148*e0d1619fSKuninori Morimoto				remote-endpoint = <&rsnd_endpoint>;
149*e0d1619fSKuninori Morimoto			};
150*e0d1619fSKuninori Morimoto		};
151*e0d1619fSKuninori Morimoto	};
152*e0d1619fSKuninori Morimoto};
153*e0d1619fSKuninori Morimoto
154*e0d1619fSKuninori Morimoto&rcar_sound {
155*e0d1619fSKuninori Morimoto	pinctrl-0 = <&sound_clk_pins>, <&sound_pins>;
156*e0d1619fSKuninori Morimoto	pinctrl-names = "default";
157*e0d1619fSKuninori Morimoto
158*e0d1619fSKuninori Morimoto	/* Single DAI */
159*e0d1619fSKuninori Morimoto	#sound-dai-cells = <0>;
160*e0d1619fSKuninori Morimoto
161*e0d1619fSKuninori Morimoto	/* audio_clkout */
162*e0d1619fSKuninori Morimoto	#clock-cells = <0>;
163*e0d1619fSKuninori Morimoto	clock-frequency = <5644800>; /* 44.1kHz groups [(C) clock] */
164*e0d1619fSKuninori Morimoto//	clock-frequency = <6144000>; /* 48  kHz groups [(C) clock] */
165*e0d1619fSKuninori Morimoto
166*e0d1619fSKuninori Morimoto	status = "okay";
167*e0d1619fSKuninori Morimoto
168*e0d1619fSKuninori Morimoto	/* Update <clkin> to <tpu_clk> */
169*e0d1619fSKuninori Morimoto	clocks = <&cpg CPG_MOD 2926>, <&cpg CPG_MOD 2927>, <&tpu_clk>;
170*e0d1619fSKuninori Morimoto
171*e0d1619fSKuninori Morimoto	ports {
172*e0d1619fSKuninori Morimoto		rsnd_port: port {
173*e0d1619fSKuninori Morimoto			rsnd_endpoint: endpoint {
174*e0d1619fSKuninori Morimoto				remote-endpoint = <&da7212_endpoint>;
175*e0d1619fSKuninori Morimoto
176*e0d1619fSKuninori Morimoto				dai-format = "i2s";
177*e0d1619fSKuninori Morimoto				bitclock-master = <&rsnd_endpoint>;
178*e0d1619fSKuninori Morimoto				frame-master = <&rsnd_endpoint>;
179*e0d1619fSKuninori Morimoto
180*e0d1619fSKuninori Morimoto				/* Mutually exclusive with 'capture' */
181*e0d1619fSKuninori Morimoto				playback = <&ssi0>;
182*e0d1619fSKuninori Morimoto				/* [CAPTURE] */
183*e0d1619fSKuninori Morimoto				/* capture = <&ssi0>; */
184*e0d1619fSKuninori Morimoto			};
185*e0d1619fSKuninori Morimoto		};
186*e0d1619fSKuninori Morimoto	};
187*e0d1619fSKuninori Morimoto};
188