1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Device Tree Source for the Kingfisher (ULCB extension) board
4 *
5 * Copyright (C) 2017 Renesas Electronics Corp.
6 * Copyright (C) 2017 Cogent Embedded, Inc.
7 */
8
9/*
10 * SSI-PCM3168A
11 *	aplay   -D plughw:0,2 xxx.wav
12 *	arecord -D plughw:0,3 xxx.wav
13 */
14
15/ {
16	aliases {
17		serial1 = &hscif0;
18		serial2 = &scif1;
19	};
20
21	clksndsel: clksndsel {
22		#clock-cells = <0>;
23		compatible = "gpio-mux-clock";
24		clocks = <&cs2000>, <&audio_clk_a>; /* clk8snd, clksnd */
25		select-gpios = <&gpio_exp_75 13 GPIO_ACTIVE_HIGH>;
26	};
27
28	snd_3p3v: regulator-snd_3p3v {
29		compatible = "regulator-fixed";
30		regulator-name = "snd-3.3v";
31		regulator-min-microvolt = <3300000>;
32		regulator-max-microvolt = <3300000>;
33	};
34
35	snd_vcc5v: regulator-snd_vcc5v {
36		compatible = "regulator-fixed";
37		regulator-name = "snd-vcc5v";
38		regulator-min-microvolt = <5000000>;
39		regulator-max-microvolt = <5000000>;
40	};
41
42	wlan_en: regulator-wlan_en {
43		compatible = "regulator-fixed";
44		regulator-name = "wlan-en-regulator";
45
46		regulator-min-microvolt = <3300000>;
47		regulator-max-microvolt = <3300000>;
48
49		gpio = <&gpio_exp_74 4 GPIO_ACTIVE_HIGH>;
50		startup-delay-us = <70000>;
51		enable-active-high;
52	};
53};
54
55&can0 {
56	pinctrl-0 = <&can0_pins>;
57	pinctrl-names = "default";
58	status = "okay";
59};
60
61&can1 {
62	pinctrl-0 = <&can1_pins>;
63	pinctrl-names = "default";
64	status = "okay";
65};
66
67&ehci0 {
68	dr_mode = "otg";
69	status = "okay";
70};
71
72&hscif0 {
73	pinctrl-0 = <&hscif0_pins>;
74	pinctrl-names = "default";
75	uart-has-rtscts;
76
77	status = "okay";
78};
79
80&hsusb {
81	dr_mode = "otg";
82	status = "okay";
83};
84
85&i2c2 {
86	/* U11 */
87	gpio_exp_74: gpio@74 {
88		compatible = "ti,tca9539";
89		reg = <0x74>;
90		gpio-controller;
91		#gpio-cells = <2>;
92		interrupt-controller;
93		interrupt-parent = <&gpio6>;
94		interrupts = <8 IRQ_TYPE_EDGE_FALLING>;
95
96		audio_out_off {
97			gpio-hog;
98			gpios = <0 GPIO_ACTIVE_HIGH>; /* P00 */
99			output-high;
100			line-name = "Audio_Out_OFF";
101		};
102
103		sd-wifi-mux {
104			gpio-hog;
105			gpios = <5 GPIO_ACTIVE_HIGH>;
106			output-low;	/* Connect WL1837 */
107			line-name = "SD WiFi mux";
108		};
109
110		hub_pwen {
111			gpio-hog;
112			gpios = <6 GPIO_ACTIVE_HIGH>;
113			output-high;
114			line-name = "HUB pwen";
115		};
116
117		hub_rst {
118			gpio-hog;
119			gpios = <7 GPIO_ACTIVE_HIGH>;
120			output-high;
121			line-name = "HUB rst";
122		};
123
124		otg_offvbusn {
125			gpio-hog;
126			gpios = <8 GPIO_ACTIVE_HIGH>;
127			output-low;
128			line-name = "OTG OFFVBUSn";
129		};
130
131		otg_extlpn {
132			gpio-hog;
133			gpios = <9 GPIO_ACTIVE_HIGH>;
134			output-high;
135			line-name = "OTG EXTLPn";
136		};
137
138		snd_rst {
139			gpio-hog;
140			gpios = <15 GPIO_ACTIVE_HIGH>; /* P17 */
141			output-high;
142			line-name = "SND_RST";
143		};
144	};
145
146	/* U5 */
147	gpio_exp_75: gpio@75 {
148		compatible = "ti,tca9539";
149		reg = <0x75>;
150		gpio-controller;
151		#gpio-cells = <2>;
152		interrupt-controller;
153		interrupt-parent = <&gpio6>;
154		interrupts = <4 IRQ_TYPE_EDGE_FALLING>;
155	};
156
157	i2cswitch2: i2c-switch@71 {
158		compatible = "nxp,pca9548";
159		#address-cells = <1>;
160		#size-cells = <0>;
161		reg = <0x71>;
162		reset-gpios = <&gpio5 3 GPIO_ACTIVE_LOW>;
163
164		/* Audio_SDA, Audio_SCL */
165		i2c@7 {
166			#address-cells = <1>;
167			#size-cells = <0>;
168			reg = <7>;
169
170			pcm3168a: audio-codec@44 {
171				#sound-dai-cells = <0>;
172				compatible = "ti,pcm3168a";
173				reg = <0x44>;
174				clocks = <&clksndsel>;
175				clock-names = "scki";
176
177				VDD1-supply	= <&snd_3p3v>;
178				VDD2-supply	= <&snd_3p3v>;
179				VCCAD1-supply	= <&snd_vcc5v>;
180				VCCAD2-supply	= <&snd_vcc5v>;
181				VCCDA1-supply	= <&snd_vcc5v>;
182				VCCDA2-supply	= <&snd_vcc5v>;
183
184				ports {
185					#address-cells = <1>;
186					#size-cells = <0>;
187					mclk-fs = <512>;
188					port@0 {
189						reg = <0>;
190						pcm3168a_endpoint_p: endpoint {
191							remote-endpoint = <&rsnd_for_pcm3168a_play>;
192							clocks = <&clksndsel>;
193						};
194					};
195					port@1 {
196						reg = <1>;
197						pcm3168a_endpoint_c: endpoint {
198							remote-endpoint = <&rsnd_for_pcm3168a_capture>;
199							clocks = <&clksndsel>;
200						};
201					};
202				};
203			};
204		};
205	};
206};
207
208&i2c4 {
209	gpio_exp_76: gpio@76 {
210		compatible = "ti,tca9539";
211		reg = <0x76>;
212		gpio-controller;
213		#gpio-cells = <2>;
214		interrupt-controller;
215		interrupt-parent = <&gpio7>;
216		interrupts = <3 IRQ_TYPE_EDGE_FALLING>;
217	};
218
219	gpio_exp_77: gpio@77 {
220		compatible = "ti,tca9539";
221		reg = <0x77>;
222		gpio-controller;
223		#gpio-cells = <2>;
224		interrupt-controller;
225		interrupt-parent = <&gpio5>;
226		interrupts = <9 IRQ_TYPE_EDGE_FALLING>;
227	};
228
229	i2cswitch4: i2c-switch@71 {
230		compatible = "nxp,pca9548";
231		#address-cells = <1>;
232		#size-cells = <0>;
233		reg = <0x71>;
234		reset-gpios = <&gpio3 15 GPIO_ACTIVE_LOW>;
235	};
236};
237
238&ohci0 {
239	dr_mode = "otg";
240	status = "okay";
241};
242
243&pcie_bus_clk {
244	clock-frequency = <100000000>;
245};
246
247&pciec0 {
248	status = "okay";
249};
250
251&pciec1 {
252	status = "okay";
253};
254
255&pfc {
256	can0_pins: can0 {
257		groups = "can0_data_a";
258		function = "can0";
259	};
260
261	can1_pins: can1 {
262		groups = "can1_data";
263		function = "can1";
264	};
265
266	hscif0_pins: hscif0 {
267		groups = "hscif0_data", "hscif0_ctrl";
268		function = "hscif0";
269	};
270
271	scif1_pins: scif1 {
272		groups = "scif1_data_b", "scif1_ctrl";
273		function = "scif1";
274	};
275
276	sdhi3_pins: sdhi3 {
277		groups = "sdhi3_data4", "sdhi3_ctrl";
278		function = "sdhi3";
279		power-source = <3300>;
280	};
281
282	usb0_pins: usb0 {
283		groups = "usb0";
284		function = "usb0";
285	};
286
287	sound_pcm_pins: sound-pcm {
288		groups = "ssi349_ctrl", "ssi3_data", "ssi4_data";
289		function = "ssi";
290	};
291};
292
293&scif1 {
294	pinctrl-0 = <&scif1_pins>;
295	pinctrl-names = "default";
296	uart-has-rtscts;
297
298	status = "okay";
299};
300
301&sdhi3 {
302	pinctrl-0 = <&sdhi3_pins>;
303	pinctrl-names = "default";
304
305	vmmc-supply = <&wlan_en>;
306	vqmmc-supply = <&wlan_en>;
307	bus-width = <4>;
308	no-1-8-v;
309	non-removable;
310	cap-power-off-card;
311	keep-power-in-suspend;
312	max-frequency = <26000000>;
313	status = "okay";
314
315	#address-cells = <1>;
316	#size-cells = <0>;
317	wlcore: wlcore@2 {
318		compatible = "ti,wl1837";
319		reg = <2>;
320		interrupt-parent = <&gpio1>;
321		interrupts = <25 IRQ_TYPE_EDGE_FALLING>;
322	};
323};
324
325&usb2_phy0 {
326	pinctrl-0 = <&usb0_pins>;
327	pinctrl-names = "default";
328
329	status = "okay";
330};
331
332&xhci0 {
333	status = "okay";
334};
335
336&sound_card {
337	dais = <&rsnd_port0	/* ak4613 */
338		&rsnd_port1	/* HDMI0  */
339		&rsnd_port2	/* pcm3168a playback */
340		&rsnd_port3	/* pcm3168a capture  */
341		>;
342};
343
344&rcar_sound {
345	pinctrl-0 = <&sound_pins
346		     &sound_clk_pins
347		     &sound_pcm_pins>;
348
349	ports {
350		/* rsnd_port0/1 are on salvator-common */
351		rsnd_port2: port@2 {
352			reg = <2>;
353			rsnd_for_pcm3168a_play: endpoint {
354				remote-endpoint = <&pcm3168a_endpoint_p>;
355
356				dai-format = "i2s";
357				bitclock-master = <&rsnd_for_pcm3168a_play>;
358				frame-master = <&rsnd_for_pcm3168a_play>;
359				dai-tdm-slot-num = <8>;
360
361				playback = <&ssi3>;
362			};
363		};
364		rsnd_port3: port@3 {
365			reg = <3>;
366			rsnd_for_pcm3168a_capture: endpoint {
367				remote-endpoint = <&pcm3168a_endpoint_c>;
368
369				dai-format = "i2s";
370				bitclock-master = <&rsnd_for_pcm3168a_capture>;
371				frame-master = <&rsnd_for_pcm3168a_capture>;
372				dai-tdm-slot-num = <6>;
373
374				capture  = <&ssi4>;
375			};
376		};
377	};
378};
379
380&ssi4 {
381	shared-pin;
382};
383