1114abfe1SNeil Armstrong// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
20a072362SAndreas Färber/*
30a072362SAndreas Färber * Copyright (c) 2016-2017 Andreas Färber
40a072362SAndreas Färber *
50a072362SAndreas Färber * Based on nexbox-a1:
60a072362SAndreas Färber *
70a072362SAndreas Färber * Copyright (c) 2016 BayLibre, SAS.
80a072362SAndreas Färber * Author: Neil Armstrong <narmstrong@baylibre.com>
90a072362SAndreas Färber *
100a072362SAndreas Färber * Copyright (c) 2016 Endless Computers, Inc.
110a072362SAndreas Färber * Author: Carlo Caione <carlo@endlessm.com>
120a072362SAndreas Färber */
130a072362SAndreas Färber
140a072362SAndreas Färber/dts-v1/;
150a072362SAndreas Färber
160a072362SAndreas Färber#include "meson-gxm.dtsi"
17*9450f63bSChristian Hewitt#include <dt-bindings/sound/meson-aiu.h>
180a072362SAndreas Färber
190a072362SAndreas Färber/ {
200a072362SAndreas Färber	compatible = "kingnovel,r-box-pro", "amlogic,s912", "amlogic,meson-gxm";
210a072362SAndreas Färber	model = "R-Box Pro";
220a072362SAndreas Färber
230a072362SAndreas Färber	aliases {
240a072362SAndreas Färber		serial0 = &uart_AO;
25059a58fcSJorge Ramirez-Ortiz		ethernet0 = &ethmac;
260a072362SAndreas Färber	};
270a072362SAndreas Färber
280a072362SAndreas Färber	chosen {
290a072362SAndreas Färber		stdout-path = "serial0:115200n8";
300a072362SAndreas Färber	};
310a072362SAndreas Färber
320a072362SAndreas Färber	memory@0 {
330a072362SAndreas Färber		device_type = "memory";
340a072362SAndreas Färber		reg = <0x0 0x0 0x0 0x80000000>; /* 2 GiB or 3 GiB */
350a072362SAndreas Färber	};
360a072362SAndreas Färber
37*9450f63bSChristian Hewitt	spdif_dit: audio-codec-0 {
38*9450f63bSChristian Hewitt		#sound-dai-cells = <0>;
39*9450f63bSChristian Hewitt		compatible = "linux,spdif-dit";
40*9450f63bSChristian Hewitt		status = "okay";
41*9450f63bSChristian Hewitt		sound-name-prefix = "DIT";
42*9450f63bSChristian Hewitt	};
43*9450f63bSChristian Hewitt
440a072362SAndreas Färber	leds {
450a072362SAndreas Färber		compatible = "gpio-leds";
460a072362SAndreas Färber
4708dc0e5dSNeil Armstrong		led-blue {
480a072362SAndreas Färber			label = "rbox-pro:blue:on";
490a072362SAndreas Färber			gpios = <&gpio_ao GPIOAO_9 GPIO_ACTIVE_HIGH>;
500a072362SAndreas Färber			default-state = "on";
510a072362SAndreas Färber		};
520a072362SAndreas Färber
5308dc0e5dSNeil Armstrong		led-red {
540a072362SAndreas Färber			label = "rbox-pro:red:standby";
550a072362SAndreas Färber			gpios = <&gpio GPIODV_28 GPIO_ACTIVE_HIGH>;
560a072362SAndreas Färber			default-state = "off";
570a072362SAndreas Färber			retain-state-suspended;
580a072362SAndreas Färber			panic-indicator;
590a072362SAndreas Färber		};
600a072362SAndreas Färber	};
610a072362SAndreas Färber
620a072362SAndreas Färber	vddio_boot: regulator-vddio-boot {
630a072362SAndreas Färber		compatible = "regulator-fixed";
640a072362SAndreas Färber		regulator-name = "VDDIO_BOOT";
650a072362SAndreas Färber		regulator-min-microvolt = <1800000>;
660a072362SAndreas Färber		regulator-max-microvolt = <1800000>;
670a072362SAndreas Färber	};
680a072362SAndreas Färber
690a072362SAndreas Färber	vddao_3v3: regulator-vddao-3v3 {
700a072362SAndreas Färber		compatible = "regulator-fixed";
710a072362SAndreas Färber		regulator-name = "VDDAO_3V3";
720a072362SAndreas Färber		regulator-min-microvolt = <3300000>;
730a072362SAndreas Färber		regulator-max-microvolt = <3300000>;
740a072362SAndreas Färber	};
750a072362SAndreas Färber
760a072362SAndreas Färber	vcc_3v3: regulator-vcc-3v3 {
770a072362SAndreas Färber		compatible = "regulator-fixed";
780a072362SAndreas Färber		regulator-name = "VCC_3V3";
790a072362SAndreas Färber		regulator-min-microvolt = <3300000>;
800a072362SAndreas Färber		regulator-max-microvolt = <3300000>;
810a072362SAndreas Färber	};
820a072362SAndreas Färber
830a072362SAndreas Färber	emmc_pwrseq: emmc-pwrseq {
840a072362SAndreas Färber		compatible = "mmc-pwrseq-emmc";
850a072362SAndreas Färber		reset-gpios = <&gpio BOOT_9 GPIO_ACTIVE_LOW>;
860a072362SAndreas Färber	};
870a072362SAndreas Färber
880a072362SAndreas Färber	wifi32k: wifi32k {
890a072362SAndreas Färber		compatible = "pwm-clock";
900a072362SAndreas Färber		#clock-cells = <0>;
910a072362SAndreas Färber		clock-frequency = <32768>;
920a072362SAndreas Färber		pwms = <&pwm_ef 0 30518 0>; /* PWM_E at 32.768KHz */
930a072362SAndreas Färber	};
940a072362SAndreas Färber
950a072362SAndreas Färber	sdio_pwrseq: sdio-pwrseq {
960a072362SAndreas Färber		compatible = "mmc-pwrseq-simple";
970a072362SAndreas Färber		reset-gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>;
980a072362SAndreas Färber		clocks = <&wifi32k>;
990a072362SAndreas Färber		clock-names = "ext_clock";
1000a072362SAndreas Färber	};
101*9450f63bSChristian Hewitt
102*9450f63bSChristian Hewitt	sound {
103*9450f63bSChristian Hewitt		compatible = "amlogic,gx-sound-card";
104*9450f63bSChristian Hewitt		model = "RBOX-PRO";
105*9450f63bSChristian Hewitt		assigned-clocks = <&clkc CLKID_MPLL0>,
106*9450f63bSChristian Hewitt				  <&clkc CLKID_MPLL1>,
107*9450f63bSChristian Hewitt				  <&clkc CLKID_MPLL2>;
108*9450f63bSChristian Hewitt		assigned-clock-parents = <0>, <0>, <0>;
109*9450f63bSChristian Hewitt		assigned-clock-rates = <294912000>,
110*9450f63bSChristian Hewitt				       <270950400>,
111*9450f63bSChristian Hewitt				       <393216000>;
112*9450f63bSChristian Hewitt
113*9450f63bSChristian Hewitt		dai-link-0 {
114*9450f63bSChristian Hewitt			sound-dai = <&aiu AIU_CPU CPU_I2S_FIFO>;
115*9450f63bSChristian Hewitt		};
116*9450f63bSChristian Hewitt
117*9450f63bSChristian Hewitt		dai-link-1 {
118*9450f63bSChristian Hewitt			sound-dai = <&aiu AIU_CPU CPU_SPDIF_FIFO>;
119*9450f63bSChristian Hewitt		};
120*9450f63bSChristian Hewitt
121*9450f63bSChristian Hewitt		dai-link-2 {
122*9450f63bSChristian Hewitt			sound-dai = <&aiu AIU_CPU CPU_I2S_ENCODER>;
123*9450f63bSChristian Hewitt			dai-format = "i2s";
124*9450f63bSChristian Hewitt			mclk-fs = <256>;
125*9450f63bSChristian Hewitt
126*9450f63bSChristian Hewitt			codec-0 {
127*9450f63bSChristian Hewitt				sound-dai = <&aiu AIU_HDMI CTRL_I2S>;
128*9450f63bSChristian Hewitt			};
129*9450f63bSChristian Hewitt		};
130*9450f63bSChristian Hewitt
131*9450f63bSChristian Hewitt		dai-link-3 {
132*9450f63bSChristian Hewitt			sound-dai = <&aiu AIU_CPU CPU_SPDIF_ENCODER>;
133*9450f63bSChristian Hewitt
134*9450f63bSChristian Hewitt			codec-0 {
135*9450f63bSChristian Hewitt				sound-dai = <&spdif_dit>;
136*9450f63bSChristian Hewitt			};
137*9450f63bSChristian Hewitt		};
138*9450f63bSChristian Hewitt
139*9450f63bSChristian Hewitt		dai-link-4 {
140*9450f63bSChristian Hewitt			sound-dai = <&aiu AIU_HDMI CTRL_OUT>;
141*9450f63bSChristian Hewitt
142*9450f63bSChristian Hewitt			codec-0 {
143*9450f63bSChristian Hewitt				sound-dai = <&hdmi_tx>;
144*9450f63bSChristian Hewitt			};
145*9450f63bSChristian Hewitt		};
146*9450f63bSChristian Hewitt	};
147*9450f63bSChristian Hewitt};
148*9450f63bSChristian Hewitt
149*9450f63bSChristian Hewitt&aiu {
150*9450f63bSChristian Hewitt	status = "okay";
151*9450f63bSChristian Hewitt	pinctrl-0 = <&spdif_out_h_pins>;
152*9450f63bSChristian Hewitt	pinctrl-names = "default";
1530a072362SAndreas Färber};
1540a072362SAndreas Färber
1550a072362SAndreas Färber&ethmac {
1560a072362SAndreas Färber	status = "okay";
1570a072362SAndreas Färber
1580a072362SAndreas Färber	pinctrl-0 = <&eth_pins>;
1590a072362SAndreas Färber	pinctrl-names = "default";
1600a072362SAndreas Färber
1610a072362SAndreas Färber	/* Select external PHY by default */
1620a072362SAndreas Färber	phy-handle = <&external_phy>;
1630a072362SAndreas Färber
1640a072362SAndreas Färber	amlogic,tx-delay-ns = <2>;
1650a072362SAndreas Färber
1660a072362SAndreas Färber	/* External PHY is in RGMII */
1670a072362SAndreas Färber	phy-mode = "rgmii";
1680a072362SAndreas Färber};
1690a072362SAndreas Färber
1700a072362SAndreas Färber&external_mdio {
1710a072362SAndreas Färber	external_phy: ethernet-phy@0 {
172890265c9SMartin Blumenstingl		/* Realtek RTL8211F (0x001cc916) */
1730a072362SAndreas Färber		reg = <0>;
1740a072362SAndreas Färber		max-speed = <1000>;
175f29cabf2SMartin Blumenstingl
176f29cabf2SMartin Blumenstingl		reset-assert-us = <10000>;
177c183c406SStefan Agner		reset-deassert-us = <80000>;
178f29cabf2SMartin Blumenstingl		reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>;
1790a072362SAndreas Färber	};
1800a072362SAndreas Färber};
1810a072362SAndreas Färber
1820a072362SAndreas Färber&ir {
1830a072362SAndreas Färber	status = "okay";
1840a072362SAndreas Färber	pinctrl-0 = <&remote_input_ao_pins>;
1850a072362SAndreas Färber	pinctrl-names = "default";
1860a072362SAndreas Färber};
1870a072362SAndreas Färber
1880a072362SAndreas Färber&pwm_ef {
1890a072362SAndreas Färber	status = "okay";
1900a072362SAndreas Färber	pinctrl-0 = <&pwm_e_pins>;
1910a072362SAndreas Färber	pinctrl-names = "default";
1920a072362SAndreas Färber	clocks = <&clkc CLKID_FCLK_DIV4>;
1930a072362SAndreas Färber	clock-names = "clkin0";
1940a072362SAndreas Färber};
1950a072362SAndreas Färber
1960a072362SAndreas Färber/* Wireless SDIO Module */
1970a072362SAndreas Färber&sd_emmc_a {
1980a072362SAndreas Färber	status = "okay";
1990a072362SAndreas Färber	pinctrl-0 = <&sdio_pins>;
2000a072362SAndreas Färber	pinctrl-names = "default";
2010a072362SAndreas Färber	#address-cells = <1>;
2020a072362SAndreas Färber	#size-cells = <0>;
2030a072362SAndreas Färber
2040a072362SAndreas Färber	bus-width = <4>;
2050a072362SAndreas Färber	cap-sd-highspeed;
206adc52bf7SJerome Brunet	max-frequency = <50000000>;
2070a072362SAndreas Färber
2080a072362SAndreas Färber	non-removable;
2090a072362SAndreas Färber	disable-wp;
2100a072362SAndreas Färber
211e326c967SNeil Armstrong	/* WiFi firmware requires power to be kept while in suspend */
212e326c967SNeil Armstrong	keep-power-in-suspend;
213e326c967SNeil Armstrong
2140a072362SAndreas Färber	mmc-pwrseq = <&sdio_pwrseq>;
2150a072362SAndreas Färber
2160a072362SAndreas Färber	vmmc-supply = <&vddao_3v3>;
2170a072362SAndreas Färber	vqmmc-supply = <&vddio_boot>;
2180a072362SAndreas Färber
2190a072362SAndreas Färber	brcmf: brcmf@1 {
2200a072362SAndreas Färber		reg = <1>;
2210a072362SAndreas Färber		compatible = "brcm,bcm4329-fmac";
2220a072362SAndreas Färber	};
2230a072362SAndreas Färber};
2240a072362SAndreas Färber
2250a072362SAndreas Färber/* SD card */
2260a072362SAndreas Färber&sd_emmc_b {
2270a072362SAndreas Färber	status = "okay";
2280a072362SAndreas Färber	pinctrl-0 = <&sdcard_pins>;
2290a072362SAndreas Färber	pinctrl-names = "default";
2300a072362SAndreas Färber
2310a072362SAndreas Färber	bus-width = <4>;
2320a072362SAndreas Färber	cap-sd-highspeed;
233adc52bf7SJerome Brunet	max-frequency = <50000000>;
2340a072362SAndreas Färber	disable-wp;
2350a072362SAndreas Färber
236f29200c8SLoys Ollivier	cd-gpios = <&gpio CARD_6 GPIO_ACTIVE_LOW>;
2370a072362SAndreas Färber
2380a072362SAndreas Färber	vmmc-supply = <&vddao_3v3>;
2390a072362SAndreas Färber	vqmmc-supply = <&vddio_boot>;
2400a072362SAndreas Färber};
2410a072362SAndreas Färber
2420a072362SAndreas Färber/* eMMC */
2430a072362SAndreas Färber&sd_emmc_c {
2440a072362SAndreas Färber	status = "okay";
245ab36be66SNeil Armstrong	pinctrl-0 = <&emmc_pins>, <&emmc_ds_pins>;
2460a072362SAndreas Färber	pinctrl-names = "default";
2470a072362SAndreas Färber
2480a072362SAndreas Färber	bus-width = <8>;
2490a072362SAndreas Färber	cap-mmc-highspeed;
2500a072362SAndreas Färber	max-frequency = <200000000>;
2510a072362SAndreas Färber	non-removable;
2520a072362SAndreas Färber	disable-wp;
2530a072362SAndreas Färber	mmc-ddr-1_8v;
2540a072362SAndreas Färber	mmc-hs200-1_8v;
2550a072362SAndreas Färber
2560a072362SAndreas Färber	mmc-pwrseq = <&emmc_pwrseq>;
2570a072362SAndreas Färber	vmmc-supply = <&vcc_3v3>;
2580a072362SAndreas Färber	vqmmc-supply = <&vddio_boot>;
2590a072362SAndreas Färber};
2600a072362SAndreas Färber
2610a072362SAndreas Färber&uart_AO {
2620a072362SAndreas Färber	status = "okay";
2630a072362SAndreas Färber	pinctrl-0 = <&uart_ao_a_pins>;
2640a072362SAndreas Färber	pinctrl-names = "default";
2650a072362SAndreas Färber};
266