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>
13c246e9d6SNeil Armstrong
14c246e9d6SNeil Armstrong/ {
15c246e9d6SNeil Armstrong	compatible = "nexbox,a95x", "amlogic,meson-gxbb";
16c246e9d6SNeil Armstrong	model = "NEXBOX A95X";
17c246e9d6SNeil Armstrong
18c246e9d6SNeil Armstrong	aliases {
19c246e9d6SNeil Armstrong		serial0 = &uart_AO;
20059a58fcSJorge Ramirez-Ortiz		ethernet0 = &ethmac;
21c246e9d6SNeil Armstrong	};
22c246e9d6SNeil Armstrong
23c246e9d6SNeil Armstrong	chosen {
24c246e9d6SNeil Armstrong		stdout-path = "serial0:115200n8";
25c246e9d6SNeil Armstrong	};
26c246e9d6SNeil Armstrong
27c246e9d6SNeil Armstrong	memory@0 {
28c246e9d6SNeil Armstrong		device_type = "memory";
29c246e9d6SNeil Armstrong		reg = <0x0 0x0 0x0 0x40000000>;
30c246e9d6SNeil Armstrong	};
31c246e9d6SNeil Armstrong
32c246e9d6SNeil Armstrong	leds {
33c246e9d6SNeil Armstrong		compatible = "gpio-leds";
34c246e9d6SNeil Armstrong		blue {
35c246e9d6SNeil Armstrong			label = "a95x:system-status";
36c246e9d6SNeil Armstrong			gpios = <&gpio_ao GPIOAO_13 GPIO_ACTIVE_LOW>;
37c246e9d6SNeil Armstrong			linux,default-trigger = "heartbeat";
38c246e9d6SNeil Armstrong			default-state = "off";
39c246e9d6SNeil Armstrong		};
40c246e9d6SNeil Armstrong	};
41c246e9d6SNeil Armstrong
42c246e9d6SNeil Armstrong	gpio-keys-polled {
43c246e9d6SNeil Armstrong		compatible = "gpio-keys-polled";
44c246e9d6SNeil Armstrong		#address-cells = <1>;
45c246e9d6SNeil Armstrong		#size-cells = <0>;
46c246e9d6SNeil Armstrong		poll-interval = <100>;
47c246e9d6SNeil Armstrong
48c246e9d6SNeil Armstrong		button@0 {
49c246e9d6SNeil Armstrong			label = "reset";
50c246e9d6SNeil Armstrong			linux,code = <KEY_RESTART>;
51c246e9d6SNeil Armstrong			gpios = <&gpio_ao GPIOAO_3 GPIO_ACTIVE_LOW>;
52c246e9d6SNeil Armstrong		};
53c246e9d6SNeil Armstrong	};
54a776e045SNeil Armstrong
55e2f4d749SPeter Korsgaard	usb_pwr: regulator-usb-pwrs {
56e2f4d749SPeter Korsgaard		compatible = "regulator-fixed";
57e2f4d749SPeter Korsgaard
58e2f4d749SPeter Korsgaard		regulator-name = "USB_PWR";
59e2f4d749SPeter Korsgaard
60e2f4d749SPeter Korsgaard		regulator-min-microvolt = <5000000>;
61e2f4d749SPeter Korsgaard		regulator-max-microvolt = <5000000>;
62e2f4d749SPeter Korsgaard
63e2f4d749SPeter Korsgaard		gpio = <&gpio GPIODV_24 GPIO_ACTIVE_HIGH>;
64e2f4d749SPeter Korsgaard		enable-active-high;
65e2f4d749SPeter Korsgaard	};
66e2f4d749SPeter Korsgaard
67a776e045SNeil Armstrong	vddio_card: gpio-regulator {
68a776e045SNeil Armstrong		compatible = "regulator-gpio";
69a776e045SNeil Armstrong
70a776e045SNeil Armstrong		regulator-name = "VDDIO_CARD";
71a776e045SNeil Armstrong		regulator-min-microvolt = <1800000>;
72a776e045SNeil Armstrong		regulator-max-microvolt = <3300000>;
73a776e045SNeil Armstrong
74a776e045SNeil Armstrong		gpios = <&gpio_ao GPIOAO_5 GPIO_ACTIVE_HIGH>;
75a776e045SNeil Armstrong		gpios-states = <1>;
76a776e045SNeil Armstrong
77a776e045SNeil Armstrong		/* Based on P200 schematics, signal CARD_1.8V/3.3V_CTR */
78f9717178SNeil Armstrong		states = <1800000 0>,
79f9717178SNeil Armstrong			 <3300000 1>;
80a776e045SNeil Armstrong	};
81a776e045SNeil Armstrong
82a776e045SNeil Armstrong	vddio_boot: regulator-vddio_boot {
83a776e045SNeil Armstrong		compatible = "regulator-fixed";
84a776e045SNeil Armstrong		regulator-name = "VDDIO_BOOT";
85a776e045SNeil Armstrong		regulator-min-microvolt = <1800000>;
86a776e045SNeil Armstrong		regulator-max-microvolt = <1800000>;
87a776e045SNeil Armstrong	};
88a776e045SNeil Armstrong
89a776e045SNeil Armstrong	vddao_3v3: regulator-vddao_3v3 {
90a776e045SNeil Armstrong		compatible = "regulator-fixed";
91a776e045SNeil Armstrong		regulator-name = "VDDAO_3V3";
92a776e045SNeil Armstrong		regulator-min-microvolt = <3300000>;
93a776e045SNeil Armstrong		regulator-max-microvolt = <3300000>;
94a776e045SNeil Armstrong	};
95a776e045SNeil Armstrong
96a776e045SNeil Armstrong	vcc_3v3: regulator-vcc_3v3 {
97a776e045SNeil Armstrong		compatible = "regulator-fixed";
98a776e045SNeil Armstrong		regulator-name = "VCC_3V3";
99a776e045SNeil Armstrong		regulator-min-microvolt = <3300000>;
100a776e045SNeil Armstrong		regulator-max-microvolt = <3300000>;
101a776e045SNeil Armstrong	};
102a776e045SNeil Armstrong
103a776e045SNeil Armstrong	emmc_pwrseq: emmc-pwrseq {
104a776e045SNeil Armstrong		compatible = "mmc-pwrseq-emmc";
105a776e045SNeil Armstrong		reset-gpios = <&gpio BOOT_9 GPIO_ACTIVE_LOW>;
106a776e045SNeil Armstrong	};
107a776e045SNeil Armstrong
108a776e045SNeil Armstrong	wifi32k: wifi32k {
109a776e045SNeil Armstrong		compatible = "pwm-clock";
110a776e045SNeil Armstrong		#clock-cells = <0>;
111a776e045SNeil Armstrong		clock-frequency = <32768>;
112a776e045SNeil Armstrong		pwms = <&pwm_ef 0 30518 0>; /* PWM_E at 32.768KHz */
113a776e045SNeil Armstrong	};
114a776e045SNeil Armstrong
115a776e045SNeil Armstrong	sdio_pwrseq: sdio-pwrseq {
116a776e045SNeil Armstrong		compatible = "mmc-pwrseq-simple";
117a776e045SNeil Armstrong		reset-gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>;
118a776e045SNeil Armstrong		clocks = <&wifi32k>;
119a776e045SNeil Armstrong		clock-names = "ext_clock";
120a776e045SNeil Armstrong	};
121fafdbdf7SNeil Armstrong
122fafdbdf7SNeil Armstrong	cvbs-connector {
123fafdbdf7SNeil Armstrong		compatible = "composite-video-connector";
124fafdbdf7SNeil Armstrong
125fafdbdf7SNeil Armstrong		port {
126fafdbdf7SNeil Armstrong			cvbs_connector_in: endpoint {
127fafdbdf7SNeil Armstrong				remote-endpoint = <&cvbs_vdac_out>;
128fafdbdf7SNeil Armstrong			};
129fafdbdf7SNeil Armstrong		};
130fafdbdf7SNeil Armstrong	};
1316939db7eSNeil Armstrong
1326939db7eSNeil Armstrong	hdmi-connector {
1336939db7eSNeil Armstrong		compatible = "hdmi-connector";
1346939db7eSNeil Armstrong		type = "a";
1356939db7eSNeil Armstrong
1366939db7eSNeil Armstrong		port {
1376939db7eSNeil Armstrong			hdmi_connector_in: endpoint {
1386939db7eSNeil Armstrong				remote-endpoint = <&hdmi_tx_tmds_out>;
1396939db7eSNeil Armstrong			};
1406939db7eSNeil Armstrong		};
1416939db7eSNeil Armstrong	};
142c246e9d6SNeil Armstrong};
143c246e9d6SNeil Armstrong
14482f11345SAndreas Färber&cvbs_vdac_port {
14582f11345SAndreas Färber	cvbs_vdac_out: endpoint {
14682f11345SAndreas Färber		remote-endpoint = <&cvbs_connector_in>;
14782f11345SAndreas Färber	};
148c246e9d6SNeil Armstrong};
149c246e9d6SNeil Armstrong
150b16c71c9SNeil Armstrong&cec_AO {
151b16c71c9SNeil Armstrong	status = "okay";
152b16c71c9SNeil Armstrong	pinctrl-0 = <&ao_cec_pins>;
153b16c71c9SNeil Armstrong	pinctrl-names = "default";
154b16c71c9SNeil Armstrong	hdmi-phandle = <&hdmi_tx>;
155b16c71c9SNeil Armstrong};
156b16c71c9SNeil Armstrong
157c246e9d6SNeil Armstrong&ethmac {
158c246e9d6SNeil Armstrong	status = "okay";
1593be2d9cfSNeil Armstrong	pinctrl-0 = <&eth_rmii_pins>;
160c246e9d6SNeil Armstrong	pinctrl-names = "default";
16167d49f30SMartin Blumenstingl
16267d49f30SMartin Blumenstingl	phy-handle = <&eth_phy0>;
1633be2d9cfSNeil Armstrong	phy-mode = "rmii";
16467d49f30SMartin Blumenstingl
16567d49f30SMartin Blumenstingl	mdio {
16667d49f30SMartin Blumenstingl		compatible = "snps,dwmac-mdio";
16767d49f30SMartin Blumenstingl		#address-cells = <1>;
16867d49f30SMartin Blumenstingl		#size-cells = <0>;
16967d49f30SMartin Blumenstingl
17067d49f30SMartin Blumenstingl		eth_phy0: ethernet-phy@0 {
17167d49f30SMartin Blumenstingl			/* IC Plus IP101GR (0x02430c54) */
17267d49f30SMartin Blumenstingl			reg = <0>;
173f29cabf2SMartin Blumenstingl
174f29cabf2SMartin Blumenstingl			reset-assert-us = <10000>;
175f29cabf2SMartin Blumenstingl			reset-deassert-us = <10000>;
176f29cabf2SMartin Blumenstingl			reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>;
17767d49f30SMartin Blumenstingl		};
17867d49f30SMartin Blumenstingl	};
179c246e9d6SNeil Armstrong};
180c246e9d6SNeil Armstrong
18182f11345SAndreas Färber&hdmi_tx {
18282f11345SAndreas Färber	status = "okay";
18382f11345SAndreas Färber	pinctrl-0 = <&hdmi_hpd_pins>, <&hdmi_i2c_pins>;
18482f11345SAndreas Färber	pinctrl-names = "default";
18582f11345SAndreas Färber};
18682f11345SAndreas Färber
18782f11345SAndreas Färber&hdmi_tx_tmds_port {
18882f11345SAndreas Färber	hdmi_tx_tmds_out: endpoint {
18982f11345SAndreas Färber		remote-endpoint = <&hdmi_connector_in>;
19082f11345SAndreas Färber	};
19182f11345SAndreas Färber};
19282f11345SAndreas Färber
193c246e9d6SNeil Armstrong&ir {
194c246e9d6SNeil Armstrong	status = "okay";
195c246e9d6SNeil Armstrong	pinctrl-0 = <&remote_input_ao_pins>;
196c246e9d6SNeil Armstrong	pinctrl-names = "default";
197c246e9d6SNeil Armstrong};
198a776e045SNeil Armstrong
19982f11345SAndreas Färber&pwm_ef {
20082f11345SAndreas Färber	status = "okay";
20182f11345SAndreas Färber	pinctrl-0 = <&pwm_e_pins>;
20282f11345SAndreas Färber	pinctrl-names = "default";
20382f11345SAndreas Färber	clocks = <&clkc CLKID_FCLK_DIV4>;
20482f11345SAndreas Färber	clock-names = "clkin0";
20582f11345SAndreas Färber};
20682f11345SAndreas Färber
207a776e045SNeil Armstrong/* Wireless SDIO Module */
208a776e045SNeil Armstrong&sd_emmc_a {
209a776e045SNeil Armstrong	status = "okay";
210a776e045SNeil Armstrong	pinctrl-0 = <&sdio_pins>;
21167e7607fSJerome Brunet	pinctrl-1 = <&sdio_clk_gate_pins>;
21267e7607fSJerome Brunet	pinctrl-names = "default", "clk-gate";
213a776e045SNeil Armstrong	#address-cells = <1>;
214a776e045SNeil Armstrong	#size-cells = <0>;
215a776e045SNeil Armstrong
216a776e045SNeil Armstrong	bus-width = <4>;
217a776e045SNeil Armstrong	cap-sd-highspeed;
218a776e045SNeil Armstrong	max-frequency = <100000000>;
219a776e045SNeil Armstrong
220a776e045SNeil Armstrong	non-removable;
221a776e045SNeil Armstrong	disable-wp;
222a776e045SNeil Armstrong
22342d7815cSNeil Armstrong	/* WiFi firmware requires power to be kept while in suspend */
22442d7815cSNeil Armstrong	keep-power-in-suspend;
22542d7815cSNeil Armstrong
226a776e045SNeil Armstrong	mmc-pwrseq = <&sdio_pwrseq>;
227a776e045SNeil Armstrong
228a776e045SNeil Armstrong	vmmc-supply = <&vddao_3v3>;
229a776e045SNeil Armstrong	vqmmc-supply = <&vddio_boot>;
230a776e045SNeil Armstrong};
231a776e045SNeil Armstrong
232a776e045SNeil Armstrong/* SD card */
233a776e045SNeil Armstrong&sd_emmc_b {
234a776e045SNeil Armstrong	status = "okay";
235a776e045SNeil Armstrong	pinctrl-0 = <&sdcard_pins>;
23667e7607fSJerome Brunet	pinctrl-1 = <&sdcard_clk_gate_pins>;
23767e7607fSJerome Brunet	pinctrl-names = "default", "clk-gate";
238a776e045SNeil Armstrong
239a776e045SNeil Armstrong	bus-width = <4>;
240a776e045SNeil Armstrong	cap-sd-highspeed;
241adc52bf7SJerome Brunet	max-frequency = <50000000>;
242a776e045SNeil Armstrong	disable-wp;
243a776e045SNeil Armstrong
244f29200c8SLoys Ollivier	cd-gpios = <&gpio CARD_6 GPIO_ACTIVE_LOW>;
245a776e045SNeil Armstrong
246a776e045SNeil Armstrong	vmmc-supply = <&vddao_3v3>;
247a776e045SNeil Armstrong	vqmmc-supply = <&vddio_card>;
248a776e045SNeil Armstrong};
249a776e045SNeil Armstrong
250a776e045SNeil Armstrong/* eMMC */
251a776e045SNeil Armstrong&sd_emmc_c {
252a776e045SNeil Armstrong	status = "okay";
253ab36be66SNeil Armstrong	pinctrl-0 = <&emmc_pins>, <&emmc_ds_pins>;
25467e7607fSJerome Brunet	pinctrl-1 = <&emmc_clk_gate_pins>;
25567e7607fSJerome Brunet	pinctrl-names = "default", "clk-gate";
256a776e045SNeil Armstrong
257a776e045SNeil Armstrong	bus-width = <8>;
258a776e045SNeil Armstrong	cap-mmc-highspeed;
259a776e045SNeil Armstrong	max-frequency = <200000000>;
260a776e045SNeil Armstrong	non-removable;
261a776e045SNeil Armstrong	disable-wp;
262a776e045SNeil Armstrong	mmc-ddr-1_8v;
263a776e045SNeil Armstrong	mmc-hs200-1_8v;
264a776e045SNeil Armstrong
265a776e045SNeil Armstrong	mmc-pwrseq = <&emmc_pwrseq>;
266a776e045SNeil Armstrong	vmmc-supply = <&vcc_3v3>;
267a776e045SNeil Armstrong	vqmmc-supply = <&vddio_boot>;
268a776e045SNeil Armstrong};
269a776e045SNeil Armstrong
27082f11345SAndreas Färber&uart_AO {
271a776e045SNeil Armstrong	status = "okay";
27282f11345SAndreas Färber	pinctrl-0 = <&uart_ao_a_pins>;
273a776e045SNeil Armstrong	pinctrl-names = "default";
2746939db7eSNeil Armstrong};
275e2f4d749SPeter Korsgaard
276e2f4d749SPeter Korsgaard&usb0_phy {
277e2f4d749SPeter Korsgaard	status = "okay";
278e2f4d749SPeter Korsgaard	phy-supply = <&usb_pwr>;
279e2f4d749SPeter Korsgaard};
280e2f4d749SPeter Korsgaard
281e2f4d749SPeter Korsgaard&usb1_phy {
282e2f4d749SPeter Korsgaard	status = "okay";
283e2f4d749SPeter Korsgaard};
284e2f4d749SPeter Korsgaard
285e2f4d749SPeter Korsgaard&usb0 {
286e2f4d749SPeter Korsgaard	status = "okay";
287e2f4d749SPeter Korsgaard};
288e2f4d749SPeter Korsgaard
289e2f4d749SPeter Korsgaard&usb1 {
290e2f4d749SPeter Korsgaard	status = "okay";
291e2f4d749SPeter Korsgaard};
292