1d3aa4ce8SKevin Hilman// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2d3aa4ce8SKevin Hilman/*
3d3aa4ce8SKevin Hilman * Copyright (c) 2018 BayLibre SAS. All rights reserved.
4d3aa4ce8SKevin Hilman */
5d3aa4ce8SKevin Hilman
6d3aa4ce8SKevin Hilman/dts-v1/;
7d3aa4ce8SKevin Hilman
8d3aa4ce8SKevin Hilman#include "meson-g12a.dtsi"
9c9206b42SGuillaume La Roque#include <dt-bindings/gpio/gpio.h>
10c9206b42SGuillaume La Roque#include <dt-bindings/gpio/meson-g12a-gpio.h>
11d3aa4ce8SKevin Hilman
12d3aa4ce8SKevin Hilman/ {
13d3aa4ce8SKevin Hilman	compatible = "amediatech,x96-max", "amlogic,u200", "amlogic,g12a";
14d3aa4ce8SKevin Hilman	model = "Shenzhen Amediatech Technology Co., Ltd X96 Max";
15d3aa4ce8SKevin Hilman
16d3aa4ce8SKevin Hilman	aliases {
17d3aa4ce8SKevin Hilman		serial0 = &uart_AO;
18e8e7037cSNeil Armstrong		ethernet0 = &ethmac;
19d3aa4ce8SKevin Hilman	};
20d3aa4ce8SKevin Hilman	chosen {
21d3aa4ce8SKevin Hilman		stdout-path = "serial0:115200n8";
22d3aa4ce8SKevin Hilman	};
23d3aa4ce8SKevin Hilman	memory@0 {
24d3aa4ce8SKevin Hilman		device_type = "memory";
25d3aa4ce8SKevin Hilman		reg = <0x0 0x0 0x0 0x40000000>;
26d3aa4ce8SKevin Hilman	};
27c9206b42SGuillaume La Roque
28b0be9616SNeil Armstrong	cvbs-connector {
29b0be9616SNeil Armstrong		compatible = "composite-video-connector";
30b0be9616SNeil Armstrong
31b0be9616SNeil Armstrong		port {
32b0be9616SNeil Armstrong			cvbs_connector_in: endpoint {
33b0be9616SNeil Armstrong				remote-endpoint = <&cvbs_vdac_out>;
34b0be9616SNeil Armstrong			};
35b0be9616SNeil Armstrong		};
36b0be9616SNeil Armstrong	};
37b0be9616SNeil Armstrong
38b0be9616SNeil Armstrong	hdmi-connector {
39b0be9616SNeil Armstrong		compatible = "hdmi-connector";
40b0be9616SNeil Armstrong		type = "a";
41b0be9616SNeil Armstrong
42b0be9616SNeil Armstrong		port {
43b0be9616SNeil Armstrong			hdmi_connector_in: endpoint {
44b0be9616SNeil Armstrong				remote-endpoint = <&hdmi_tx_tmds_out>;
45b0be9616SNeil Armstrong			};
46b0be9616SNeil Armstrong		};
47b0be9616SNeil Armstrong	};
48b0be9616SNeil Armstrong
4945380009SGuillaume La Roque	emmc_pwrseq: emmc-pwrseq {
5045380009SGuillaume La Roque		compatible = "mmc-pwrseq-emmc";
5145380009SGuillaume La Roque		reset-gpios = <&gpio BOOT_12 GPIO_ACTIVE_LOW>;
5245380009SGuillaume La Roque	};
5345380009SGuillaume La Roque
54b497ad38SNeil Armstrong	sdio_pwrseq: sdio-pwrseq {
55b497ad38SNeil Armstrong		compatible = "mmc-pwrseq-simple";
56b497ad38SNeil Armstrong		reset-gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>;
57b497ad38SNeil Armstrong		clocks = <&wifi32k>;
58b497ad38SNeil Armstrong		clock-names = "ext_clock";
59b497ad38SNeil Armstrong	};
60b497ad38SNeil Armstrong
61c9206b42SGuillaume La Roque	flash_1v8: regulator-flash_1v8 {
62c9206b42SGuillaume La Roque		compatible = "regulator-fixed";
63c9206b42SGuillaume La Roque		regulator-name = "FLASH_1V8";
64c9206b42SGuillaume La Roque		regulator-min-microvolt = <1800000>;
65c9206b42SGuillaume La Roque		regulator-max-microvolt = <1800000>;
66c9206b42SGuillaume La Roque		vin-supply = <&vcc_3v3>;
67c9206b42SGuillaume La Roque		regulator-always-on;
68c9206b42SGuillaume La Roque	};
69c9206b42SGuillaume La Roque
70c9206b42SGuillaume La Roque	dc_in: regulator-dc_in {
71c9206b42SGuillaume La Roque		compatible = "regulator-fixed";
72c9206b42SGuillaume La Roque		regulator-name = "DC_IN";
73c9206b42SGuillaume La Roque		regulator-min-microvolt = <5000000>;
74c9206b42SGuillaume La Roque		regulator-max-microvolt = <5000000>;
75c9206b42SGuillaume La Roque		regulator-always-on;
76c9206b42SGuillaume La Roque	};
77c9206b42SGuillaume La Roque
78c9206b42SGuillaume La Roque	vcc_1v8: regulator-vcc_1v8 {
79c9206b42SGuillaume La Roque		compatible = "regulator-fixed";
80c9206b42SGuillaume La Roque		regulator-name = "VCC_1V8";
81c9206b42SGuillaume La Roque		regulator-min-microvolt = <1800000>;
82c9206b42SGuillaume La Roque		regulator-max-microvolt = <1800000>;
83c9206b42SGuillaume La Roque		vin-supply = <&vcc_3v3>;
84c9206b42SGuillaume La Roque		regulator-always-on;
85c9206b42SGuillaume La Roque	};
86c9206b42SGuillaume La Roque
87c9206b42SGuillaume La Roque	vcc_3v3: regulator-vcc_3v3 {
88c9206b42SGuillaume La Roque		compatible = "regulator-fixed";
89c9206b42SGuillaume La Roque		regulator-name = "VCC_3V3";
90c9206b42SGuillaume La Roque		regulator-min-microvolt = <3300000>;
91c9206b42SGuillaume La Roque		regulator-max-microvolt = <3300000>;
92c9206b42SGuillaume La Roque		vin-supply = <&vddao_3v3>;
93c9206b42SGuillaume La Roque		regulator-always-on;
94c9206b42SGuillaume La Roque		/* FIXME: actually controlled by VDDCPU_B_EN */
95c9206b42SGuillaume La Roque	};
96c9206b42SGuillaume La Roque
97c9206b42SGuillaume La Roque	vcc_5v: regulator-vcc_5v {
98c9206b42SGuillaume La Roque		compatible = "regulator-fixed";
99c9206b42SGuillaume La Roque		regulator-name = "VCC_5V";
100c9206b42SGuillaume La Roque		regulator-min-microvolt = <5000000>;
101c9206b42SGuillaume La Roque		regulator-max-microvolt = <5000000>;
102c9206b42SGuillaume La Roque		vin-supply = <&dc_in>;
103c9206b42SGuillaume La Roque
104c9206b42SGuillaume La Roque		gpio = <&gpio GPIOH_8 GPIO_OPEN_DRAIN>;
105c9206b42SGuillaume La Roque		enable-active-low;
106c9206b42SGuillaume La Roque	};
107c9206b42SGuillaume La Roque
108c9206b42SGuillaume La Roque	vddao_1v8: regulator-vddao_1v8 {
109c9206b42SGuillaume La Roque		compatible = "regulator-fixed";
110c9206b42SGuillaume La Roque		regulator-name = "VDDAO_1V8";
111c9206b42SGuillaume La Roque		regulator-min-microvolt = <1800000>;
112c9206b42SGuillaume La Roque		regulator-max-microvolt = <1800000>;
113c9206b42SGuillaume La Roque		vin-supply = <&vddao_3v3>;
114c9206b42SGuillaume La Roque		regulator-always-on;
115c9206b42SGuillaume La Roque	};
116c9206b42SGuillaume La Roque
117c9206b42SGuillaume La Roque	vddao_3v3: regulator-vddao_3v3 {
118c9206b42SGuillaume La Roque		compatible = "regulator-fixed";
119c9206b42SGuillaume La Roque		regulator-name = "VDDAO_3V3";
120c9206b42SGuillaume La Roque		regulator-min-microvolt = <3300000>;
121c9206b42SGuillaume La Roque		regulator-max-microvolt = <3300000>;
122c9206b42SGuillaume La Roque		vin-supply = <&dc_in>;
123c9206b42SGuillaume La Roque		regulator-always-on;
124c9206b42SGuillaume La Roque	};
125b497ad38SNeil Armstrong
126b497ad38SNeil Armstrong	wifi32k: wifi32k {
127b497ad38SNeil Armstrong		compatible = "pwm-clock";
128b497ad38SNeil Armstrong		#clock-cells = <0>;
129b497ad38SNeil Armstrong		clock-frequency = <32768>;
130b497ad38SNeil Armstrong		pwms = <&pwm_ef 0 30518 0>; /* PWM_E at 32.768KHz */
131b497ad38SNeil Armstrong	};
132d3aa4ce8SKevin Hilman};
133d3aa4ce8SKevin Hilman
134b0be9616SNeil Armstrong&cec_AO {
135b0be9616SNeil Armstrong	pinctrl-0 = <&cec_ao_a_h_pins>;
136b0be9616SNeil Armstrong	pinctrl-names = "default";
137b0be9616SNeil Armstrong	status = "disabled";
138b0be9616SNeil Armstrong	hdmi-phandle = <&hdmi_tx>;
139b0be9616SNeil Armstrong};
140b0be9616SNeil Armstrong
141b0be9616SNeil Armstrong&cecb_AO {
142b0be9616SNeil Armstrong	pinctrl-0 = <&cec_ao_b_h_pins>;
143b0be9616SNeil Armstrong	pinctrl-names = "default";
144b0be9616SNeil Armstrong	status = "okay";
145b0be9616SNeil Armstrong	hdmi-phandle = <&hdmi_tx>;
146b0be9616SNeil Armstrong};
147b0be9616SNeil Armstrong
148b0be9616SNeil Armstrong&cvbs_vdac_port {
149b0be9616SNeil Armstrong	cvbs_vdac_out: endpoint {
150b0be9616SNeil Armstrong		remote-endpoint = <&cvbs_connector_in>;
151b0be9616SNeil Armstrong	};
152b0be9616SNeil Armstrong};
153b0be9616SNeil Armstrong
154b0be9616SNeil Armstrong&hdmi_tx {
155b0be9616SNeil Armstrong	status = "okay";
156b0be9616SNeil Armstrong	pinctrl-0 = <&hdmitx_hpd_pins>, <&hdmitx_ddc_pins>;
157b0be9616SNeil Armstrong	pinctrl-names = "default";
158b0be9616SNeil Armstrong	hdmi-supply = <&vcc_5v>;
159b0be9616SNeil Armstrong};
160b0be9616SNeil Armstrong
161b0be9616SNeil Armstrong&hdmi_tx_tmds_port {
162b0be9616SNeil Armstrong	hdmi_tx_tmds_out: endpoint {
163b0be9616SNeil Armstrong		remote-endpoint = <&hdmi_connector_in>;
164b0be9616SNeil Armstrong	};
165b0be9616SNeil Armstrong};
166b0be9616SNeil Armstrong
167fff6e9d3SNeil Armstrong&ir {
168fff6e9d3SNeil Armstrong	status = "okay";
169fff6e9d3SNeil Armstrong	pinctrl-0 = <&remote_input_ao_pins>;
170fff6e9d3SNeil Armstrong	pinctrl-names = "default";
171fff6e9d3SNeil Armstrong};
172fff6e9d3SNeil Armstrong
173e8e7037cSNeil Armstrong&ext_mdio {
174e8e7037cSNeil Armstrong	external_phy: ethernet-phy@0 {
175e8e7037cSNeil Armstrong		/* Realtek RTL8211F (0x001cc916) */
176e8e7037cSNeil Armstrong		reg = <0>;
177e8e7037cSNeil Armstrong		max-speed = <1000>;
178e8e7037cSNeil Armstrong		eee-broken-1000t;
179e8e7037cSNeil Armstrong	};
180e8e7037cSNeil Armstrong};
181e8e7037cSNeil Armstrong
182e8e7037cSNeil Armstrong&ethmac {
183e8e7037cSNeil Armstrong	pinctrl-0 = <&eth_pins>, <&eth_rgmii_pins>;
184e8e7037cSNeil Armstrong	pinctrl-names = "default";
185e8e7037cSNeil Armstrong	status = "okay";
186e8e7037cSNeil Armstrong	phy-mode = "rgmii";
187e8e7037cSNeil Armstrong	phy-handle = <&external_phy>;
188e8e7037cSNeil Armstrong	amlogic,tx-delay-ns = <2>;
189e8e7037cSNeil Armstrong	snps,reset-gpio = <&gpio GPIOZ_14 0>;
190e8e7037cSNeil Armstrong	snps,reset-delays-us = <0 10000 1000000>;
191e8e7037cSNeil Armstrong	snps,reset-active-low;
192e8e7037cSNeil Armstrong};
193e8e7037cSNeil Armstrong
194b497ad38SNeil Armstrong&pwm_ef {
195b497ad38SNeil Armstrong	status = "okay";
196b497ad38SNeil Armstrong	pinctrl-0 = <&pwm_e_pins>;
197b497ad38SNeil Armstrong	pinctrl-names = "default";
198b497ad38SNeil Armstrong	clocks = <&xtal>;
199b497ad38SNeil Armstrong	clock-names = "clkin0";
200b497ad38SNeil Armstrong};
201b497ad38SNeil Armstrong
202c5c9c7cfSNeil Armstrong&uart_A {
203c5c9c7cfSNeil Armstrong	status = "okay";
204c5c9c7cfSNeil Armstrong	pinctrl-0 = <&uart_a_pins>, <&uart_a_cts_rts_pins>;
205c5c9c7cfSNeil Armstrong	pinctrl-names = "default";
206c5c9c7cfSNeil Armstrong	uart-has-rtscts;
207c5c9c7cfSNeil Armstrong
208c5c9c7cfSNeil Armstrong	bluetooth {
209c5c9c7cfSNeil Armstrong		compatible = "brcm,bcm43438-bt";
210c5c9c7cfSNeil Armstrong		shutdown-gpios = <&gpio GPIOX_17 GPIO_ACTIVE_HIGH>;
211524595ecSNeil Armstrong		clocks = <&wifi32k>;
212524595ecSNeil Armstrong		clock-names = "lpo";
213c5c9c7cfSNeil Armstrong	};
214c5c9c7cfSNeil Armstrong};
215c5c9c7cfSNeil Armstrong
216d3aa4ce8SKevin Hilman&uart_AO {
217d3aa4ce8SKevin Hilman	status = "okay";
2180b7aed33SNeil Armstrong	pinctrl-0 = <&uart_ao_a_pins>;
2190b7aed33SNeil Armstrong	pinctrl-names = "default";
220d3aa4ce8SKevin Hilman};
22145b72126SNeil Armstrong
22245b72126SNeil Armstrong&usb {
22345b72126SNeil Armstrong	status = "okay";
22445b72126SNeil Armstrong	dr_mode = "host";
22545b72126SNeil Armstrong};
22645380009SGuillaume La Roque
227b497ad38SNeil Armstrong/* SDIO */
228b497ad38SNeil Armstrong&sd_emmc_a {
229b497ad38SNeil Armstrong	status = "okay";
230b497ad38SNeil Armstrong	pinctrl-0 = <&sdio_pins>;
231b497ad38SNeil Armstrong	pinctrl-1 = <&sdio_clk_gate_pins>;
232b497ad38SNeil Armstrong	pinctrl-names = "default", "clk-gate";
233b497ad38SNeil Armstrong	#address-cells = <1>;
234b497ad38SNeil Armstrong	#size-cells = <0>;
235b497ad38SNeil Armstrong
236b497ad38SNeil Armstrong	bus-width = <4>;
237b497ad38SNeil Armstrong	cap-sd-highspeed;
238b497ad38SNeil Armstrong	sd-uhs-sdr50;
239b497ad38SNeil Armstrong	max-frequency = <100000000>;
240b497ad38SNeil Armstrong
241b497ad38SNeil Armstrong	non-removable;
242b497ad38SNeil Armstrong	disable-wp;
243b497ad38SNeil Armstrong
244b497ad38SNeil Armstrong	mmc-pwrseq = <&sdio_pwrseq>;
245b497ad38SNeil Armstrong
246b497ad38SNeil Armstrong	vmmc-supply = <&vddao_3v3>;
247b497ad38SNeil Armstrong	vqmmc-supply = <&vddao_1v8>;
248b497ad38SNeil Armstrong
249b497ad38SNeil Armstrong	brcmf: wifi@1 {
250b497ad38SNeil Armstrong		reg = <1>;
251b497ad38SNeil Armstrong		compatible = "brcm,bcm4329-fmac";
252b497ad38SNeil Armstrong	};
253b497ad38SNeil Armstrong};
254b497ad38SNeil Armstrong
25545380009SGuillaume La Roque/* SD card */
25645380009SGuillaume La Roque&sd_emmc_b {
25745380009SGuillaume La Roque	status = "okay";
25845380009SGuillaume La Roque	pinctrl-0 = <&sdcard_c_pins>;
25945380009SGuillaume La Roque	pinctrl-1 = <&sdcard_clk_gate_c_pins>;
26045380009SGuillaume La Roque	pinctrl-names = "default", "clk-gate";
26145380009SGuillaume La Roque
26245380009SGuillaume La Roque	bus-width = <4>;
26345380009SGuillaume La Roque	cap-sd-highspeed;
26445380009SGuillaume La Roque	max-frequency = <100000000>;
26545380009SGuillaume La Roque	disable-wp;
26645380009SGuillaume La Roque
26745380009SGuillaume La Roque	cd-gpios = <&gpio GPIOC_6 GPIO_ACTIVE_LOW>;
26845380009SGuillaume La Roque	vmmc-supply = <&vddao_3v3>;
26945380009SGuillaume La Roque	vqmmc-supply = <&vddao_3v3>;
27045380009SGuillaume La Roque};
27145380009SGuillaume La Roque
27245380009SGuillaume La Roque/* eMMC */
27345380009SGuillaume La Roque&sd_emmc_c {
27445380009SGuillaume La Roque	status = "okay";
27545380009SGuillaume La Roque	pinctrl-0 = <&emmc_pins>, <&emmc_ds_pins>;
27645380009SGuillaume La Roque	pinctrl-1 = <&emmc_clk_gate_pins>;
27745380009SGuillaume La Roque	pinctrl-names = "default", "clk-gate";
27845380009SGuillaume La Roque
27945380009SGuillaume La Roque	bus-width = <8>;
28045380009SGuillaume La Roque	cap-mmc-highspeed;
28145380009SGuillaume La Roque	max-frequency = <100000000>;
28245380009SGuillaume La Roque	non-removable;
28345380009SGuillaume La Roque	disable-wp;
28445380009SGuillaume La Roque
28545380009SGuillaume La Roque	mmc-pwrseq = <&emmc_pwrseq>;
28645380009SGuillaume La Roque	vmmc-supply = <&vcc_3v3>;
28745380009SGuillaume La Roque	vqmmc-supply = <&flash_1v8>;
28845380009SGuillaume La Roque};
289