1bfcef28aSBeniamino Galvani/*
2bfcef28aSBeniamino Galvani * Copyright (c) 2016 Andreas Färber
3bfcef28aSBeniamino Galvani * Copyright (c) 2016 BayLibre, Inc.
4bfcef28aSBeniamino Galvani * Author: Kevin Hilman <khilman@kernel.org>
5bfcef28aSBeniamino Galvani *
6bfcef28aSBeniamino Galvani * This file is dual-licensed: you can use it either under the terms
7bfcef28aSBeniamino Galvani * of the GPL or the X11 license, at your option. Note that this dual
8bfcef28aSBeniamino Galvani * licensing only applies to this file, and not this project as a
9bfcef28aSBeniamino Galvani * whole.
10bfcef28aSBeniamino Galvani *
11bfcef28aSBeniamino Galvani *  a) This library is free software; you can redistribute it and/or
12bfcef28aSBeniamino Galvani *     modify it under the terms of the GNU General Public License as
13bfcef28aSBeniamino Galvani *     published by the Free Software Foundation; either version 2 of the
14bfcef28aSBeniamino Galvani *     License, or (at your option) any later version.
15bfcef28aSBeniamino Galvani *
16bfcef28aSBeniamino Galvani *     This library is distributed in the hope that it will be useful,
17bfcef28aSBeniamino Galvani *     but WITHOUT ANY WARRANTY; without even the implied warranty of
18bfcef28aSBeniamino Galvani *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19bfcef28aSBeniamino Galvani *     GNU General Public License for more details.
20bfcef28aSBeniamino Galvani *
21bfcef28aSBeniamino Galvani * Or, alternatively,
22bfcef28aSBeniamino Galvani *
23bfcef28aSBeniamino Galvani *  b) Permission is hereby granted, free of charge, to any person
24bfcef28aSBeniamino Galvani *     obtaining a copy of this software and associated documentation
25bfcef28aSBeniamino Galvani *     files (the "Software"), to deal in the Software without
26bfcef28aSBeniamino Galvani *     restriction, including without limitation the rights to use,
27bfcef28aSBeniamino Galvani *     copy, modify, merge, publish, distribute, sublicense, and/or
28bfcef28aSBeniamino Galvani *     sell copies of the Software, and to permit persons to whom the
29bfcef28aSBeniamino Galvani *     Software is furnished to do so, subject to the following
30bfcef28aSBeniamino Galvani *     conditions:
31bfcef28aSBeniamino Galvani *
32bfcef28aSBeniamino Galvani *     The above copyright notice and this permission notice shall be
33bfcef28aSBeniamino Galvani *     included in all copies or substantial portions of the Software.
34bfcef28aSBeniamino Galvani *
35bfcef28aSBeniamino Galvani *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
36bfcef28aSBeniamino Galvani *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
37bfcef28aSBeniamino Galvani *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
38bfcef28aSBeniamino Galvani *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
39bfcef28aSBeniamino Galvani *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
40bfcef28aSBeniamino Galvani *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
41bfcef28aSBeniamino Galvani *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
42bfcef28aSBeniamino Galvani *     OTHER DEALINGS IN THE SOFTWARE.
43bfcef28aSBeniamino Galvani */
44bfcef28aSBeniamino Galvani
45bfcef28aSBeniamino Galvani/dts-v1/;
46bfcef28aSBeniamino Galvani
47bfcef28aSBeniamino Galvani#include "meson-gxbb.dtsi"
48dd83840eSBeniamino Galvani#include <dt-bindings/gpio/gpio.h>
49bfcef28aSBeniamino Galvani
50bfcef28aSBeniamino Galvani/ {
51bfcef28aSBeniamino Galvani	compatible = "hardkernel,odroid-c2", "amlogic,meson-gxbb";
52bfcef28aSBeniamino Galvani	model = "Hardkernel ODROID-C2";
53bfcef28aSBeniamino Galvani
54bfcef28aSBeniamino Galvani	aliases {
55bfcef28aSBeniamino Galvani		serial0 = &uart_AO;
56bfcef28aSBeniamino Galvani	};
57bfcef28aSBeniamino Galvani
58bfcef28aSBeniamino Galvani	chosen {
59bfcef28aSBeniamino Galvani		stdout-path = "serial0:115200n8";
60bfcef28aSBeniamino Galvani	};
61bfcef28aSBeniamino Galvani
62bfcef28aSBeniamino Galvani	memory@0 {
63bfcef28aSBeniamino Galvani		device_type = "memory";
64bfcef28aSBeniamino Galvani		reg = <0x0 0x0 0x0 0x80000000>;
65bfcef28aSBeniamino Galvani	};
66dd83840eSBeniamino Galvani
67a3b02a1dSHeiner Kallweit	usb_otg_pwr: regulator-usb-pwrs {
68a3b02a1dSHeiner Kallweit		compatible = "regulator-fixed";
69a3b02a1dSHeiner Kallweit
70a3b02a1dSHeiner Kallweit		regulator-name = "USB_OTG_PWR";
71a3b02a1dSHeiner Kallweit
72a3b02a1dSHeiner Kallweit		regulator-min-microvolt = <5000000>;
73a3b02a1dSHeiner Kallweit		regulator-max-microvolt = <5000000>;
74a3b02a1dSHeiner Kallweit
75a3b02a1dSHeiner Kallweit		gpio = <&gpio_ao GPIOAO_5 GPIO_ACTIVE_HIGH>;
76a3b02a1dSHeiner Kallweit		enable-active-high;
77a3b02a1dSHeiner Kallweit	};
78a3b02a1dSHeiner Kallweit
79dd83840eSBeniamino Galvani	leds {
80dd83840eSBeniamino Galvani		compatible = "gpio-leds";
81dd83840eSBeniamino Galvani		blue {
82dd83840eSBeniamino Galvani			label = "c2:blue:alive";
83dd83840eSBeniamino Galvani			gpios = <&gpio_ao GPIOAO_13 GPIO_ACTIVE_LOW>;
84dd83840eSBeniamino Galvani			linux,default-trigger = "heartbeat";
85dd83840eSBeniamino Galvani			default-state = "off";
86dd83840eSBeniamino Galvani		};
87dd83840eSBeniamino Galvani	};
88a3b02a1dSHeiner Kallweit
89a3b02a1dSHeiner Kallweit	tflash_vdd: regulator-tflash_vdd {
90a3b02a1dSHeiner Kallweit		/*
91a3b02a1dSHeiner Kallweit		 * signal name from schematics: TFLASH_VDD_EN
92a3b02a1dSHeiner Kallweit		 */
93a3b02a1dSHeiner Kallweit		compatible = "regulator-fixed";
94a3b02a1dSHeiner Kallweit
95a3b02a1dSHeiner Kallweit		regulator-name = "TFLASH_VDD";
96a3b02a1dSHeiner Kallweit		regulator-min-microvolt = <3300000>;
97a3b02a1dSHeiner Kallweit		regulator-max-microvolt = <3300000>;
98a3b02a1dSHeiner Kallweit
994a63a75cSBeniamino Galvani		gpio = <&gpio GPIOY_12 GPIO_ACTIVE_HIGH>;
100a3b02a1dSHeiner Kallweit		enable-active-high;
101a3b02a1dSHeiner Kallweit	};
102a3b02a1dSHeiner Kallweit
103a3b02a1dSHeiner Kallweit	tf_io: gpio-regulator-tf_io {
104a3b02a1dSHeiner Kallweit		compatible = "regulator-gpio";
105a3b02a1dSHeiner Kallweit
106a3b02a1dSHeiner Kallweit		regulator-name = "TF_IO";
107a3b02a1dSHeiner Kallweit		regulator-min-microvolt = <1800000>;
108a3b02a1dSHeiner Kallweit		regulator-max-microvolt = <3300000>;
109a3b02a1dSHeiner Kallweit
110a3b02a1dSHeiner Kallweit		/*
111a3b02a1dSHeiner Kallweit		 * signal name from schematics: TF_3V3N_1V8_EN
112a3b02a1dSHeiner Kallweit		 */
113a3b02a1dSHeiner Kallweit		gpios = <&gpio_ao GPIOAO_3 GPIO_ACTIVE_HIGH>;
114a3b02a1dSHeiner Kallweit		gpios-states = <0>;
115a3b02a1dSHeiner Kallweit
116a3b02a1dSHeiner Kallweit		states = <3300000 0
117a3b02a1dSHeiner Kallweit			  1800000 1>;
118a3b02a1dSHeiner Kallweit	};
119a3b02a1dSHeiner Kallweit
120a3b02a1dSHeiner Kallweit	vcc1v8: regulator-vcc1v8 {
121a3b02a1dSHeiner Kallweit		compatible = "regulator-fixed";
122a3b02a1dSHeiner Kallweit		regulator-name = "VCC1V8";
123a3b02a1dSHeiner Kallweit		regulator-min-microvolt = <1800000>;
124a3b02a1dSHeiner Kallweit		regulator-max-microvolt = <1800000>;
125a3b02a1dSHeiner Kallweit	};
126a3b02a1dSHeiner Kallweit
127a3b02a1dSHeiner Kallweit	vcc3v3: regulator-vcc3v3 {
128a3b02a1dSHeiner Kallweit		compatible = "regulator-fixed";
129a3b02a1dSHeiner Kallweit		regulator-name = "VCC3V3";
130a3b02a1dSHeiner Kallweit		regulator-min-microvolt = <3300000>;
131a3b02a1dSHeiner Kallweit		regulator-max-microvolt = <3300000>;
132a3b02a1dSHeiner Kallweit	};
133a3b02a1dSHeiner Kallweit
134a3b02a1dSHeiner Kallweit	emmc_pwrseq: emmc-pwrseq {
135a3b02a1dSHeiner Kallweit		compatible = "mmc-pwrseq-emmc";
136a3b02a1dSHeiner Kallweit		reset-gpios = <&gpio BOOT_9 GPIO_ACTIVE_LOW>;
137a3b02a1dSHeiner Kallweit	};
138a3b02a1dSHeiner Kallweit};
139a3b02a1dSHeiner Kallweit
140dd83840eSBeniamino Galvani&ethmac {
141dd83840eSBeniamino Galvani	status = "okay";
142a3b02a1dSHeiner Kallweit	pinctrl-0 = <&eth_rgmii_pins>;
143dd83840eSBeniamino Galvani	pinctrl-names = "default";
144a3b02a1dSHeiner Kallweit	phy-handle = <&eth_phy0>;
1454a63a75cSBeniamino Galvani	phy-mode = "rgmii";
1464a63a75cSBeniamino Galvani
1474a63a75cSBeniamino Galvani	snps,reset-gpio = <&gpio GPIOZ_14 0>;
1484a63a75cSBeniamino Galvani	snps,reset-delays-us = <0 10000 1000000>;
1494a63a75cSBeniamino Galvani	snps,reset-active-low;
1504a63a75cSBeniamino Galvani
1514a63a75cSBeniamino Galvani	amlogic,tx-delay-ns = <2>;
152a3b02a1dSHeiner Kallweit
153a3b02a1dSHeiner Kallweit	mdio {
154a3b02a1dSHeiner Kallweit		compatible = "snps,dwmac-mdio";
155a3b02a1dSHeiner Kallweit		#address-cells = <1>;
156a3b02a1dSHeiner Kallweit		#size-cells = <0>;
157a3b02a1dSHeiner Kallweit
158a3b02a1dSHeiner Kallweit		eth_phy0: ethernet-phy@0 {
159a3b02a1dSHeiner Kallweit			reg = <0>;
160a3b02a1dSHeiner Kallweit			eee-broken-1000t;
161a3b02a1dSHeiner Kallweit		};
162a3b02a1dSHeiner Kallweit	};
163a3b02a1dSHeiner Kallweit};
164a3b02a1dSHeiner Kallweit
165*48622156SNeil Armstrong&gpio_ao {
166*48622156SNeil Armstrong	/*
167*48622156SNeil Armstrong	 * WARNING: The USB Hub on the Odroid-C2 needs a reset signal
168*48622156SNeil Armstrong	 * to be turned high in order to be detected by the USB Controller
169*48622156SNeil Armstrong	 * This signal should be handled by a USB specific power sequence
170*48622156SNeil Armstrong	 * in order to reset the Hub when USB bus is powered down.
171*48622156SNeil Armstrong	 */
172*48622156SNeil Armstrong	usb-hub {
173*48622156SNeil Armstrong		gpio-hog;
174*48622156SNeil Armstrong		gpios = <GPIOAO_4 GPIO_ACTIVE_HIGH>;
175*48622156SNeil Armstrong		output-high;
176*48622156SNeil Armstrong		line-name = "usb-hub-reset";
177*48622156SNeil Armstrong	};
178*48622156SNeil Armstrong};
179*48622156SNeil Armstrong
180*48622156SNeil Armstrong&i2c_A {
181*48622156SNeil Armstrong	status = "okay";
182*48622156SNeil Armstrong	pinctrl-0 = <&i2c_a_pins>;
183*48622156SNeil Armstrong	pinctrl-names = "default";
184*48622156SNeil Armstrong};
185*48622156SNeil Armstrong
186*48622156SNeil Armstrong&ir {
187*48622156SNeil Armstrong	status = "okay";
188*48622156SNeil Armstrong	pinctrl-0 = <&remote_input_ao_pins>;
189*48622156SNeil Armstrong	pinctrl-names = "default";
190*48622156SNeil Armstrong};
191*48622156SNeil Armstrong
1924a63a75cSBeniamino Galvani&pinctrl_aobus {
1934a63a75cSBeniamino Galvani	gpio-line-names = "UART TX", "UART RX", "VCCK En", "TF 3V3/1V8 En",
1944a63a75cSBeniamino Galvani			  "USB HUB nRESET", "USB OTG Power En",
1954a63a75cSBeniamino Galvani			  "J7 Header Pin2", "IR In", "J7 Header Pin4",
1964a63a75cSBeniamino Galvani			  "J7 Header Pin6", "J7 Header Pin5", "J7 Header Pin7",
1974a63a75cSBeniamino Galvani			  "HDMI CEC", "SYS LED";
1984a63a75cSBeniamino Galvani};
1994a63a75cSBeniamino Galvani
2004a63a75cSBeniamino Galvani&pinctrl_periphs {
2014a63a75cSBeniamino Galvani	gpio-line-names = /* Bank GPIOZ */
2024a63a75cSBeniamino Galvani			  "Eth MDIO", "Eth MDC", "Eth RGMII RX Clk",
2034a63a75cSBeniamino Galvani			  "Eth RX DV", "Eth RX D0", "Eth RX D1", "Eth RX D2",
2044a63a75cSBeniamino Galvani			  "Eth RX D3", "Eth RGMII TX Clk", "Eth TX En",
2054a63a75cSBeniamino Galvani			  "Eth TX D0", "Eth TX D1", "Eth TX D2", "Eth TX D3",
2064a63a75cSBeniamino Galvani			  "Eth PHY nRESET", "Eth PHY Intc",
2074a63a75cSBeniamino Galvani			  /* Bank GPIOH */
2084a63a75cSBeniamino Galvani			  "HDMI HPD", "HDMI DDC SDA", "HDMI DDC SCL", "",
2094a63a75cSBeniamino Galvani			  /* Bank BOOT */
2104a63a75cSBeniamino Galvani			  "eMMC D0", "eMMC D1", "eMMC D2", "eMMC D3", "eMMC D4",
2114a63a75cSBeniamino Galvani			  "eMMC D5", "eMMC D6", "eMMC D7", "eMMC Clk",
2124a63a75cSBeniamino Galvani			  "eMMC Reset", "eMMC CMD",
2134a63a75cSBeniamino Galvani			  "", "", "", "", "", "", "",
2144a63a75cSBeniamino Galvani			  /* Bank CARD */
2154a63a75cSBeniamino Galvani			  "SDCard D1", "SDCard D0", "SDCard CLK", "SDCard CMD",
2164a63a75cSBeniamino Galvani			  "SDCard D3", "SDCard D2", "SDCard Det",
2174a63a75cSBeniamino Galvani			  /* Bank GPIODV */
2184a63a75cSBeniamino Galvani			  "", "", "", "", "", "", "", "", "", "", "", "", "",
2194a63a75cSBeniamino Galvani			  "", "", "", "", "", "", "", "", "", "", "",
2204a63a75cSBeniamino Galvani			  "I2C A SDA", "I2C A SCK", "I2C B SDA", "I2C B SCK",
2214a63a75cSBeniamino Galvani			  "PWM D", "PWM B",
2224a63a75cSBeniamino Galvani			  /* Bank GPIOY */
2234a63a75cSBeniamino Galvani			  "Revision Bit0", "Revision Bit1", "",
2244a63a75cSBeniamino Galvani			  "J2 Header Pin35", "", "", "", "J2 Header Pin36",
2254a63a75cSBeniamino Galvani			  "J2 Header Pin31", "", "", "", "TF VDD En",
2264a63a75cSBeniamino Galvani			  "J2 Header Pin32", "J2 Header Pin26", "", "",
2274a63a75cSBeniamino Galvani			  /* Bank GPIOX */
2284a63a75cSBeniamino Galvani			  "J2 Header Pin29", "J2 Header Pin24",
2294a63a75cSBeniamino Galvani			  "J2 Header Pin23", "J2 Header Pin22",
2304a63a75cSBeniamino Galvani			  "J2 Header Pin21", "J2 Header Pin18",
2314a63a75cSBeniamino Galvani			  "J2 Header Pin33", "J2 Header Pin19",
2324a63a75cSBeniamino Galvani			  "J2 Header Pin16", "J2 Header Pin15",
2334a63a75cSBeniamino Galvani			  "J2 Header Pin12", "J2 Header Pin13",
2344a63a75cSBeniamino Galvani			  "J2 Header Pin8", "J2 Header Pin10",
2354a63a75cSBeniamino Galvani			  "", "", "", "", "",
2364a63a75cSBeniamino Galvani			  "J2 Header Pin11", "", "J2 Header Pin7",
2374a63a75cSBeniamino Galvani			  /* Bank GPIOCLK */
2384a63a75cSBeniamino Galvani			  "", "", "", "",
2394a63a75cSBeniamino Galvani			  /* GPIO_TEST_N */
2404a63a75cSBeniamino Galvani			  "";
2414a63a75cSBeniamino Galvani};
2424a63a75cSBeniamino Galvani
2434a63a75cSBeniamino Galvani&saradc {
2444a63a75cSBeniamino Galvani	status = "okay";
2454a63a75cSBeniamino Galvani	vref-supply = <&vcc1v8>;
2464a63a75cSBeniamino Galvani};
2474a63a75cSBeniamino Galvani
248*48622156SNeil Armstrong&scpi_clocks {
249*48622156SNeil Armstrong	status = "disabled";
250*48622156SNeil Armstrong};
251*48622156SNeil Armstrong
252a3b02a1dSHeiner Kallweit/* SD */
253a3b02a1dSHeiner Kallweit&sd_emmc_b {
254a3b02a1dSHeiner Kallweit	status = "okay";
255a3b02a1dSHeiner Kallweit	pinctrl-0 = <&sdcard_pins>;
256a3b02a1dSHeiner Kallweit	pinctrl-names = "default";
257a3b02a1dSHeiner Kallweit
258a3b02a1dSHeiner Kallweit	bus-width = <4>;
259a3b02a1dSHeiner Kallweit	cap-sd-highspeed;
260a3b02a1dSHeiner Kallweit	max-frequency = <100000000>;
261a3b02a1dSHeiner Kallweit	disable-wp;
262a3b02a1dSHeiner Kallweit
263a3b02a1dSHeiner Kallweit	cd-gpios = <&gpio CARD_6 GPIO_ACTIVE_HIGH>;
264a3b02a1dSHeiner Kallweit	cd-inverted;
265a3b02a1dSHeiner Kallweit
266a3b02a1dSHeiner Kallweit	vmmc-supply = <&tflash_vdd>;
267a3b02a1dSHeiner Kallweit	vqmmc-supply = <&tf_io>;
268a3b02a1dSHeiner Kallweit};
269a3b02a1dSHeiner Kallweit
270a3b02a1dSHeiner Kallweit/* eMMC */
271a3b02a1dSHeiner Kallweit&sd_emmc_c {
272a3b02a1dSHeiner Kallweit	status = "okay";
273a3b02a1dSHeiner Kallweit	pinctrl-0 = <&emmc_pins>;
274a3b02a1dSHeiner Kallweit	pinctrl-names = "default";
275a3b02a1dSHeiner Kallweit
276a3b02a1dSHeiner Kallweit	bus-width = <8>;
277a3b02a1dSHeiner Kallweit	cap-sd-highspeed;
278a3b02a1dSHeiner Kallweit	max-frequency = <200000000>;
279a3b02a1dSHeiner Kallweit	non-removable;
280a3b02a1dSHeiner Kallweit	disable-wp;
281a3b02a1dSHeiner Kallweit	cap-mmc-highspeed;
282a3b02a1dSHeiner Kallweit	mmc-ddr-1_8v;
283a3b02a1dSHeiner Kallweit	mmc-hs200-1_8v;
284a3b02a1dSHeiner Kallweit
285a3b02a1dSHeiner Kallweit	mmc-pwrseq = <&emmc_pwrseq>;
286a3b02a1dSHeiner Kallweit	vmmc-supply = <&vcc3v3>;
287a3b02a1dSHeiner Kallweit	vqmmc-supply = <&vcc1v8>;
288bfcef28aSBeniamino Galvani};
289*48622156SNeil Armstrong
290*48622156SNeil Armstrong&uart_AO {
291*48622156SNeil Armstrong	status = "okay";
292*48622156SNeil Armstrong	pinctrl-0 = <&uart_ao_a_pins>;
293*48622156SNeil Armstrong	pinctrl-names = "default";
294*48622156SNeil Armstrong};
295*48622156SNeil Armstrong
296*48622156SNeil Armstrong&usb0_phy {
297*48622156SNeil Armstrong	status = "okay";
298*48622156SNeil Armstrong	phy-supply = <&usb_otg_pwr>;
299*48622156SNeil Armstrong};
300*48622156SNeil Armstrong
301*48622156SNeil Armstrong&usb1_phy {
302*48622156SNeil Armstrong	status = "okay";
303*48622156SNeil Armstrong};
304*48622156SNeil Armstrong
305*48622156SNeil Armstrong&usb0 {
306*48622156SNeil Armstrong	status = "okay";
307*48622156SNeil Armstrong};
308*48622156SNeil Armstrong
309*48622156SNeil Armstrong&usb1 {
310*48622156SNeil Armstrong	status = "okay";
311*48622156SNeil Armstrong};
312