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