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;
557eea6710SKevin Hilman	};
567eea6710SKevin Hilman
577eea6710SKevin Hilman	chosen {
587eea6710SKevin Hilman		stdout-path = "serial0:115200n8";
597eea6710SKevin Hilman	};
607eea6710SKevin Hilman
617eea6710SKevin Hilman	memory@0 {
627eea6710SKevin Hilman		device_type = "memory";
637eea6710SKevin Hilman		reg = <0x0 0x0 0x0 0x80000000>;
647eea6710SKevin Hilman	};
657eea6710SKevin Hilman
667eea6710SKevin Hilman	vddio_card: gpio-regulator {
677eea6710SKevin Hilman		compatible = "regulator-gpio";
687eea6710SKevin Hilman
697eea6710SKevin Hilman		regulator-name = "VDDIO_CARD";
707eea6710SKevin Hilman		regulator-min-microvolt = <1800000>;
717eea6710SKevin Hilman		regulator-max-microvolt = <3300000>;
727eea6710SKevin Hilman
737eea6710SKevin Hilman		gpios = <&gpio_ao GPIOAO_5 GPIO_ACTIVE_HIGH>;
747eea6710SKevin Hilman		gpios-states = <1>;
757eea6710SKevin Hilman
767eea6710SKevin Hilman		/* Based on P200 schematics, signal CARD_1.8V/3.3V_CTR */
777eea6710SKevin Hilman		states = <1800000 0
787eea6710SKevin Hilman			  3300000 1>;
797eea6710SKevin Hilman	};
807eea6710SKevin Hilman
817eea6710SKevin Hilman	vddio_boot: regulator-vddio_boot {
827eea6710SKevin Hilman		compatible = "regulator-fixed";
837eea6710SKevin Hilman		regulator-name = "VDDIO_BOOT";
847eea6710SKevin Hilman		regulator-min-microvolt = <1800000>;
857eea6710SKevin Hilman		regulator-max-microvolt = <1800000>;
867eea6710SKevin Hilman	};
877eea6710SKevin Hilman
887eea6710SKevin Hilman	vddao_3v3: regulator-vddao_3v3 {
897eea6710SKevin Hilman		compatible = "regulator-fixed";
907eea6710SKevin Hilman		regulator-name = "VDDAO_3V3";
917eea6710SKevin Hilman		regulator-min-microvolt = <3300000>;
927eea6710SKevin Hilman		regulator-max-microvolt = <3300000>;
937eea6710SKevin Hilman	};
947eea6710SKevin Hilman
957eea6710SKevin Hilman	vcc_3v3: regulator-vcc_3v3 {
967eea6710SKevin Hilman		compatible = "regulator-fixed";
977eea6710SKevin Hilman		regulator-name = "VCC_3V3";
987eea6710SKevin Hilman		regulator-min-microvolt = <3300000>;
997eea6710SKevin Hilman		regulator-max-microvolt = <3300000>;
1007eea6710SKevin Hilman	};
1017eea6710SKevin Hilman
1027eea6710SKevin Hilman	emmc_pwrseq: emmc-pwrseq {
1037eea6710SKevin Hilman		compatible = "mmc-pwrseq-emmc";
1047eea6710SKevin Hilman		reset-gpios = <&gpio BOOT_9 GPIO_ACTIVE_LOW>;
1057eea6710SKevin Hilman	};
1067eea6710SKevin Hilman
1077eea6710SKevin Hilman	wifi32k: wifi32k {
1087eea6710SKevin Hilman		compatible = "pwm-clock";
1097eea6710SKevin Hilman		#clock-cells = <0>;
1107eea6710SKevin Hilman		clock-frequency = <32768>;
1117eea6710SKevin Hilman		pwms = <&pwm_ef 0 30518 0>; /* PWM_E at 32.768KHz */
1127eea6710SKevin Hilman	};
1137eea6710SKevin Hilman
1147eea6710SKevin Hilman	sdio_pwrseq: sdio-pwrseq {
1157eea6710SKevin Hilman		compatible = "mmc-pwrseq-simple";
1167eea6710SKevin Hilman		reset-gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>;
1177eea6710SKevin Hilman		clocks = <&wifi32k>;
1187eea6710SKevin Hilman		clock-names = "ext_clock";
1197eea6710SKevin Hilman	};
1207eea6710SKevin Hilman
1217eea6710SKevin Hilman	cvbs-connector {
1227eea6710SKevin Hilman		compatible = "composite-video-connector";
1237eea6710SKevin Hilman
1247eea6710SKevin Hilman		port {
1257eea6710SKevin Hilman			cvbs_connector_in: endpoint {
1267eea6710SKevin Hilman				remote-endpoint = <&cvbs_vdac_out>;
1277eea6710SKevin Hilman			};
1287eea6710SKevin Hilman		};
1297eea6710SKevin Hilman	};
1306939db7eSNeil Armstrong
1316939db7eSNeil Armstrong	hdmi-connector {
1326939db7eSNeil Armstrong		compatible = "hdmi-connector";
1336939db7eSNeil Armstrong		type = "a";
1346939db7eSNeil Armstrong
1356939db7eSNeil Armstrong		port {
1366939db7eSNeil Armstrong			hdmi_connector_in: endpoint {
1376939db7eSNeil Armstrong				remote-endpoint = <&hdmi_tx_tmds_out>;
1386939db7eSNeil Armstrong			};
1396939db7eSNeil Armstrong		};
1406939db7eSNeil Armstrong	};
1417eea6710SKevin Hilman};
1427eea6710SKevin Hilman
1437eea6710SKevin Hilman&uart_AO {
1447eea6710SKevin Hilman	status = "okay";
1457eea6710SKevin Hilman	pinctrl-0 = <&uart_ao_a_pins>;
1467eea6710SKevin Hilman	pinctrl-names = "default";
1477eea6710SKevin Hilman};
1487eea6710SKevin Hilman
1497eea6710SKevin Hilman&ethmac {
1507eea6710SKevin Hilman	status = "okay";
1517eea6710SKevin Hilman	phy-mode = "rmii";
1527eea6710SKevin Hilman	phy-handle = <&internal_phy>;
1537eea6710SKevin Hilman};
1547eea6710SKevin Hilman
1557eea6710SKevin Hilman&ir {
1567eea6710SKevin Hilman	status = "okay";
1577eea6710SKevin Hilman	pinctrl-0 = <&remote_input_ao_pins>;
1587eea6710SKevin Hilman	pinctrl-names = "default";
1597eea6710SKevin Hilman};
1607eea6710SKevin Hilman
1617eea6710SKevin Hilman/* Wireless SDIO Module */
1627eea6710SKevin Hilman&sd_emmc_a {
1637eea6710SKevin Hilman	status = "okay";
1647eea6710SKevin Hilman	pinctrl-0 = <&sdio_pins>;
1657eea6710SKevin Hilman	pinctrl-names = "default";
1667eea6710SKevin Hilman	#address-cells = <1>;
1677eea6710SKevin Hilman	#size-cells = <0>;
1687eea6710SKevin Hilman
1697eea6710SKevin Hilman	bus-width = <4>;
1707eea6710SKevin Hilman	cap-sd-highspeed;
1717eea6710SKevin Hilman	max-frequency = <100000000>;
1727eea6710SKevin Hilman
1737eea6710SKevin Hilman	non-removable;
1747eea6710SKevin Hilman	disable-wp;
1757eea6710SKevin Hilman
1767eea6710SKevin Hilman	mmc-pwrseq = <&sdio_pwrseq>;
1777eea6710SKevin Hilman
1787eea6710SKevin Hilman	vmmc-supply = <&vddao_3v3>;
1797eea6710SKevin Hilman	vqmmc-supply = <&vddio_boot>;
1807eea6710SKevin Hilman};
1817eea6710SKevin Hilman
1827eea6710SKevin Hilman/* SD card */
1837eea6710SKevin Hilman&sd_emmc_b {
1847eea6710SKevin Hilman	status = "okay";
1857eea6710SKevin Hilman	pinctrl-0 = <&sdcard_pins>;
1867eea6710SKevin Hilman	pinctrl-names = "default";
1877eea6710SKevin Hilman
1887eea6710SKevin Hilman	bus-width = <4>;
1897eea6710SKevin Hilman	cap-sd-highspeed;
1907eea6710SKevin Hilman	max-frequency = <100000000>;
1917eea6710SKevin Hilman	disable-wp;
1927eea6710SKevin Hilman
1937eea6710SKevin Hilman	cd-gpios = <&gpio CARD_6 GPIO_ACTIVE_HIGH>;
1947eea6710SKevin Hilman	cd-inverted;
1957eea6710SKevin Hilman
1967eea6710SKevin Hilman	vmmc-supply = <&vddao_3v3>;
1977eea6710SKevin Hilman	vqmmc-supply = <&vddio_card>;
1987eea6710SKevin Hilman};
1997eea6710SKevin Hilman
2007eea6710SKevin Hilman/* eMMC */
2017eea6710SKevin Hilman&sd_emmc_c {
2027eea6710SKevin Hilman	status = "okay";
2037eea6710SKevin Hilman	pinctrl-0 = <&emmc_pins>;
2047eea6710SKevin Hilman	pinctrl-names = "default";
2057eea6710SKevin Hilman
2067eea6710SKevin Hilman	bus-width = <8>;
2077eea6710SKevin Hilman	cap-sd-highspeed;
2087eea6710SKevin Hilman	cap-mmc-highspeed;
2097eea6710SKevin Hilman	max-frequency = <200000000>;
2107eea6710SKevin Hilman	non-removable;
2117eea6710SKevin Hilman	disable-wp;
2127eea6710SKevin Hilman	mmc-ddr-1_8v;
2137eea6710SKevin Hilman	mmc-hs200-1_8v;
2147eea6710SKevin Hilman
2157eea6710SKevin Hilman	mmc-pwrseq = <&emmc_pwrseq>;
2167eea6710SKevin Hilman	vmmc-supply = <&vcc_3v3>;
2177eea6710SKevin Hilman	vqmmc-supply = <&vddio_boot>;
2187eea6710SKevin Hilman};
2197eea6710SKevin Hilman
2207eea6710SKevin Hilman&pwm_ef {
2217eea6710SKevin Hilman	status = "okay";
2227eea6710SKevin Hilman	pinctrl-0 = <&pwm_e_pins>;
2237eea6710SKevin Hilman	pinctrl-names = "default";
2247eea6710SKevin Hilman	clocks = <&clkc CLKID_FCLK_DIV4>;
2257eea6710SKevin Hilman	clock-names = "clkin0";
2267eea6710SKevin Hilman};
2277eea6710SKevin Hilman
2287eea6710SKevin Hilman&cvbs_vdac_port {
2297eea6710SKevin Hilman	cvbs_vdac_out: endpoint {
2307eea6710SKevin Hilman		remote-endpoint = <&cvbs_connector_in>;
2317eea6710SKevin Hilman	};
2327eea6710SKevin Hilman};
2336939db7eSNeil Armstrong
2346939db7eSNeil Armstrong&hdmi_tx {
2356939db7eSNeil Armstrong	status = "okay";
2366939db7eSNeil Armstrong	pinctrl-0 = <&hdmi_hpd_pins>, <&hdmi_i2c_pins>;
2376939db7eSNeil Armstrong	pinctrl-names = "default";
2386939db7eSNeil Armstrong};
2396939db7eSNeil Armstrong
2406939db7eSNeil Armstrong&hdmi_tx_tmds_port {
2416939db7eSNeil Armstrong	hdmi_tx_tmds_out: endpoint {
2426939db7eSNeil Armstrong		remote-endpoint = <&hdmi_connector_in>;
2436939db7eSNeil Armstrong	};
2446939db7eSNeil Armstrong};
245