1// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2/*
3 * Copyright (c) 2016 Andreas Färber
4 * Copyright (c) 2016 BayLibre, Inc.
5 * Author: Neil Armstrong <narmstrong@kernel.org>
6 */
7
8/dts-v1/;
9
10#include "meson-gxbb.dtsi"
11#include <dt-bindings/gpio/gpio.h>
12#include <dt-bindings/input/input.h>
13#include <dt-bindings/sound/meson-aiu.h>
14
15/ {
16	compatible = "nexbox,a95x", "amlogic,meson-gxbb";
17	model = "NEXBOX A95X";
18
19	aliases {
20		serial0 = &uart_AO;
21		ethernet0 = &ethmac;
22	};
23
24	chosen {
25		stdout-path = "serial0:115200n8";
26	};
27
28	memory@0 {
29		device_type = "memory";
30		reg = <0x0 0x0 0x0 0x40000000>;
31	};
32
33	leds {
34		compatible = "gpio-leds";
35		led-blue {
36			label = "a95x:system-status";
37			gpios = <&gpio_ao GPIOAO_13 GPIO_ACTIVE_LOW>;
38			linux,default-trigger = "heartbeat";
39			default-state = "off";
40		};
41	};
42
43	gpio-keys-polled {
44		compatible = "gpio-keys-polled";
45		#address-cells = <1>;
46		#size-cells = <0>;
47		poll-interval = <100>;
48
49		button@0 {
50			label = "reset";
51			linux,code = <KEY_RESTART>;
52			gpios = <&gpio_ao GPIOAO_3 GPIO_ACTIVE_LOW>;
53		};
54	};
55
56	usb_pwr: regulator-usb-pwrs {
57		compatible = "regulator-fixed";
58
59		regulator-name = "USB_PWR";
60
61		regulator-min-microvolt = <5000000>;
62		regulator-max-microvolt = <5000000>;
63
64		gpio = <&gpio GPIODV_24 GPIO_ACTIVE_HIGH>;
65		enable-active-high;
66	};
67
68	vddio_card: gpio-regulator {
69		compatible = "regulator-gpio";
70
71		regulator-name = "VDDIO_CARD";
72		regulator-min-microvolt = <1800000>;
73		regulator-max-microvolt = <3300000>;
74
75		gpios = <&gpio_ao GPIOAO_5 GPIO_ACTIVE_HIGH>;
76		gpios-states = <1>;
77
78		/* Based on P200 schematics, signal CARD_1.8V/3.3V_CTR */
79		states = <1800000 0>,
80			 <3300000 1>;
81	};
82
83	vddio_boot: regulator-vddio_boot {
84		compatible = "regulator-fixed";
85		regulator-name = "VDDIO_BOOT";
86		regulator-min-microvolt = <1800000>;
87		regulator-max-microvolt = <1800000>;
88	};
89
90	vddao_3v3: regulator-vddao_3v3 {
91		compatible = "regulator-fixed";
92		regulator-name = "VDDAO_3V3";
93		regulator-min-microvolt = <3300000>;
94		regulator-max-microvolt = <3300000>;
95	};
96
97	vcc_3v3: regulator-vcc_3v3 {
98		compatible = "regulator-fixed";
99		regulator-name = "VCC_3V3";
100		regulator-min-microvolt = <3300000>;
101		regulator-max-microvolt = <3300000>;
102	};
103
104	emmc_pwrseq: emmc-pwrseq {
105		compatible = "mmc-pwrseq-emmc";
106		reset-gpios = <&gpio BOOT_9 GPIO_ACTIVE_LOW>;
107	};
108
109	wifi32k: wifi32k {
110		compatible = "pwm-clock";
111		#clock-cells = <0>;
112		clock-frequency = <32768>;
113		pwms = <&pwm_ef 0 30518 0>; /* PWM_E at 32.768KHz */
114	};
115
116	sdio_pwrseq: sdio-pwrseq {
117		compatible = "mmc-pwrseq-simple";
118		reset-gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>;
119		clocks = <&wifi32k>;
120		clock-names = "ext_clock";
121	};
122
123	cvbs-connector {
124		compatible = "composite-video-connector";
125
126		port {
127			cvbs_connector_in: endpoint {
128				remote-endpoint = <&cvbs_vdac_out>;
129			};
130		};
131	};
132
133	hdmi-connector {
134		compatible = "hdmi-connector";
135		type = "a";
136
137		port {
138			hdmi_connector_in: endpoint {
139				remote-endpoint = <&hdmi_tx_tmds_out>;
140			};
141		};
142	};
143
144	sound {
145		compatible = "amlogic,gx-sound-card";
146		model = "NEXBOX-A95X";
147		assigned-clocks = <&clkc CLKID_MPLL0>,
148				  <&clkc CLKID_MPLL1>,
149				  <&clkc CLKID_MPLL2>;
150		assigned-clock-parents = <0>, <0>, <0>;
151		assigned-clock-rates = <294912000>,
152				       <270950400>,
153				       <393216000>;
154		status = "okay";
155
156		dai-link-0 {
157			sound-dai = <&aiu AIU_CPU CPU_I2S_FIFO>;
158		};
159
160		dai-link-1 {
161			sound-dai = <&aiu AIU_CPU CPU_I2S_ENCODER>;
162			dai-format = "i2s";
163			mclk-fs = <256>;
164
165			codec-0 {
166				sound-dai = <&aiu AIU_HDMI CTRL_I2S>;
167			};
168		};
169
170		dai-link-2 {
171			sound-dai = <&aiu AIU_HDMI CTRL_OUT>;
172
173			codec-0 {
174				sound-dai = <&hdmi_tx>;
175			};
176		};
177	};
178};
179
180&aiu {
181	status = "okay";
182};
183
184&cvbs_vdac_port {
185	cvbs_vdac_out: endpoint {
186		remote-endpoint = <&cvbs_connector_in>;
187	};
188};
189
190&cec_AO {
191	status = "okay";
192	pinctrl-0 = <&ao_cec_pins>;
193	pinctrl-names = "default";
194	hdmi-phandle = <&hdmi_tx>;
195};
196
197&ethmac {
198	status = "okay";
199	pinctrl-0 = <&eth_rmii_pins>;
200	pinctrl-names = "default";
201
202	phy-handle = <&eth_phy0>;
203	phy-mode = "rmii";
204
205	mdio {
206		compatible = "snps,dwmac-mdio";
207		#address-cells = <1>;
208		#size-cells = <0>;
209
210		eth_phy0: ethernet-phy@0 {
211			/* IC Plus IP101GR (0x02430c54) */
212			reg = <0>;
213
214			reset-assert-us = <10000>;
215			reset-deassert-us = <10000>;
216			reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>;
217		};
218	};
219};
220
221&hdmi_tx {
222	status = "okay";
223	pinctrl-0 = <&hdmi_hpd_pins>, <&hdmi_i2c_pins>;
224	pinctrl-names = "default";
225};
226
227&hdmi_tx_tmds_port {
228	hdmi_tx_tmds_out: endpoint {
229		remote-endpoint = <&hdmi_connector_in>;
230	};
231};
232
233&ir {
234	status = "okay";
235	pinctrl-0 = <&remote_input_ao_pins>;
236	pinctrl-names = "default";
237};
238
239&pwm_ef {
240	status = "okay";
241	pinctrl-0 = <&pwm_e_pins>;
242	pinctrl-names = "default";
243	clocks = <&clkc CLKID_FCLK_DIV4>;
244	clock-names = "clkin0";
245};
246
247/* Wireless SDIO Module */
248&sd_emmc_a {
249	status = "okay";
250	pinctrl-0 = <&sdio_pins>;
251	pinctrl-1 = <&sdio_clk_gate_pins>;
252	pinctrl-names = "default", "clk-gate";
253	#address-cells = <1>;
254	#size-cells = <0>;
255
256	bus-width = <4>;
257	cap-sd-highspeed;
258	max-frequency = <100000000>;
259
260	non-removable;
261	disable-wp;
262
263	/* WiFi firmware requires power to be kept while in suspend */
264	keep-power-in-suspend;
265
266	mmc-pwrseq = <&sdio_pwrseq>;
267
268	vmmc-supply = <&vddao_3v3>;
269	vqmmc-supply = <&vddio_boot>;
270};
271
272/* SD card */
273&sd_emmc_b {
274	status = "okay";
275	pinctrl-0 = <&sdcard_pins>;
276	pinctrl-1 = <&sdcard_clk_gate_pins>;
277	pinctrl-names = "default", "clk-gate";
278
279	bus-width = <4>;
280	cap-sd-highspeed;
281	max-frequency = <50000000>;
282	disable-wp;
283
284	cd-gpios = <&gpio CARD_6 GPIO_ACTIVE_LOW>;
285
286	vmmc-supply = <&vddao_3v3>;
287	vqmmc-supply = <&vddio_card>;
288};
289
290/* eMMC */
291&sd_emmc_c {
292	status = "okay";
293	pinctrl-0 = <&emmc_pins>, <&emmc_ds_pins>;
294	pinctrl-1 = <&emmc_clk_gate_pins>;
295	pinctrl-names = "default", "clk-gate";
296
297	bus-width = <8>;
298	cap-mmc-highspeed;
299	max-frequency = <200000000>;
300	non-removable;
301	disable-wp;
302	mmc-ddr-1_8v;
303	mmc-hs200-1_8v;
304
305	mmc-pwrseq = <&emmc_pwrseq>;
306	vmmc-supply = <&vcc_3v3>;
307	vqmmc-supply = <&vddio_boot>;
308};
309
310&uart_AO {
311	status = "okay";
312	pinctrl-0 = <&uart_ao_a_pins>;
313	pinctrl-names = "default";
314};
315
316&usb0_phy {
317	status = "okay";
318	phy-supply = <&usb_pwr>;
319};
320
321&usb1_phy {
322	status = "okay";
323};
324
325&usb0 {
326	status = "okay";
327};
328
329&usb1 {
330	status = "okay";
331};
332