1// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2/*
3 * Copyright (c) 2019 BayLibre SAS. All rights reserved.
4 */
5
6/dts-v1/;
7
8#include "meson-g12a.dtsi"
9#include <dt-bindings/gpio/gpio.h>
10#include <dt-bindings/input/input.h>
11#include <dt-bindings/gpio/meson-g12a-gpio.h>
12#include <dt-bindings/sound/meson-g12a-tohdmitx.h>
13
14/ {
15	compatible = "seirobotics,sei510", "amlogic,g12a";
16	model = "SEI Robotics SEI510";
17
18	adc_keys {
19		compatible = "adc-keys";
20		io-channels = <&saradc 0>;
21		io-channel-names = "buttons";
22		keyup-threshold-microvolt = <1800000>;
23
24		button-onoff {
25			label = "On/Off";
26			linux,code = <KEY_POWER>;
27			press-threshold-microvolt = <1700000>;
28		};
29	};
30
31	aliases {
32		serial0 = &uart_AO;
33		ethernet0 = &ethmac;
34	};
35
36	mono_dac: audio-codec-0 {
37		compatible = "maxim,max98357a";
38		#sound-dai-cells = <0>;
39		sound-name-prefix = "U16";
40		sdmode-gpios = <&gpio GPIOX_8 GPIO_ACTIVE_HIGH>;
41	};
42
43	dmics: audio-codec-1 {
44		#sound-dai-cells = <0>;
45		compatible = "dmic-codec";
46		num-channels = <2>;
47		wakeup-delay-ms = <50>;
48		status = "okay";
49		sound-name-prefix = "MIC";
50	};
51
52	chosen {
53		stdout-path = "serial0:115200n8";
54	};
55
56	cvbs-connector {
57		compatible = "composite-video-connector";
58
59		port {
60			cvbs_connector_in: endpoint {
61				remote-endpoint = <&cvbs_vdac_out>;
62			};
63		};
64	};
65
66	emmc_pwrseq: emmc-pwrseq {
67		compatible = "mmc-pwrseq-emmc";
68		reset-gpios = <&gpio BOOT_12 GPIO_ACTIVE_LOW>;
69	};
70
71	hdmi-connector {
72		compatible = "hdmi-connector";
73		type = "a";
74
75		port {
76			hdmi_connector_in: endpoint {
77				remote-endpoint = <&hdmi_tx_tmds_out>;
78			};
79		};
80	};
81
82	memory@0 {
83		device_type = "memory";
84		reg = <0x0 0x0 0x0 0x40000000>;
85	};
86
87	ao_5v: regulator-ao_5v {
88		compatible = "regulator-fixed";
89		regulator-name = "AO_5V";
90		regulator-min-microvolt = <5000000>;
91		regulator-max-microvolt = <5000000>;
92		vin-supply = <&dc_in>;
93		regulator-always-on;
94	};
95
96	dc_in: regulator-dc_in {
97		compatible = "regulator-fixed";
98		regulator-name = "DC_IN";
99		regulator-min-microvolt = <5000000>;
100		regulator-max-microvolt = <5000000>;
101		regulator-always-on;
102	};
103
104	emmc_1v8: regulator-emmc_1v8 {
105		compatible = "regulator-fixed";
106		regulator-name = "EMMC_1V8";
107		regulator-min-microvolt = <1800000>;
108		regulator-max-microvolt = <1800000>;
109		vin-supply = <&vddao_3v3>;
110		regulator-always-on;
111	};
112
113	vddao_3v3: regulator-vddao_3v3 {
114		compatible = "regulator-fixed";
115		regulator-name = "VDDAO_3V3";
116		regulator-min-microvolt = <3300000>;
117		regulator-max-microvolt = <3300000>;
118		vin-supply = <&dc_in>;
119		regulator-always-on;
120	};
121
122	vddao_3v3_t: regultor-vddao_3v3_t {
123		compatible = "regulator-fixed";
124		regulator-name = "VDDAO_3V3_T";
125		regulator-min-microvolt = <3300000>;
126		regulator-max-microvolt = <3300000>;
127		vin-supply = <&vddao_3v3>;
128		gpio = <&gpio GPIOH_8 GPIO_OPEN_DRAIN>;
129		enable-active-high;
130	};
131
132	vddcpu: regulator-vddcpu {
133		/*
134		 * SY8120B1ABC DC/DC Regulator.
135		 */
136		compatible = "pwm-regulator";
137
138		regulator-name = "VDDCPU";
139		regulator-min-microvolt = <721000>;
140		regulator-max-microvolt = <1022000>;
141
142		pwm-supply = <&dc_in>;
143
144		pwms = <&pwm_AO_cd 1 1250 0>;
145		pwm-dutycycle-range = <100 0>;
146
147		regulator-boot-on;
148		regulator-always-on;
149	};
150
151	vddio_ao1v8: regulator-vddio_ao1v8 {
152		compatible = "regulator-fixed";
153		regulator-name = "VDDIO_AO1V8";
154		regulator-min-microvolt = <1800000>;
155		regulator-max-microvolt = <1800000>;
156		vin-supply = <&vddao_3v3>;
157		regulator-always-on;
158	};
159
160	sdio_pwrseq: sdio-pwrseq {
161		compatible = "mmc-pwrseq-simple";
162		reset-gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>;
163		clocks = <&wifi32k>;
164		clock-names = "ext_clock";
165	};
166
167	wifi32k: wifi32k {
168		compatible = "pwm-clock";
169		#clock-cells = <0>;
170		clock-frequency = <32768>;
171		pwms = <&pwm_ef 0 30518 0>; /* PWM_E at 32.768KHz */
172	};
173
174	sound {
175		compatible = "amlogic,axg-sound-card";
176		model = "SEI510";
177		audio-aux-devs = <&tdmout_a>, <&tdmout_b>,
178				 <&tdmin_a>, <&tdmin_b>;
179		audio-routing = "TDMOUT_A IN 0", "FRDDR_A OUT 0",
180				"TDMOUT_A IN 1", "FRDDR_B OUT 0",
181				"TDMOUT_A IN 2", "FRDDR_C OUT 0",
182				"TDM_A Playback", "TDMOUT_A OUT",
183				"TDMOUT_B IN 0", "FRDDR_A OUT 1",
184				"TDMOUT_B IN 1", "FRDDR_B OUT 1",
185				"TDMOUT_B IN 2", "FRDDR_C OUT 1",
186				"TDM_B Playback", "TDMOUT_B OUT",
187				"TODDR_A IN 4", "PDM Capture",
188				"TODDR_B IN 4", "PDM Capture",
189				"TODDR_C IN 4", "PDM Capture",
190				"TDMIN_A IN 0", "TDM_A Capture",
191				"TDMIN_A IN 3", "TDM_A Loopback",
192				"TDMIN_B IN 0", "TDM_A Capture",
193				"TDMIN_B IN 3", "TDM_A Loopback",
194				"TDMIN_A IN 1", "TDM_B Capture",
195				"TDMIN_A IN 4", "TDM_B Loopback",
196				"TDMIN_B IN 1", "TDM_B Capture",
197				"TDMIN_B IN 4", "TDM_B Loopback",
198				"TODDR_A IN 0", "TDMIN_A OUT",
199				"TODDR_B IN 0", "TDMIN_A OUT",
200				"TODDR_C IN 0", "TDMIN_A OUT",
201				"TODDR_A IN 1", "TDMIN_B OUT",
202				"TODDR_B IN 1", "TDMIN_B OUT",
203				"TODDR_C IN 1", "TDMIN_B OUT";
204
205		assigned-clocks = <&clkc CLKID_MPLL2>,
206				  <&clkc CLKID_MPLL0>,
207				  <&clkc CLKID_MPLL1>;
208		assigned-clock-parents = <0>, <0>, <0>;
209		assigned-clock-rates = <294912000>,
210				       <270950400>,
211				       <393216000>;
212		status = "okay";
213
214		dai-link-0 {
215			sound-dai = <&frddr_a>;
216		};
217
218		dai-link-1 {
219			sound-dai = <&frddr_b>;
220		};
221
222		dai-link-2 {
223			sound-dai = <&frddr_c>;
224		};
225
226		dai-link-3 {
227			sound-dai = <&toddr_a>;
228		};
229
230		dai-link-4 {
231			sound-dai = <&toddr_b>;
232		};
233
234		dai-link-5 {
235			sound-dai = <&toddr_c>;
236		};
237
238		/* internal speaker interface */
239		dai-link-6 {
240			sound-dai = <&tdmif_a>;
241			dai-format = "i2s";
242			dai-tdm-slot-tx-mask-0 = <1 1>;
243			mclk-fs = <256>;
244
245			codec-0 {
246				sound-dai = <&mono_dac>;
247			};
248
249			codec-1 {
250				sound-dai = <&tohdmitx TOHDMITX_I2S_IN_A>;
251			};
252		};
253
254		/* 8ch hdmi interface */
255		dai-link-7 {
256			sound-dai = <&tdmif_b>;
257			dai-format = "i2s";
258			dai-tdm-slot-tx-mask-0 = <1 1>;
259			dai-tdm-slot-tx-mask-1 = <1 1>;
260			dai-tdm-slot-tx-mask-2 = <1 1>;
261			dai-tdm-slot-tx-mask-3 = <1 1>;
262			mclk-fs = <256>;
263
264			codec {
265				sound-dai = <&tohdmitx TOHDMITX_I2S_IN_B>;
266			};
267		};
268
269		/* internal digital mics */
270		dai-link-8 {
271			sound-dai = <&pdm>;
272
273			codec {
274				sound-dai = <&dmics>;
275			};
276		};
277
278		/* hdmi glue */
279		dai-link-9 {
280			sound-dai = <&tohdmitx TOHDMITX_I2S_OUT>;
281
282			codec {
283				sound-dai = <&hdmi_tx>;
284			};
285		};
286	};
287};
288
289&arb {
290	status = "okay";
291};
292
293&cec_AO {
294	pinctrl-0 = <&cec_ao_a_h_pins>;
295	pinctrl-names = "default";
296	status = "disabled";
297	hdmi-phandle = <&hdmi_tx>;
298};
299
300&cecb_AO {
301	pinctrl-0 = <&cec_ao_b_h_pins>;
302	pinctrl-names = "default";
303	status = "okay";
304	hdmi-phandle = <&hdmi_tx>;
305};
306
307&clkc_audio {
308	status = "okay";
309};
310
311&cpu0 {
312	cpu-supply = <&vddcpu>;
313	operating-points-v2 = <&cpu_opp_table>;
314	clocks = <&clkc CLKID_CPU_CLK>;
315	clock-latency = <50000>;
316};
317
318&cpu1 {
319	cpu-supply = <&vddcpu>;
320	operating-points-v2 = <&cpu_opp_table>;
321	clocks = <&clkc CLKID_CPU_CLK>;
322	clock-latency = <50000>;
323};
324
325&cpu2 {
326	cpu-supply = <&vddcpu>;
327	operating-points-v2 = <&cpu_opp_table>;
328	clocks = <&clkc CLKID_CPU_CLK>;
329	clock-latency = <50000>;
330};
331
332&cpu3 {
333	cpu-supply = <&vddcpu>;
334	operating-points-v2 = <&cpu_opp_table>;
335	clocks = <&clkc CLKID_CPU_CLK>;
336	clock-latency = <50000>;
337};
338
339&cvbs_vdac_port {
340	cvbs_vdac_out: endpoint {
341		remote-endpoint = <&cvbs_connector_in>;
342	};
343};
344
345&ethmac {
346	status = "okay";
347	phy-handle = <&internal_ephy>;
348	phy-mode = "rmii";
349};
350
351&frddr_a {
352	status = "okay";
353};
354
355&frddr_b {
356	status = "okay";
357};
358
359&frddr_c {
360	status = "okay";
361};
362
363&hdmi_tx {
364	status = "okay";
365	pinctrl-0 = <&hdmitx_hpd_pins>, <&hdmitx_ddc_pins>;
366	pinctrl-names = "default";
367};
368
369&hdmi_tx_tmds_port {
370	hdmi_tx_tmds_out: endpoint {
371		remote-endpoint = <&hdmi_connector_in>;
372	};
373};
374
375&i2c3 {
376	status = "okay";
377	pinctrl-0 = <&i2c3_sda_a_pins>, <&i2c3_sck_a_pins>;
378	pinctrl-names = "default";
379};
380
381&ir {
382	status = "okay";
383	pinctrl-0 = <&remote_input_ao_pins>;
384	pinctrl-names = "default";
385};
386
387&pwm_AO_cd {
388	pinctrl-0 = <&pwm_ao_d_e_pins>;
389	pinctrl-names = "default";
390	clocks = <&xtal>;
391	clock-names = "clkin1";
392	status = "okay";
393};
394
395&pwm_ef {
396	status = "okay";
397	pinctrl-0 = <&pwm_e_pins>;
398	pinctrl-names = "default";
399	clocks = <&xtal>;
400	clock-names = "clkin0";
401};
402
403&pdm {
404	pinctrl-0 = <&pdm_din0_z_pins>, <&pdm_din1_z_pins>,
405		    <&pdm_din2_z_pins>, <&pdm_din3_z_pins>,
406		    <&pdm_dclk_z_pins>;
407	pinctrl-names = "default";
408	status = "okay";
409};
410
411&saradc {
412	status = "okay";
413	vref-supply = <&vddio_ao1v8>;
414};
415
416/* SDIO */
417&sd_emmc_a {
418	status = "okay";
419	pinctrl-0 = <&sdio_pins>;
420	pinctrl-1 = <&sdio_clk_gate_pins>;
421	pinctrl-names = "default", "clk-gate";
422	#address-cells = <1>;
423	#size-cells = <0>;
424
425	bus-width = <4>;
426	cap-sd-highspeed;
427	sd-uhs-sdr50;
428	max-frequency = <100000000>;
429
430	non-removable;
431	disable-wp;
432
433	/* WiFi firmware requires power to be kept while in suspend */
434	keep-power-in-suspend;
435
436	mmc-pwrseq = <&sdio_pwrseq>;
437
438	vmmc-supply = <&vddao_3v3>;
439	vqmmc-supply = <&vddio_ao1v8>;
440
441	brcmf: wifi@1 {
442		reg = <1>;
443		compatible = "brcm,bcm4329-fmac";
444	};
445};
446
447/* SD card */
448&sd_emmc_b {
449	status = "okay";
450	pinctrl-0 = <&sdcard_c_pins>;
451	pinctrl-1 = <&sdcard_clk_gate_c_pins>;
452	pinctrl-names = "default", "clk-gate";
453
454	bus-width = <4>;
455	cap-sd-highspeed;
456	max-frequency = <50000000>;
457	disable-wp;
458
459	cd-gpios = <&gpio GPIOC_6 GPIO_ACTIVE_LOW>;
460	vmmc-supply = <&vddao_3v3>;
461	vqmmc-supply = <&vddao_3v3>;
462};
463
464/* eMMC */
465&sd_emmc_c {
466	status = "okay";
467	pinctrl-0 = <&emmc_ctrl_pins>, <&emmc_data_8b_pins>, <&emmc_ds_pins>;
468	pinctrl-1 = <&emmc_clk_gate_pins>;
469	pinctrl-names = "default", "clk-gate";
470
471	bus-width = <8>;
472	cap-mmc-highspeed;
473	mmc-ddr-1_8v;
474	mmc-hs200-1_8v;
475	max-frequency = <200000000>;
476	non-removable;
477	disable-wp;
478
479	mmc-pwrseq = <&emmc_pwrseq>;
480	vmmc-supply = <&vddao_3v3>;
481	vqmmc-supply = <&emmc_1v8>;
482};
483
484&tdmif_a {
485	pinctrl-0 = <&tdm_a_dout0_pins>, <&tdm_a_fs_pins>, <&tdm_a_sclk_pins>;
486	pinctrl-names = "default";
487	status = "okay";
488
489	assigned-clocks = <&clkc_audio AUD_CLKID_TDM_SCLK_PAD0>,
490			  <&clkc_audio AUD_CLKID_TDM_LRCLK_PAD0>;
491	assigned-clock-parents = <&clkc_audio AUD_CLKID_MST_A_SCLK>,
492				 <&clkc_audio AUD_CLKID_MST_A_LRCLK>;
493	assigned-clock-rates = <0>, <0>;
494};
495
496&tdmif_b {
497	status = "okay";
498};
499
500&tdmin_a {
501	status = "okay";
502};
503
504&tdmin_b {
505	status = "okay";
506};
507
508&tdmout_a {
509	status = "okay";
510};
511
512&tdmout_b {
513	status = "okay";
514};
515
516&toddr_a {
517	status = "okay";
518};
519
520&toddr_b {
521	status = "okay";
522};
523
524&toddr_c {
525	status = "okay";
526};
527
528&tohdmitx {
529	status = "okay";
530};
531
532&uart_A {
533	status = "okay";
534	pinctrl-0 = <&uart_a_pins>, <&uart_a_cts_rts_pins>;
535	pinctrl-names = "default";
536	uart-has-rtscts;
537
538	bluetooth {
539		compatible = "brcm,bcm43438-bt";
540		shutdown-gpios = <&gpio GPIOX_17 GPIO_ACTIVE_HIGH>;
541		max-speed = <2000000>;
542		clocks = <&wifi32k>;
543		clock-names = "lpo";
544		vbat-supply = <&vddao_3v3>;
545		vddio-supply = <&vddio_ao1v8>;
546	};
547};
548
549&uart_AO {
550	status = "okay";
551	pinctrl-0 = <&uart_ao_a_pins>;
552	pinctrl-names = "default";
553};
554
555&usb {
556	status = "okay";
557	dr_mode = "host";
558};
559