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		mmc2 = &sdhi3;
20	};
21
22	clksndsel: clksndsel {
23		#clock-cells = <0>;
24		compatible = "gpio-mux-clock";
25		clocks = <&cs2000>, <&audio_clk_a>; /* clk8snd, clksnd */
26		select-gpios = <&gpio_exp_75 13 GPIO_ACTIVE_HIGH>;
27	};
28
29	hdmi1-out {
30		compatible = "hdmi-connector";
31		type = "a";
32
33		port {
34			hdmi1_con: endpoint {
35				remote-endpoint = <&adv7513_out>;
36			};
37		};
38	};
39
40	accel_3v3: regulator-acc-3v3 {
41		compatible = "regulator-fixed";
42		regulator-name = "accel-3v3";
43		regulator-min-microvolt = <3300000>;
44		regulator-max-microvolt = <3300000>;
45	};
46
47	hdmi_1v8: regulator-hdmi-1v8 {
48		compatible = "regulator-fixed";
49		regulator-name = "hdmi-1v8";
50		regulator-min-microvolt = <1800000>;
51		regulator-max-microvolt = <1800000>;
52	};
53
54	hdmi_3v3: regulator-hdmi-3v3 {
55		compatible = "regulator-fixed";
56		regulator-name = "hdmi-3v3";
57		regulator-min-microvolt = <3300000>;
58		regulator-max-microvolt = <3300000>;
59	};
60
61	snd_3p3v: regulator-snd_3p3v {
62		compatible = "regulator-fixed";
63		regulator-name = "snd-3.3v";
64		regulator-min-microvolt = <3300000>;
65		regulator-max-microvolt = <3300000>;
66	};
67
68	snd_vcc5v: regulator-snd_vcc5v {
69		compatible = "regulator-fixed";
70		regulator-name = "snd-vcc5v";
71		regulator-min-microvolt = <5000000>;
72		regulator-max-microvolt = <5000000>;
73	};
74
75	wlan_en: regulator-wlan_en {
76		compatible = "regulator-fixed";
77		regulator-name = "wlan-en-regulator";
78
79		regulator-min-microvolt = <3300000>;
80		regulator-max-microvolt = <3300000>;
81
82		gpio = <&gpio_exp_74 4 GPIO_ACTIVE_HIGH>;
83		startup-delay-us = <70000>;
84		enable-active-high;
85	};
86};
87
88&can0 {
89	pinctrl-0 = <&can0_pins>;
90	pinctrl-names = "default";
91	status = "okay";
92};
93
94&can1 {
95	pinctrl-0 = <&can1_pins>;
96	pinctrl-names = "default";
97	status = "okay";
98};
99
100&du_out_rgb {
101	remote-endpoint = <&adv7513_in>;
102};
103
104&ehci0 {
105	dr_mode = "otg";
106	status = "okay";
107};
108
109&hscif0 {
110	pinctrl-0 = <&hscif0_pins>;
111	pinctrl-names = "default";
112	uart-has-rtscts;
113
114	status = "okay";
115};
116
117&hsusb {
118	dr_mode = "otg";
119	status = "okay";
120};
121
122&i2c2 {
123	i2cswitch2: i2c-switch@71 {
124		compatible = "nxp,pca9548";
125		#address-cells = <1>;
126		#size-cells = <0>;
127		reg = <0x71>;
128		reset-gpios = <&gpio5 3 GPIO_ACTIVE_LOW>;
129
130		/* HDMIoSDA, HDMIoSCL */
131		i2c@4 {
132			#address-cells = <1>;
133			#size-cells = <0>;
134			reg = <4>;
135
136			hdmi@3d {
137				compatible = "adi,adv7513";
138				reg = <0x3d>;
139
140				pinctrl-0 = <&hdmi1_pins>;
141				pinctrl-names = "default";
142
143				interrupt-parent = <&gpio2>;
144				interrupts = <14 IRQ_TYPE_LEVEL_LOW>;
145
146				clocks = <&cs2000>;
147				clock-names = "cec";
148
149				pd-gpios = <&gpio_exp_75 5 GPIO_ACTIVE_LOW>;
150
151				avdd-supply = <&hdmi_1v8>;
152				dvdd-supply = <&hdmi_1v8>;
153				pvdd-supply = <&hdmi_1v8>;
154				dvdd-3v-supply = <&hdmi_3v3>;
155				bgvdd-supply = <&hdmi_1v8>;
156
157				adi,input-depth = <8>;
158				adi,input-colorspace = "rgb";
159				adi,input-clock = "1x";
160
161				ports {
162					#address-cells = <1>;
163					#size-cells = <0>;
164
165					port@0 {
166						reg = <0>;
167						adv7513_in: endpoint {
168							remote-endpoint = <&du_out_rgb>;
169						};
170					};
171
172					port@1 {
173						reg = <1>;
174						adv7513_out: endpoint {
175							remote-endpoint = <&hdmi1_con>;
176						};
177					};
178				};
179			};
180		};
181
182		/* Audio_SDA, Audio_SCL */
183		i2c@7 {
184			#address-cells = <1>;
185			#size-cells = <0>;
186			reg = <7>;
187
188			accelerometer@1d {
189				compatible = "st,lsm9ds0-imu";
190				reg = <0x1d>;
191
192				vdd-supply = <&accel_3v3>;
193				vddio-supply = <&accel_3v3>;
194			};
195
196			pcm3168a: audio-codec@44 {
197				#sound-dai-cells = <0>;
198				compatible = "ti,pcm3168a";
199				reg = <0x44>;
200				clocks = <&clksndsel>;
201				clock-names = "scki";
202
203				VDD1-supply	= <&snd_3p3v>;
204				VDD2-supply	= <&snd_3p3v>;
205				VCCAD1-supply	= <&snd_vcc5v>;
206				VCCAD2-supply	= <&snd_vcc5v>;
207				VCCDA1-supply	= <&snd_vcc5v>;
208				VCCDA2-supply	= <&snd_vcc5v>;
209
210				ports {
211					#address-cells = <1>;
212					#size-cells = <0>;
213					mclk-fs = <512>;
214					port@0 {
215						reg = <0>;
216						pcm3168a_endpoint_p: endpoint {
217							remote-endpoint = <&rsnd_for_pcm3168a_play>;
218							clocks = <&clksndsel>;
219						};
220					};
221					port@1 {
222						reg = <1>;
223						pcm3168a_endpoint_c: endpoint {
224							remote-endpoint = <&rsnd_for_pcm3168a_capture>;
225							clocks = <&clksndsel>;
226						};
227					};
228				};
229			};
230
231			gyroscope@6b {
232				compatible = "st,lsm9ds0-gyro";
233				reg = <0x6b>;
234
235				vdd-supply = <&accel_3v3>;
236				vddio-supply = <&accel_3v3>;
237			};
238		};
239	};
240
241	/* U11 */
242	gpio_exp_74: gpio@74 {
243		compatible = "ti,tca9539";
244		reg = <0x74>;
245		gpio-controller;
246		#gpio-cells = <2>;
247		interrupt-controller;
248		interrupt-parent = <&gpio6>;
249		interrupts = <8 IRQ_TYPE_EDGE_FALLING>;
250
251		audio-out-off-hog {
252			gpio-hog;
253			gpios = <0 GPIO_ACTIVE_HIGH>; /* P00 */
254			output-high;
255			line-name = "Audio_Out_OFF";
256		};
257
258		hub-pwen-hog {
259			gpio-hog;
260			gpios = <6 GPIO_ACTIVE_HIGH>;
261			output-high;
262			line-name = "HUB pwen";
263		};
264
265		hub-rst-hog {
266			gpio-hog;
267			gpios = <7 GPIO_ACTIVE_HIGH>;
268			output-high;
269			line-name = "HUB rst";
270		};
271
272		otg-extlpn-hog {
273			gpio-hog;
274			gpios = <9 GPIO_ACTIVE_HIGH>;
275			output-high;
276			line-name = "OTG EXTLPn";
277		};
278
279		otg-offvbusn-hog {
280			gpio-hog;
281			gpios = <8 GPIO_ACTIVE_HIGH>;
282			output-low;
283			line-name = "OTG OFFVBUSn";
284		};
285
286		sd-wifi-mux-hog {
287			gpio-hog;
288			gpios = <5 GPIO_ACTIVE_HIGH>;
289			output-low;	/* Connect WL1837 */
290			line-name = "SD WiFi mux";
291		};
292
293		snd-rst-hog {
294			gpio-hog;
295			gpios = <15 GPIO_ACTIVE_HIGH>; /* P17 */
296			output-high;
297			line-name = "SND_RST";
298		};
299	};
300
301	/* U5 */
302	gpio_exp_75: gpio@75 {
303		compatible = "ti,tca9539";
304		reg = <0x75>;
305		gpio-controller;
306		#gpio-cells = <2>;
307		interrupt-controller;
308		interrupt-parent = <&gpio6>;
309		interrupts = <4 IRQ_TYPE_EDGE_FALLING>;
310	};
311};
312
313&i2c4 {
314	i2cswitch4: i2c-switch@71 {
315		compatible = "nxp,pca9548";
316		#address-cells = <1>;
317		#size-cells = <0>;
318		reg = <0x71>;
319		reset-gpios = <&gpio3 15 GPIO_ACTIVE_LOW>;
320	};
321
322	gpio_exp_76: gpio@76 {
323		compatible = "ti,tca9539";
324		reg = <0x76>;
325		gpio-controller;
326		#gpio-cells = <2>;
327		interrupt-controller;
328		interrupt-parent = <&gpio7>;
329		interrupts = <3 IRQ_TYPE_EDGE_FALLING>;
330	};
331
332	gpio_exp_77: gpio@77 {
333		compatible = "ti,tca9539";
334		reg = <0x77>;
335		gpio-controller;
336		#gpio-cells = <2>;
337		interrupt-controller;
338		interrupt-parent = <&gpio5>;
339		interrupts = <9 IRQ_TYPE_EDGE_FALLING>;
340	};
341};
342
343&ohci0 {
344	dr_mode = "otg";
345	status = "okay";
346};
347
348&pcie_bus_clk {
349	clock-frequency = <100000000>;
350};
351
352&pciec0 {
353	status = "okay";
354};
355
356&pciec1 {
357	status = "okay";
358};
359
360&pfc {
361	can0_pins: can0 {
362		groups = "can0_data_a";
363		function = "can0";
364	};
365
366	can1_pins: can1 {
367		groups = "can1_data";
368		function = "can1";
369	};
370
371	hdmi1_pins: hdmi1 {
372		adv7513-interrupt {
373			pins = "GP_2_14";
374			bias-pull-up;
375		};
376
377		du {
378			groups = "du_rgb888", "du_sync", "du_clk_out_0",
379				 "du_disp";
380			function = "du";
381		};
382	};
383
384	hscif0_pins: hscif0 {
385		groups = "hscif0_data", "hscif0_ctrl";
386		function = "hscif0";
387	};
388
389	scif1_pins: scif1 {
390		groups = "scif1_data_b", "scif1_ctrl";
391		function = "scif1";
392	};
393
394	sdhi3_pins: sdhi3 {
395		groups = "sdhi3_data4", "sdhi3_ctrl";
396		function = "sdhi3";
397		power-source = <3300>;
398	};
399
400	sound_pcm_pins: sound-pcm {
401		groups = "ssi349_ctrl", "ssi3_data", "ssi4_data";
402		function = "ssi";
403	};
404
405	usb0_pins: usb0 {
406		groups = "usb0";
407		function = "usb0";
408	};
409};
410
411&rcar_sound {
412	pinctrl-0 = <&sound_pins
413		     &sound_clk_pins
414		     &sound_pcm_pins>;
415
416	ports {
417		/* rsnd_port0/1 are defined in ulcb.dtsi */
418		rsnd_port2: port@2 {
419			reg = <2>;
420			rsnd_for_pcm3168a_play: endpoint {
421				remote-endpoint = <&pcm3168a_endpoint_p>;
422				bitclock-master;
423				frame-master;
424				dai-tdm-slot-num = <8>;
425				playback = <&ssi3>;
426			};
427		};
428		rsnd_port3: port@3 {
429			reg = <3>;
430			rsnd_for_pcm3168a_capture: endpoint {
431				remote-endpoint = <&pcm3168a_endpoint_c>;
432				bitclock-master;
433				frame-master;
434				dai-tdm-slot-num = <6>;
435				capture  = <&ssi4>;
436			};
437		};
438	};
439};
440
441&scif1 {
442	pinctrl-0 = <&scif1_pins>;
443	pinctrl-names = "default";
444	uart-has-rtscts;
445
446	status = "okay";
447};
448
449&sdhi3 {
450	pinctrl-0 = <&sdhi3_pins>;
451	pinctrl-names = "default";
452
453	vmmc-supply = <&wlan_en>;
454	vqmmc-supply = <&wlan_en>;
455	bus-width = <4>;
456	no-1-8-v;
457	non-removable;
458	cap-power-off-card;
459	keep-power-in-suspend;
460	max-frequency = <26000000>;
461	status = "okay";
462
463	#address-cells = <1>;
464	#size-cells = <0>;
465	wlcore: wlcore@2 {
466		compatible = "ti,wl1837";
467		reg = <2>;
468		interrupt-parent = <&gpio1>;
469		interrupts = <25 IRQ_TYPE_EDGE_FALLING>;
470	};
471};
472
473&sound_card {
474	links = <&rsnd_port0	/* ak4613 */
475		 &rsnd_port1	/* HDMI0  */
476		 &rsnd_port2	/* pcm3168a playback */
477		 &rsnd_port3	/* pcm3168a capture  */
478		>;
479};
480
481&ssi4 {
482	shared-pin;
483};
484
485&usb2_phy0 {
486	pinctrl-0 = <&usb0_pins>;
487	pinctrl-names = "default";
488
489	status = "okay";
490};
491
492&xhci0 {
493	status = "okay";
494};
495