1114abfe1SNeil Armstrong// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2c246e9d6SNeil Armstrong/*
3c246e9d6SNeil Armstrong * Copyright (c) 2016 Andreas Färber
4c246e9d6SNeil Armstrong * Copyright (c) 2016 BayLibre, Inc.
5c246e9d6SNeil Armstrong * Author: Neil Armstrong <narmstrong@kernel.org>
6c246e9d6SNeil Armstrong */
7c246e9d6SNeil Armstrong
8c246e9d6SNeil Armstrong/dts-v1/;
9c246e9d6SNeil Armstrong
10c246e9d6SNeil Armstrong#include "meson-gxbb.dtsi"
11c246e9d6SNeil Armstrong#include <dt-bindings/gpio/gpio.h>
12c246e9d6SNeil Armstrong#include <dt-bindings/input/input.h>
13ec78dc89SChristian Hewitt#include <dt-bindings/sound/meson-aiu.h>
14c246e9d6SNeil Armstrong
15c246e9d6SNeil Armstrong/ {
16c246e9d6SNeil Armstrong	compatible = "nexbox,a95x", "amlogic,meson-gxbb";
17c246e9d6SNeil Armstrong	model = "NEXBOX A95X";
18c246e9d6SNeil Armstrong
19c246e9d6SNeil Armstrong	aliases {
20c246e9d6SNeil Armstrong		serial0 = &uart_AO;
21059a58fcSJorge Ramirez-Ortiz		ethernet0 = &ethmac;
22c246e9d6SNeil Armstrong	};
23c246e9d6SNeil Armstrong
24c246e9d6SNeil Armstrong	chosen {
25c246e9d6SNeil Armstrong		stdout-path = "serial0:115200n8";
26c246e9d6SNeil Armstrong	};
27c246e9d6SNeil Armstrong
28c246e9d6SNeil Armstrong	memory@0 {
29c246e9d6SNeil Armstrong		device_type = "memory";
30c246e9d6SNeil Armstrong		reg = <0x0 0x0 0x0 0x40000000>;
31c246e9d6SNeil Armstrong	};
32c246e9d6SNeil Armstrong
33c246e9d6SNeil Armstrong	leds {
34c246e9d6SNeil Armstrong		compatible = "gpio-leds";
3508dc0e5dSNeil Armstrong		led-blue {
36c246e9d6SNeil Armstrong			label = "a95x:system-status";
37c246e9d6SNeil Armstrong			gpios = <&gpio_ao GPIOAO_13 GPIO_ACTIVE_LOW>;
38c246e9d6SNeil Armstrong			linux,default-trigger = "heartbeat";
39c246e9d6SNeil Armstrong			default-state = "off";
40c246e9d6SNeil Armstrong		};
41c246e9d6SNeil Armstrong	};
42c246e9d6SNeil Armstrong
43c246e9d6SNeil Armstrong	gpio-keys-polled {
44c246e9d6SNeil Armstrong		compatible = "gpio-keys-polled";
45c246e9d6SNeil Armstrong		#address-cells = <1>;
46c246e9d6SNeil Armstrong		#size-cells = <0>;
47c246e9d6SNeil Armstrong		poll-interval = <100>;
48c246e9d6SNeil Armstrong
49c246e9d6SNeil Armstrong		button@0 {
50c246e9d6SNeil Armstrong			label = "reset";
51c246e9d6SNeil Armstrong			linux,code = <KEY_RESTART>;
52c246e9d6SNeil Armstrong			gpios = <&gpio_ao GPIOAO_3 GPIO_ACTIVE_LOW>;
53c246e9d6SNeil Armstrong		};
54c246e9d6SNeil Armstrong	};
55a776e045SNeil Armstrong
56e2f4d749SPeter Korsgaard	usb_pwr: regulator-usb-pwrs {
57e2f4d749SPeter Korsgaard		compatible = "regulator-fixed";
58e2f4d749SPeter Korsgaard
59e2f4d749SPeter Korsgaard		regulator-name = "USB_PWR";
60e2f4d749SPeter Korsgaard
61e2f4d749SPeter Korsgaard		regulator-min-microvolt = <5000000>;
62e2f4d749SPeter Korsgaard		regulator-max-microvolt = <5000000>;
63e2f4d749SPeter Korsgaard
64e2f4d749SPeter Korsgaard		gpio = <&gpio GPIODV_24 GPIO_ACTIVE_HIGH>;
65e2f4d749SPeter Korsgaard		enable-active-high;
66e2f4d749SPeter Korsgaard	};
67e2f4d749SPeter Korsgaard
68a776e045SNeil Armstrong	vddio_card: gpio-regulator {
69a776e045SNeil Armstrong		compatible = "regulator-gpio";
70a776e045SNeil Armstrong
71a776e045SNeil Armstrong		regulator-name = "VDDIO_CARD";
72a776e045SNeil Armstrong		regulator-min-microvolt = <1800000>;
73a776e045SNeil Armstrong		regulator-max-microvolt = <3300000>;
74a776e045SNeil Armstrong
75a776e045SNeil Armstrong		gpios = <&gpio_ao GPIOAO_5 GPIO_ACTIVE_HIGH>;
76a776e045SNeil Armstrong		gpios-states = <1>;
77a776e045SNeil Armstrong
78a776e045SNeil Armstrong		/* Based on P200 schematics, signal CARD_1.8V/3.3V_CTR */
79f9717178SNeil Armstrong		states = <1800000 0>,
80f9717178SNeil Armstrong			 <3300000 1>;
81a776e045SNeil Armstrong	};
82a776e045SNeil Armstrong
83a776e045SNeil Armstrong	vddio_boot: regulator-vddio_boot {
84a776e045SNeil Armstrong		compatible = "regulator-fixed";
85a776e045SNeil Armstrong		regulator-name = "VDDIO_BOOT";
86a776e045SNeil Armstrong		regulator-min-microvolt = <1800000>;
87a776e045SNeil Armstrong		regulator-max-microvolt = <1800000>;
88a776e045SNeil Armstrong	};
89a776e045SNeil Armstrong
90a776e045SNeil Armstrong	vddao_3v3: regulator-vddao_3v3 {
91a776e045SNeil Armstrong		compatible = "regulator-fixed";
92a776e045SNeil Armstrong		regulator-name = "VDDAO_3V3";
93a776e045SNeil Armstrong		regulator-min-microvolt = <3300000>;
94a776e045SNeil Armstrong		regulator-max-microvolt = <3300000>;
95a776e045SNeil Armstrong	};
96a776e045SNeil Armstrong
97a776e045SNeil Armstrong	vcc_3v3: regulator-vcc_3v3 {
98a776e045SNeil Armstrong		compatible = "regulator-fixed";
99a776e045SNeil Armstrong		regulator-name = "VCC_3V3";
100a776e045SNeil Armstrong		regulator-min-microvolt = <3300000>;
101a776e045SNeil Armstrong		regulator-max-microvolt = <3300000>;
102a776e045SNeil Armstrong	};
103a776e045SNeil Armstrong
104a776e045SNeil Armstrong	emmc_pwrseq: emmc-pwrseq {
105a776e045SNeil Armstrong		compatible = "mmc-pwrseq-emmc";
106a776e045SNeil Armstrong		reset-gpios = <&gpio BOOT_9 GPIO_ACTIVE_LOW>;
107a776e045SNeil Armstrong	};
108a776e045SNeil Armstrong
109a776e045SNeil Armstrong	wifi32k: wifi32k {
110a776e045SNeil Armstrong		compatible = "pwm-clock";
111a776e045SNeil Armstrong		#clock-cells = <0>;
112a776e045SNeil Armstrong		clock-frequency = <32768>;
113a776e045SNeil Armstrong		pwms = <&pwm_ef 0 30518 0>; /* PWM_E at 32.768KHz */
114a776e045SNeil Armstrong	};
115a776e045SNeil Armstrong
116a776e045SNeil Armstrong	sdio_pwrseq: sdio-pwrseq {
117a776e045SNeil Armstrong		compatible = "mmc-pwrseq-simple";
118a776e045SNeil Armstrong		reset-gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>;
119a776e045SNeil Armstrong		clocks = <&wifi32k>;
120a776e045SNeil Armstrong		clock-names = "ext_clock";
121a776e045SNeil Armstrong	};
122fafdbdf7SNeil Armstrong
123fafdbdf7SNeil Armstrong	cvbs-connector {
124fafdbdf7SNeil Armstrong		compatible = "composite-video-connector";
125fafdbdf7SNeil Armstrong
126fafdbdf7SNeil Armstrong		port {
127fafdbdf7SNeil Armstrong			cvbs_connector_in: endpoint {
128fafdbdf7SNeil Armstrong				remote-endpoint = <&cvbs_vdac_out>;
129fafdbdf7SNeil Armstrong			};
130fafdbdf7SNeil Armstrong		};
131fafdbdf7SNeil Armstrong	};
1326939db7eSNeil Armstrong
1336939db7eSNeil Armstrong	hdmi-connector {
1346939db7eSNeil Armstrong		compatible = "hdmi-connector";
1356939db7eSNeil Armstrong		type = "a";
1366939db7eSNeil Armstrong
1376939db7eSNeil Armstrong		port {
1386939db7eSNeil Armstrong			hdmi_connector_in: endpoint {
1396939db7eSNeil Armstrong				remote-endpoint = <&hdmi_tx_tmds_out>;
1406939db7eSNeil Armstrong			};
1416939db7eSNeil Armstrong		};
1426939db7eSNeil Armstrong	};
143ec78dc89SChristian Hewitt
144ec78dc89SChristian Hewitt	sound {
145ec78dc89SChristian Hewitt		compatible = "amlogic,gx-sound-card";
146*933b80edSChristian Hewitt		model = "NEXBOX-A95X";
147ec78dc89SChristian Hewitt		assigned-clocks = <&clkc CLKID_MPLL0>,
148ec78dc89SChristian Hewitt				  <&clkc CLKID_MPLL1>,
149ec78dc89SChristian Hewitt				  <&clkc CLKID_MPLL2>;
150ec78dc89SChristian Hewitt		assigned-clock-parents = <0>, <0>, <0>;
151ec78dc89SChristian Hewitt		assigned-clock-rates = <294912000>,
152ec78dc89SChristian Hewitt				       <270950400>,
153ec78dc89SChristian Hewitt				       <393216000>;
154ec78dc89SChristian Hewitt		status = "okay";
155ec78dc89SChristian Hewitt
156ec78dc89SChristian Hewitt		dai-link-0 {
157ec78dc89SChristian Hewitt			sound-dai = <&aiu AIU_CPU CPU_I2S_FIFO>;
158ec78dc89SChristian Hewitt		};
159ec78dc89SChristian Hewitt
160ec78dc89SChristian Hewitt		dai-link-1 {
161ec78dc89SChristian Hewitt			sound-dai = <&aiu AIU_CPU CPU_I2S_ENCODER>;
162ec78dc89SChristian Hewitt			dai-format = "i2s";
163ec78dc89SChristian Hewitt			mclk-fs = <256>;
164ec78dc89SChristian Hewitt
165ec78dc89SChristian Hewitt			codec-0 {
166ec78dc89SChristian Hewitt				sound-dai = <&aiu AIU_HDMI CTRL_I2S>;
167ec78dc89SChristian Hewitt			};
168ec78dc89SChristian Hewitt		};
169ec78dc89SChristian Hewitt
170ec78dc89SChristian Hewitt		dai-link-2 {
171ec78dc89SChristian Hewitt			sound-dai = <&aiu AIU_HDMI CTRL_OUT>;
172ec78dc89SChristian Hewitt
173ec78dc89SChristian Hewitt			codec-0 {
174ec78dc89SChristian Hewitt				sound-dai = <&hdmi_tx>;
175ec78dc89SChristian Hewitt			};
176ec78dc89SChristian Hewitt		};
177ec78dc89SChristian Hewitt	};
178ec78dc89SChristian Hewitt};
179ec78dc89SChristian Hewitt
180ec78dc89SChristian Hewitt&aiu {
181ec78dc89SChristian Hewitt	status = "okay";
182c246e9d6SNeil Armstrong};
183c246e9d6SNeil Armstrong
18482f11345SAndreas Färber&cvbs_vdac_port {
18582f11345SAndreas Färber	cvbs_vdac_out: endpoint {
18682f11345SAndreas Färber		remote-endpoint = <&cvbs_connector_in>;
18782f11345SAndreas Färber	};
188c246e9d6SNeil Armstrong};
189c246e9d6SNeil Armstrong
190b16c71c9SNeil Armstrong&cec_AO {
191b16c71c9SNeil Armstrong	status = "okay";
192b16c71c9SNeil Armstrong	pinctrl-0 = <&ao_cec_pins>;
193b16c71c9SNeil Armstrong	pinctrl-names = "default";
194b16c71c9SNeil Armstrong	hdmi-phandle = <&hdmi_tx>;
195b16c71c9SNeil Armstrong};
196b16c71c9SNeil Armstrong
197c246e9d6SNeil Armstrong&ethmac {
198c246e9d6SNeil Armstrong	status = "okay";
1993be2d9cfSNeil Armstrong	pinctrl-0 = <&eth_rmii_pins>;
200c246e9d6SNeil Armstrong	pinctrl-names = "default";
20167d49f30SMartin Blumenstingl
20267d49f30SMartin Blumenstingl	phy-handle = <&eth_phy0>;
2033be2d9cfSNeil Armstrong	phy-mode = "rmii";
20467d49f30SMartin Blumenstingl
20567d49f30SMartin Blumenstingl	mdio {
20667d49f30SMartin Blumenstingl		compatible = "snps,dwmac-mdio";
20767d49f30SMartin Blumenstingl		#address-cells = <1>;
20867d49f30SMartin Blumenstingl		#size-cells = <0>;
20967d49f30SMartin Blumenstingl
21067d49f30SMartin Blumenstingl		eth_phy0: ethernet-phy@0 {
21167d49f30SMartin Blumenstingl			/* IC Plus IP101GR (0x02430c54) */
21267d49f30SMartin Blumenstingl			reg = <0>;
213f29cabf2SMartin Blumenstingl
214f29cabf2SMartin Blumenstingl			reset-assert-us = <10000>;
215f29cabf2SMartin Blumenstingl			reset-deassert-us = <10000>;
216f29cabf2SMartin Blumenstingl			reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>;
21767d49f30SMartin Blumenstingl		};
21867d49f30SMartin Blumenstingl	};
219c246e9d6SNeil Armstrong};
220c246e9d6SNeil Armstrong
22182f11345SAndreas Färber&hdmi_tx {
22282f11345SAndreas Färber	status = "okay";
22382f11345SAndreas Färber	pinctrl-0 = <&hdmi_hpd_pins>, <&hdmi_i2c_pins>;
22482f11345SAndreas Färber	pinctrl-names = "default";
22582f11345SAndreas Färber};
22682f11345SAndreas Färber
22782f11345SAndreas Färber&hdmi_tx_tmds_port {
22882f11345SAndreas Färber	hdmi_tx_tmds_out: endpoint {
22982f11345SAndreas Färber		remote-endpoint = <&hdmi_connector_in>;
23082f11345SAndreas Färber	};
23182f11345SAndreas Färber};
23282f11345SAndreas Färber
233c246e9d6SNeil Armstrong&ir {
234c246e9d6SNeil Armstrong	status = "okay";
235c246e9d6SNeil Armstrong	pinctrl-0 = <&remote_input_ao_pins>;
236c246e9d6SNeil Armstrong	pinctrl-names = "default";
237c246e9d6SNeil Armstrong};
238a776e045SNeil Armstrong
23982f11345SAndreas Färber&pwm_ef {
24082f11345SAndreas Färber	status = "okay";
24182f11345SAndreas Färber	pinctrl-0 = <&pwm_e_pins>;
24282f11345SAndreas Färber	pinctrl-names = "default";
24382f11345SAndreas Färber	clocks = <&clkc CLKID_FCLK_DIV4>;
24482f11345SAndreas Färber	clock-names = "clkin0";
24582f11345SAndreas Färber};
24682f11345SAndreas Färber
247a776e045SNeil Armstrong/* Wireless SDIO Module */
248a776e045SNeil Armstrong&sd_emmc_a {
249a776e045SNeil Armstrong	status = "okay";
250a776e045SNeil Armstrong	pinctrl-0 = <&sdio_pins>;
25167e7607fSJerome Brunet	pinctrl-1 = <&sdio_clk_gate_pins>;
25267e7607fSJerome Brunet	pinctrl-names = "default", "clk-gate";
253a776e045SNeil Armstrong	#address-cells = <1>;
254a776e045SNeil Armstrong	#size-cells = <0>;
255a776e045SNeil Armstrong
256a776e045SNeil Armstrong	bus-width = <4>;
257a776e045SNeil Armstrong	cap-sd-highspeed;
258a776e045SNeil Armstrong	max-frequency = <100000000>;
259a776e045SNeil Armstrong
260a776e045SNeil Armstrong	non-removable;
261a776e045SNeil Armstrong	disable-wp;
262a776e045SNeil Armstrong
26342d7815cSNeil Armstrong	/* WiFi firmware requires power to be kept while in suspend */
26442d7815cSNeil Armstrong	keep-power-in-suspend;
26542d7815cSNeil Armstrong
266a776e045SNeil Armstrong	mmc-pwrseq = <&sdio_pwrseq>;
267a776e045SNeil Armstrong
268a776e045SNeil Armstrong	vmmc-supply = <&vddao_3v3>;
269a776e045SNeil Armstrong	vqmmc-supply = <&vddio_boot>;
270a776e045SNeil Armstrong};
271a776e045SNeil Armstrong
272a776e045SNeil Armstrong/* SD card */
273a776e045SNeil Armstrong&sd_emmc_b {
274a776e045SNeil Armstrong	status = "okay";
275a776e045SNeil Armstrong	pinctrl-0 = <&sdcard_pins>;
27667e7607fSJerome Brunet	pinctrl-1 = <&sdcard_clk_gate_pins>;
27767e7607fSJerome Brunet	pinctrl-names = "default", "clk-gate";
278a776e045SNeil Armstrong
279a776e045SNeil Armstrong	bus-width = <4>;
280a776e045SNeil Armstrong	cap-sd-highspeed;
281adc52bf7SJerome Brunet	max-frequency = <50000000>;
282a776e045SNeil Armstrong	disable-wp;
283a776e045SNeil Armstrong
284f29200c8SLoys Ollivier	cd-gpios = <&gpio CARD_6 GPIO_ACTIVE_LOW>;
285a776e045SNeil Armstrong
286a776e045SNeil Armstrong	vmmc-supply = <&vddao_3v3>;
287a776e045SNeil Armstrong	vqmmc-supply = <&vddio_card>;
288a776e045SNeil Armstrong};
289a776e045SNeil Armstrong
290a776e045SNeil Armstrong/* eMMC */
291a776e045SNeil Armstrong&sd_emmc_c {
292a776e045SNeil Armstrong	status = "okay";
293ab36be66SNeil Armstrong	pinctrl-0 = <&emmc_pins>, <&emmc_ds_pins>;
29467e7607fSJerome Brunet	pinctrl-1 = <&emmc_clk_gate_pins>;
29567e7607fSJerome Brunet	pinctrl-names = "default", "clk-gate";
296a776e045SNeil Armstrong
297a776e045SNeil Armstrong	bus-width = <8>;
298a776e045SNeil Armstrong	cap-mmc-highspeed;
299a776e045SNeil Armstrong	max-frequency = <200000000>;
300a776e045SNeil Armstrong	non-removable;
301a776e045SNeil Armstrong	disable-wp;
302a776e045SNeil Armstrong	mmc-ddr-1_8v;
303a776e045SNeil Armstrong	mmc-hs200-1_8v;
304a776e045SNeil Armstrong
305a776e045SNeil Armstrong	mmc-pwrseq = <&emmc_pwrseq>;
306a776e045SNeil Armstrong	vmmc-supply = <&vcc_3v3>;
307a776e045SNeil Armstrong	vqmmc-supply = <&vddio_boot>;
308a776e045SNeil Armstrong};
309a776e045SNeil Armstrong
31082f11345SAndreas Färber&uart_AO {
311a776e045SNeil Armstrong	status = "okay";
31282f11345SAndreas Färber	pinctrl-0 = <&uart_ao_a_pins>;
313a776e045SNeil Armstrong	pinctrl-names = "default";
3146939db7eSNeil Armstrong};
315e2f4d749SPeter Korsgaard
316e2f4d749SPeter Korsgaard&usb0_phy {
317e2f4d749SPeter Korsgaard	status = "okay";
318e2f4d749SPeter Korsgaard	phy-supply = <&usb_pwr>;
319e2f4d749SPeter Korsgaard};
320e2f4d749SPeter Korsgaard
321e2f4d749SPeter Korsgaard&usb1_phy {
322e2f4d749SPeter Korsgaard	status = "okay";
323e2f4d749SPeter Korsgaard};
324e2f4d749SPeter Korsgaard
325e2f4d749SPeter Korsgaard&usb0 {
326e2f4d749SPeter Korsgaard	status = "okay";
327e2f4d749SPeter Korsgaard};
328e2f4d749SPeter Korsgaard
329e2f4d749SPeter Korsgaard&usb1 {
330e2f4d749SPeter Korsgaard	status = "okay";
331e2f4d749SPeter Korsgaard};
332