17eea6710SKevin Hilman/*
27eea6710SKevin Hilman * Copyright (c) 2016 Andreas Färber
37eea6710SKevin Hilman * Copyright (c) 2016 BayLibre, Inc.
47eea6710SKevin Hilman * Author: Neil Armstrong <narmstrong@kernel.org>
57eea6710SKevin Hilman *
67eea6710SKevin Hilman * This file is dual-licensed: you can use it either under the terms
77eea6710SKevin Hilman * of the GPL or the X11 license, at your option. Note that this dual
87eea6710SKevin Hilman * licensing only applies to this file, and not this project as a
97eea6710SKevin Hilman * whole.
107eea6710SKevin Hilman *
117eea6710SKevin Hilman *  a) This library is free software; you can redistribute it and/or
127eea6710SKevin Hilman *     modify it under the terms of the GNU General Public License as
137eea6710SKevin Hilman *     published by the Free Software Foundation; either version 2 of the
147eea6710SKevin Hilman *     License, or (at your option) any later version.
157eea6710SKevin Hilman *
167eea6710SKevin Hilman *     This library is distributed in the hope that it will be useful,
177eea6710SKevin Hilman *     but WITHOUT ANY WARRANTY; without even the implied warranty of
187eea6710SKevin Hilman *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
197eea6710SKevin Hilman *     GNU General Public License for more details.
207eea6710SKevin Hilman *
217eea6710SKevin Hilman * Or, alternatively,
227eea6710SKevin Hilman *
237eea6710SKevin Hilman *  b) Permission is hereby granted, free of charge, to any person
247eea6710SKevin Hilman *     obtaining a copy of this software and associated documentation
257eea6710SKevin Hilman *     files (the "Software"), to deal in the Software without
267eea6710SKevin Hilman *     restriction, including without limitation the rights to use,
277eea6710SKevin Hilman *     copy, modify, merge, publish, distribute, sublicense, and/or
287eea6710SKevin Hilman *     sell copies of the Software, and to permit persons to whom the
297eea6710SKevin Hilman *     Software is furnished to do so, subject to the following
307eea6710SKevin Hilman *     conditions:
317eea6710SKevin Hilman *
327eea6710SKevin Hilman *     The above copyright notice and this permission notice shall be
337eea6710SKevin Hilman *     included in all copies or substantial portions of the Software.
347eea6710SKevin Hilman *
357eea6710SKevin Hilman *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
367eea6710SKevin Hilman *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
377eea6710SKevin Hilman *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
387eea6710SKevin Hilman *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
397eea6710SKevin Hilman *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
407eea6710SKevin Hilman *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
417eea6710SKevin Hilman *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
427eea6710SKevin Hilman *     OTHER DEALINGS IN THE SOFTWARE.
437eea6710SKevin Hilman */
447eea6710SKevin Hilman
457eea6710SKevin Hilman/dts-v1/;
467eea6710SKevin Hilman
477eea6710SKevin Hilman#include "meson-gxl-s905x.dtsi"
487eea6710SKevin Hilman
497eea6710SKevin Hilman/ {
507eea6710SKevin Hilman	compatible = "nexbox,a95x", "amlogic,s905x", "amlogic,meson-gxl";
517eea6710SKevin Hilman	model = "NEXBOX A95X (S905X)";
527eea6710SKevin Hilman
537eea6710SKevin Hilman	aliases {
547eea6710SKevin Hilman		serial0 = &uart_AO;
55059a58fcSJorge Ramirez-Ortiz		ethernet0 = &ethmac;
567eea6710SKevin Hilman	};
577eea6710SKevin Hilman
587eea6710SKevin Hilman	chosen {
597eea6710SKevin Hilman		stdout-path = "serial0:115200n8";
607eea6710SKevin Hilman	};
617eea6710SKevin Hilman
627eea6710SKevin Hilman	memory@0 {
637eea6710SKevin Hilman		device_type = "memory";
647eea6710SKevin Hilman		reg = <0x0 0x0 0x0 0x80000000>;
657eea6710SKevin Hilman	};
667eea6710SKevin Hilman
677eea6710SKevin Hilman	vddio_card: gpio-regulator {
687eea6710SKevin Hilman		compatible = "regulator-gpio";
697eea6710SKevin Hilman
707eea6710SKevin Hilman		regulator-name = "VDDIO_CARD";
717eea6710SKevin Hilman		regulator-min-microvolt = <1800000>;
727eea6710SKevin Hilman		regulator-max-microvolt = <3300000>;
737eea6710SKevin Hilman
747eea6710SKevin Hilman		gpios = <&gpio_ao GPIOAO_5 GPIO_ACTIVE_HIGH>;
757eea6710SKevin Hilman		gpios-states = <1>;
767eea6710SKevin Hilman
777eea6710SKevin Hilman		/* Based on P200 schematics, signal CARD_1.8V/3.3V_CTR */
787eea6710SKevin Hilman		states = <1800000 0
797eea6710SKevin Hilman			  3300000 1>;
807eea6710SKevin Hilman	};
817eea6710SKevin Hilman
827eea6710SKevin Hilman	vddio_boot: regulator-vddio_boot {
837eea6710SKevin Hilman		compatible = "regulator-fixed";
847eea6710SKevin Hilman		regulator-name = "VDDIO_BOOT";
857eea6710SKevin Hilman		regulator-min-microvolt = <1800000>;
867eea6710SKevin Hilman		regulator-max-microvolt = <1800000>;
877eea6710SKevin Hilman	};
887eea6710SKevin Hilman
897eea6710SKevin Hilman	vddao_3v3: regulator-vddao_3v3 {
907eea6710SKevin Hilman		compatible = "regulator-fixed";
917eea6710SKevin Hilman		regulator-name = "VDDAO_3V3";
927eea6710SKevin Hilman		regulator-min-microvolt = <3300000>;
937eea6710SKevin Hilman		regulator-max-microvolt = <3300000>;
947eea6710SKevin Hilman	};
957eea6710SKevin Hilman
967eea6710SKevin Hilman	vcc_3v3: regulator-vcc_3v3 {
977eea6710SKevin Hilman		compatible = "regulator-fixed";
987eea6710SKevin Hilman		regulator-name = "VCC_3V3";
997eea6710SKevin Hilman		regulator-min-microvolt = <3300000>;
1007eea6710SKevin Hilman		regulator-max-microvolt = <3300000>;
1017eea6710SKevin Hilman	};
1027eea6710SKevin Hilman
1037eea6710SKevin Hilman	emmc_pwrseq: emmc-pwrseq {
1047eea6710SKevin Hilman		compatible = "mmc-pwrseq-emmc";
1057eea6710SKevin Hilman		reset-gpios = <&gpio BOOT_9 GPIO_ACTIVE_LOW>;
1067eea6710SKevin Hilman	};
1077eea6710SKevin Hilman
1087eea6710SKevin Hilman	wifi32k: wifi32k {
1097eea6710SKevin Hilman		compatible = "pwm-clock";
1107eea6710SKevin Hilman		#clock-cells = <0>;
1117eea6710SKevin Hilman		clock-frequency = <32768>;
1127eea6710SKevin Hilman		pwms = <&pwm_ef 0 30518 0>; /* PWM_E at 32.768KHz */
1137eea6710SKevin Hilman	};
1147eea6710SKevin Hilman
1157eea6710SKevin Hilman	sdio_pwrseq: sdio-pwrseq {
1167eea6710SKevin Hilman		compatible = "mmc-pwrseq-simple";
1177eea6710SKevin Hilman		reset-gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>;
1187eea6710SKevin Hilman		clocks = <&wifi32k>;
1197eea6710SKevin Hilman		clock-names = "ext_clock";
1207eea6710SKevin Hilman	};
1217eea6710SKevin Hilman
1227eea6710SKevin Hilman	cvbs-connector {
1237eea6710SKevin Hilman		compatible = "composite-video-connector";
1247eea6710SKevin Hilman
1257eea6710SKevin Hilman		port {
1267eea6710SKevin Hilman			cvbs_connector_in: endpoint {
1277eea6710SKevin Hilman				remote-endpoint = <&cvbs_vdac_out>;
1287eea6710SKevin Hilman			};
1297eea6710SKevin Hilman		};
1307eea6710SKevin Hilman	};
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	};
1427eea6710SKevin Hilman};
1437eea6710SKevin Hilman
144b16c71c9SNeil Armstrong&cec_AO {
145b16c71c9SNeil Armstrong	status = "okay";
146b16c71c9SNeil Armstrong	pinctrl-0 = <&ao_cec_pins>;
147b16c71c9SNeil Armstrong	pinctrl-names = "default";
148b16c71c9SNeil Armstrong	hdmi-phandle = <&hdmi_tx>;
149b16c71c9SNeil Armstrong};
150b16c71c9SNeil Armstrong
151e02849b9SAndreas Färber&cvbs_vdac_port {
152e02849b9SAndreas Färber	cvbs_vdac_out: endpoint {
153e02849b9SAndreas Färber		remote-endpoint = <&cvbs_connector_in>;
154e02849b9SAndreas Färber	};
1557eea6710SKevin Hilman};
1567eea6710SKevin Hilman
1577eea6710SKevin Hilman&ethmac {
1587eea6710SKevin Hilman	status = "okay";
1597eea6710SKevin Hilman	phy-mode = "rmii";
1607eea6710SKevin Hilman	phy-handle = <&internal_phy>;
1617eea6710SKevin Hilman};
1627eea6710SKevin Hilman
163e02849b9SAndreas Färber&hdmi_tx {
164e02849b9SAndreas Färber	status = "okay";
165e02849b9SAndreas Färber	pinctrl-0 = <&hdmi_hpd_pins>, <&hdmi_i2c_pins>;
166e02849b9SAndreas Färber	pinctrl-names = "default";
167e02849b9SAndreas Färber};
168e02849b9SAndreas Färber
169e02849b9SAndreas Färber&hdmi_tx_tmds_port {
170e02849b9SAndreas Färber	hdmi_tx_tmds_out: endpoint {
171e02849b9SAndreas Färber		remote-endpoint = <&hdmi_connector_in>;
172e02849b9SAndreas Färber	};
173e02849b9SAndreas Färber};
174e02849b9SAndreas Färber
1757eea6710SKevin Hilman&ir {
1767eea6710SKevin Hilman	status = "okay";
1777eea6710SKevin Hilman	pinctrl-0 = <&remote_input_ao_pins>;
1787eea6710SKevin Hilman	pinctrl-names = "default";
1797eea6710SKevin Hilman};
1807eea6710SKevin Hilman
181e02849b9SAndreas Färber&pwm_ef {
182e02849b9SAndreas Färber	status = "okay";
183e02849b9SAndreas Färber	pinctrl-0 = <&pwm_e_pins>;
184e02849b9SAndreas Färber	pinctrl-names = "default";
185e02849b9SAndreas Färber	clocks = <&clkc CLKID_FCLK_DIV4>;
186e02849b9SAndreas Färber	clock-names = "clkin0";
187e02849b9SAndreas Färber};
188e02849b9SAndreas Färber
1897eea6710SKevin Hilman/* Wireless SDIO Module */
1907eea6710SKevin Hilman&sd_emmc_a {
1917eea6710SKevin Hilman	status = "okay";
1927eea6710SKevin Hilman	pinctrl-0 = <&sdio_pins>;
19367e7607fSJerome Brunet	pinctrl-1 = <&sdio_clk_gate_pins>;
19467e7607fSJerome Brunet	pinctrl-names = "default", "clk-gate";
1957eea6710SKevin Hilman	#address-cells = <1>;
1967eea6710SKevin Hilman	#size-cells = <0>;
1977eea6710SKevin Hilman
1987eea6710SKevin Hilman	bus-width = <4>;
1997eea6710SKevin Hilman	cap-sd-highspeed;
2007eea6710SKevin Hilman	max-frequency = <100000000>;
2017eea6710SKevin Hilman
2027eea6710SKevin Hilman	non-removable;
2037eea6710SKevin Hilman	disable-wp;
2047eea6710SKevin Hilman
2057eea6710SKevin Hilman	mmc-pwrseq = <&sdio_pwrseq>;
2067eea6710SKevin Hilman
2077eea6710SKevin Hilman	vmmc-supply = <&vddao_3v3>;
2087eea6710SKevin Hilman	vqmmc-supply = <&vddio_boot>;
2097eea6710SKevin Hilman};
2107eea6710SKevin Hilman
2117eea6710SKevin Hilman/* SD card */
2127eea6710SKevin Hilman&sd_emmc_b {
2137eea6710SKevin Hilman	status = "okay";
2147eea6710SKevin Hilman	pinctrl-0 = <&sdcard_pins>;
21567e7607fSJerome Brunet	pinctrl-1 = <&sdcard_clk_gate_pins>;
21667e7607fSJerome Brunet	pinctrl-names = "default", "clk-gate";
2177eea6710SKevin Hilman
2187eea6710SKevin Hilman	bus-width = <4>;
2197eea6710SKevin Hilman	cap-sd-highspeed;
2207eea6710SKevin Hilman	max-frequency = <100000000>;
2217eea6710SKevin Hilman	disable-wp;
2227eea6710SKevin Hilman
2237eea6710SKevin Hilman	cd-gpios = <&gpio CARD_6 GPIO_ACTIVE_HIGH>;
2247eea6710SKevin Hilman	cd-inverted;
2257eea6710SKevin Hilman
2267eea6710SKevin Hilman	vmmc-supply = <&vddao_3v3>;
2277eea6710SKevin Hilman	vqmmc-supply = <&vddio_card>;
2287eea6710SKevin Hilman};
2297eea6710SKevin Hilman
2307eea6710SKevin Hilman/* eMMC */
2317eea6710SKevin Hilman&sd_emmc_c {
2327eea6710SKevin Hilman	status = "okay";
233ab36be66SNeil Armstrong	pinctrl-0 = <&emmc_pins>, <&emmc_ds_pins>;
23467e7607fSJerome Brunet	pinctrl-1 = <&emmc_clk_gate_pins>;
23567e7607fSJerome Brunet	pinctrl-names = "default", "clk-gate";
2367eea6710SKevin Hilman
2377eea6710SKevin Hilman	bus-width = <8>;
2387eea6710SKevin Hilman	cap-mmc-highspeed;
2397eea6710SKevin Hilman	max-frequency = <200000000>;
2407eea6710SKevin Hilman	non-removable;
2417eea6710SKevin Hilman	disable-wp;
2427eea6710SKevin Hilman	mmc-ddr-1_8v;
2437eea6710SKevin Hilman	mmc-hs200-1_8v;
2447eea6710SKevin Hilman
2457eea6710SKevin Hilman	mmc-pwrseq = <&emmc_pwrseq>;
2467eea6710SKevin Hilman	vmmc-supply = <&vcc_3v3>;
2477eea6710SKevin Hilman	vqmmc-supply = <&vddio_boot>;
2487eea6710SKevin Hilman};
2497eea6710SKevin Hilman
250e02849b9SAndreas Färber&uart_AO {
2517eea6710SKevin Hilman	status = "okay";
252e02849b9SAndreas Färber	pinctrl-0 = <&uart_ao_a_pins>;
2537eea6710SKevin Hilman	pinctrl-names = "default";
2546939db7eSNeil Armstrong};
255