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