1*5b3da7faSNeil Armstrong// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2bfcef28aSBeniamino Galvani/*
3bfcef28aSBeniamino Galvani * Copyright (c) 2016 Andreas Färber
4bfcef28aSBeniamino Galvani * Copyright (c) 2016 BayLibre, Inc.
5bfcef28aSBeniamino Galvani * Author: Kevin Hilman <khilman@kernel.org>
6bfcef28aSBeniamino Galvani */
7bfcef28aSBeniamino Galvani
8bfcef28aSBeniamino Galvani/dts-v1/;
9bfcef28aSBeniamino Galvani
10bfcef28aSBeniamino Galvani#include "meson-gxbb.dtsi"
11dd83840eSBeniamino Galvani#include <dt-bindings/gpio/gpio.h>
12bfcef28aSBeniamino Galvani
13bfcef28aSBeniamino Galvani/ {
14bfcef28aSBeniamino Galvani	compatible = "hardkernel,odroid-c2", "amlogic,meson-gxbb";
15bfcef28aSBeniamino Galvani	model = "Hardkernel ODROID-C2";
16bfcef28aSBeniamino Galvani
17bfcef28aSBeniamino Galvani	aliases {
18bfcef28aSBeniamino Galvani		serial0 = &uart_AO;
19*5b3da7faSNeil Armstrong		ethernet0 = &ethmac;
20bfcef28aSBeniamino Galvani	};
21bfcef28aSBeniamino Galvani
22bfcef28aSBeniamino Galvani	chosen {
23bfcef28aSBeniamino Galvani		stdout-path = "serial0:115200n8";
24bfcef28aSBeniamino Galvani	};
25bfcef28aSBeniamino Galvani
26bfcef28aSBeniamino Galvani	memory@0 {
27bfcef28aSBeniamino Galvani		device_type = "memory";
28bfcef28aSBeniamino Galvani		reg = <0x0 0x0 0x0 0x80000000>;
29bfcef28aSBeniamino Galvani	};
30dd83840eSBeniamino Galvani
31a3b02a1dSHeiner Kallweit	usb_otg_pwr: regulator-usb-pwrs {
32a3b02a1dSHeiner Kallweit		compatible = "regulator-fixed";
33a3b02a1dSHeiner Kallweit
34a3b02a1dSHeiner Kallweit		regulator-name = "USB_OTG_PWR";
35a3b02a1dSHeiner Kallweit
36a3b02a1dSHeiner Kallweit		regulator-min-microvolt = <5000000>;
37a3b02a1dSHeiner Kallweit		regulator-max-microvolt = <5000000>;
38a3b02a1dSHeiner Kallweit
39a3b02a1dSHeiner Kallweit		gpio = <&gpio_ao GPIOAO_5 GPIO_ACTIVE_HIGH>;
40a3b02a1dSHeiner Kallweit		enable-active-high;
41a3b02a1dSHeiner Kallweit	};
42a3b02a1dSHeiner Kallweit
43dd83840eSBeniamino Galvani	leds {
44dd83840eSBeniamino Galvani		compatible = "gpio-leds";
45dd83840eSBeniamino Galvani		blue {
46dd83840eSBeniamino Galvani			label = "c2:blue:alive";
47dd83840eSBeniamino Galvani			gpios = <&gpio_ao GPIOAO_13 GPIO_ACTIVE_LOW>;
48dd83840eSBeniamino Galvani			linux,default-trigger = "heartbeat";
49dd83840eSBeniamino Galvani			default-state = "off";
50dd83840eSBeniamino Galvani		};
51dd83840eSBeniamino Galvani	};
52a3b02a1dSHeiner Kallweit
53a3b02a1dSHeiner Kallweit	tflash_vdd: regulator-tflash_vdd {
54a3b02a1dSHeiner Kallweit		/*
55a3b02a1dSHeiner Kallweit		 * signal name from schematics: TFLASH_VDD_EN
56a3b02a1dSHeiner Kallweit		 */
57a3b02a1dSHeiner Kallweit		compatible = "regulator-fixed";
58a3b02a1dSHeiner Kallweit
59a3b02a1dSHeiner Kallweit		regulator-name = "TFLASH_VDD";
60a3b02a1dSHeiner Kallweit		regulator-min-microvolt = <3300000>;
61a3b02a1dSHeiner Kallweit		regulator-max-microvolt = <3300000>;
62a3b02a1dSHeiner Kallweit
634a63a75cSBeniamino Galvani		gpio = <&gpio GPIOY_12 GPIO_ACTIVE_HIGH>;
64a3b02a1dSHeiner Kallweit		enable-active-high;
65a3b02a1dSHeiner Kallweit	};
66a3b02a1dSHeiner Kallweit
67a3b02a1dSHeiner Kallweit	tf_io: gpio-regulator-tf_io {
68a3b02a1dSHeiner Kallweit		compatible = "regulator-gpio";
69a3b02a1dSHeiner Kallweit
70a3b02a1dSHeiner Kallweit		regulator-name = "TF_IO";
71a3b02a1dSHeiner Kallweit		regulator-min-microvolt = <1800000>;
72a3b02a1dSHeiner Kallweit		regulator-max-microvolt = <3300000>;
73a3b02a1dSHeiner Kallweit
74a3b02a1dSHeiner Kallweit		/*
75a3b02a1dSHeiner Kallweit		 * signal name from schematics: TF_3V3N_1V8_EN
76a3b02a1dSHeiner Kallweit		 */
77a3b02a1dSHeiner Kallweit		gpios = <&gpio_ao GPIOAO_3 GPIO_ACTIVE_HIGH>;
78a3b02a1dSHeiner Kallweit		gpios-states = <0>;
79a3b02a1dSHeiner Kallweit
80a3b02a1dSHeiner Kallweit		states = <3300000 0
81a3b02a1dSHeiner Kallweit			  1800000 1>;
82a3b02a1dSHeiner Kallweit	};
83a3b02a1dSHeiner Kallweit
84a3b02a1dSHeiner Kallweit	vcc1v8: regulator-vcc1v8 {
85a3b02a1dSHeiner Kallweit		compatible = "regulator-fixed";
86a3b02a1dSHeiner Kallweit		regulator-name = "VCC1V8";
87a3b02a1dSHeiner Kallweit		regulator-min-microvolt = <1800000>;
88a3b02a1dSHeiner Kallweit		regulator-max-microvolt = <1800000>;
89a3b02a1dSHeiner Kallweit	};
90a3b02a1dSHeiner Kallweit
91a3b02a1dSHeiner Kallweit	vcc3v3: regulator-vcc3v3 {
92a3b02a1dSHeiner Kallweit		compatible = "regulator-fixed";
93a3b02a1dSHeiner Kallweit		regulator-name = "VCC3V3";
94a3b02a1dSHeiner Kallweit		regulator-min-microvolt = <3300000>;
95a3b02a1dSHeiner Kallweit		regulator-max-microvolt = <3300000>;
96a3b02a1dSHeiner Kallweit	};
97a3b02a1dSHeiner Kallweit
98a3b02a1dSHeiner Kallweit	emmc_pwrseq: emmc-pwrseq {
99a3b02a1dSHeiner Kallweit		compatible = "mmc-pwrseq-emmc";
100a3b02a1dSHeiner Kallweit		reset-gpios = <&gpio BOOT_9 GPIO_ACTIVE_LOW>;
101a3b02a1dSHeiner Kallweit	};
1027d750c35SNeil Armstrong
1037d750c35SNeil Armstrong	hdmi-connector {
1047d750c35SNeil Armstrong		compatible = "hdmi-connector";
1057d750c35SNeil Armstrong		type = "a";
1067d750c35SNeil Armstrong
1077d750c35SNeil Armstrong		port {
1087d750c35SNeil Armstrong			hdmi_connector_in: endpoint {
1097d750c35SNeil Armstrong				remote-endpoint = <&hdmi_tx_tmds_out>;
1107d750c35SNeil Armstrong			};
1117d750c35SNeil Armstrong		};
1127d750c35SNeil Armstrong	};
1137d750c35SNeil Armstrong};
1147d750c35SNeil Armstrong
1157d750c35SNeil Armstrong&cec_AO {
1167d750c35SNeil Armstrong	status = "okay";
1177d750c35SNeil Armstrong	pinctrl-0 = <&ao_cec_pins>;
1187d750c35SNeil Armstrong	pinctrl-names = "default";
1197d750c35SNeil Armstrong	hdmi-phandle = <&hdmi_tx>;
120a3b02a1dSHeiner Kallweit};
121a3b02a1dSHeiner Kallweit
122dd83840eSBeniamino Galvani&ethmac {
123dd83840eSBeniamino Galvani	status = "okay";
124a3b02a1dSHeiner Kallweit	pinctrl-0 = <&eth_rgmii_pins>;
125dd83840eSBeniamino Galvani	pinctrl-names = "default";
126a3b02a1dSHeiner Kallweit	phy-handle = <&eth_phy0>;
1274a63a75cSBeniamino Galvani	phy-mode = "rgmii";
1284a63a75cSBeniamino Galvani
1294a63a75cSBeniamino Galvani	snps,reset-gpio = <&gpio GPIOZ_14 0>;
1304a63a75cSBeniamino Galvani	snps,reset-delays-us = <0 10000 1000000>;
1314a63a75cSBeniamino Galvani	snps,reset-active-low;
1324a63a75cSBeniamino Galvani
1334a63a75cSBeniamino Galvani	amlogic,tx-delay-ns = <2>;
134a3b02a1dSHeiner Kallweit
135a3b02a1dSHeiner Kallweit	mdio {
136a3b02a1dSHeiner Kallweit		compatible = "snps,dwmac-mdio";
137a3b02a1dSHeiner Kallweit		#address-cells = <1>;
138a3b02a1dSHeiner Kallweit		#size-cells = <0>;
139a3b02a1dSHeiner Kallweit
140a3b02a1dSHeiner Kallweit		eth_phy0: ethernet-phy@0 {
1417d750c35SNeil Armstrong			/* Realtek RTL8211F (0x001cc916) */
142a3b02a1dSHeiner Kallweit			reg = <0>;
1437d750c35SNeil Armstrong			interrupt-parent = <&gpio_intc>;
1447d750c35SNeil Armstrong			/* MAC_INTR on GPIOZ_15 */
1457d750c35SNeil Armstrong			interrupts = <29 IRQ_TYPE_LEVEL_LOW>;
146a3b02a1dSHeiner Kallweit			eee-broken-1000t;
147a3b02a1dSHeiner Kallweit		};
148a3b02a1dSHeiner Kallweit	};
149a3b02a1dSHeiner Kallweit};
150a3b02a1dSHeiner Kallweit
15148622156SNeil Armstrong&gpio_ao {
15248622156SNeil Armstrong	/*
15348622156SNeil Armstrong	 * WARNING: The USB Hub on the Odroid-C2 needs a reset signal
15448622156SNeil Armstrong	 * to be turned high in order to be detected by the USB Controller
15548622156SNeil Armstrong	 * This signal should be handled by a USB specific power sequence
15648622156SNeil Armstrong	 * in order to reset the Hub when USB bus is powered down.
15748622156SNeil Armstrong	 */
15848622156SNeil Armstrong	usb-hub {
15948622156SNeil Armstrong		gpio-hog;
16048622156SNeil Armstrong		gpios = <GPIOAO_4 GPIO_ACTIVE_HIGH>;
16148622156SNeil Armstrong		output-high;
16248622156SNeil Armstrong		line-name = "usb-hub-reset";
16348622156SNeil Armstrong	};
16448622156SNeil Armstrong};
16548622156SNeil Armstrong
1667d750c35SNeil Armstrong&hdmi_tx {
1677d750c35SNeil Armstrong	status = "okay";
1687d750c35SNeil Armstrong	pinctrl-0 = <&hdmi_hpd_pins>, <&hdmi_i2c_pins>;
1697d750c35SNeil Armstrong	pinctrl-names = "default";
1707d750c35SNeil Armstrong};
1717d750c35SNeil Armstrong
1727d750c35SNeil Armstrong&hdmi_tx_tmds_port {
1737d750c35SNeil Armstrong	hdmi_tx_tmds_out: endpoint {
1747d750c35SNeil Armstrong		remote-endpoint = <&hdmi_connector_in>;
1757d750c35SNeil Armstrong	};
1767d750c35SNeil Armstrong};
1777d750c35SNeil Armstrong
17848622156SNeil Armstrong&i2c_A {
17948622156SNeil Armstrong	status = "okay";
18048622156SNeil Armstrong	pinctrl-0 = <&i2c_a_pins>;
18148622156SNeil Armstrong	pinctrl-names = "default";
18248622156SNeil Armstrong};
18348622156SNeil Armstrong
18448622156SNeil Armstrong&ir {
18548622156SNeil Armstrong	status = "okay";
18648622156SNeil Armstrong	pinctrl-0 = <&remote_input_ao_pins>;
18748622156SNeil Armstrong	pinctrl-names = "default";
18848622156SNeil Armstrong};
18948622156SNeil Armstrong
1904a63a75cSBeniamino Galvani&pinctrl_aobus {
1914a63a75cSBeniamino Galvani	gpio-line-names = "UART TX", "UART RX", "VCCK En", "TF 3V3/1V8 En",
1924a63a75cSBeniamino Galvani			  "USB HUB nRESET", "USB OTG Power En",
1934a63a75cSBeniamino Galvani			  "J7 Header Pin2", "IR In", "J7 Header Pin4",
1944a63a75cSBeniamino Galvani			  "J7 Header Pin6", "J7 Header Pin5", "J7 Header Pin7",
1957d750c35SNeil Armstrong			  "HDMI CEC", "SYS LED",
1967d750c35SNeil Armstrong			  /* GPIO_TEST_N */
1977d750c35SNeil Armstrong			  "";
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			  "", "", "", "", "",
2367d750c35SNeil Armstrong			  "J2 Header Pin11", "", "J2 Header Pin7", "",
2374a63a75cSBeniamino Galvani			  /* Bank GPIOCLK */
2387d750c35SNeil Armstrong			  "", "", "", "";
2394a63a75cSBeniamino Galvani};
2404a63a75cSBeniamino Galvani
2414a63a75cSBeniamino Galvani&saradc {
2424a63a75cSBeniamino Galvani	status = "okay";
2434a63a75cSBeniamino Galvani	vref-supply = <&vcc1v8>;
2444a63a75cSBeniamino Galvani};
2454a63a75cSBeniamino Galvani
24648622156SNeil Armstrong&scpi_clocks {
24748622156SNeil Armstrong	status = "disabled";
24848622156SNeil Armstrong};
24948622156SNeil Armstrong
250a3b02a1dSHeiner Kallweit/* SD */
251a3b02a1dSHeiner Kallweit&sd_emmc_b {
252a3b02a1dSHeiner Kallweit	status = "okay";
253a3b02a1dSHeiner Kallweit	pinctrl-0 = <&sdcard_pins>;
2547d750c35SNeil Armstrong	pinctrl-1 = <&sdcard_clk_gate_pins>;
2557d750c35SNeil Armstrong	pinctrl-names = "default", "clk-gate";
256a3b02a1dSHeiner Kallweit
257a3b02a1dSHeiner Kallweit	bus-width = <4>;
258a3b02a1dSHeiner Kallweit	cap-sd-highspeed;
259a3b02a1dSHeiner Kallweit	max-frequency = <100000000>;
260a3b02a1dSHeiner Kallweit	disable-wp;
261a3b02a1dSHeiner Kallweit
262a3b02a1dSHeiner Kallweit	cd-gpios = <&gpio CARD_6 GPIO_ACTIVE_HIGH>;
263a3b02a1dSHeiner Kallweit	cd-inverted;
264a3b02a1dSHeiner Kallweit
265a3b02a1dSHeiner Kallweit	vmmc-supply = <&tflash_vdd>;
266a3b02a1dSHeiner Kallweit	vqmmc-supply = <&tf_io>;
267a3b02a1dSHeiner Kallweit};
268a3b02a1dSHeiner Kallweit
269a3b02a1dSHeiner Kallweit/* eMMC */
270a3b02a1dSHeiner Kallweit&sd_emmc_c {
271a3b02a1dSHeiner Kallweit	status = "okay";
2727d750c35SNeil Armstrong	pinctrl-0 = <&emmc_pins>, <&emmc_ds_pins>;
2737d750c35SNeil Armstrong	pinctrl-1 = <&emmc_clk_gate_pins>;
2747d750c35SNeil Armstrong	pinctrl-names = "default", "clk-gate";
275a3b02a1dSHeiner Kallweit
276a3b02a1dSHeiner Kallweit	bus-width = <8>;
277*5b3da7faSNeil Armstrong	max-frequency = <100000000>;
278a3b02a1dSHeiner Kallweit	non-removable;
279a3b02a1dSHeiner Kallweit	disable-wp;
280a3b02a1dSHeiner Kallweit	cap-mmc-highspeed;
281a3b02a1dSHeiner Kallweit	mmc-ddr-1_8v;
282a3b02a1dSHeiner Kallweit	mmc-hs200-1_8v;
283a3b02a1dSHeiner Kallweit
284a3b02a1dSHeiner Kallweit	mmc-pwrseq = <&emmc_pwrseq>;
285a3b02a1dSHeiner Kallweit	vmmc-supply = <&vcc3v3>;
286a3b02a1dSHeiner Kallweit	vqmmc-supply = <&vcc1v8>;
287bfcef28aSBeniamino Galvani};
28848622156SNeil Armstrong
28948622156SNeil Armstrong&uart_AO {
29048622156SNeil Armstrong	status = "okay";
29148622156SNeil Armstrong	pinctrl-0 = <&uart_ao_a_pins>;
29248622156SNeil Armstrong	pinctrl-names = "default";
29348622156SNeil Armstrong};
29448622156SNeil Armstrong
29548622156SNeil Armstrong&usb0_phy {
29648622156SNeil Armstrong	status = "okay";
29748622156SNeil Armstrong	phy-supply = <&usb_otg_pwr>;
29848622156SNeil Armstrong};
29948622156SNeil Armstrong
30048622156SNeil Armstrong&usb1_phy {
30148622156SNeil Armstrong	status = "okay";
3027d750c35SNeil Armstrong	phy-supply = <&usb_otg_pwr>;
30348622156SNeil Armstrong};
30448622156SNeil Armstrong
30548622156SNeil Armstrong&usb0 {
30648622156SNeil Armstrong	status = "okay";
30748622156SNeil Armstrong};
30848622156SNeil Armstrong
30948622156SNeil Armstrong&usb1 {
31048622156SNeil Armstrong	status = "okay";
31148622156SNeil Armstrong};
312