1// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2/*
3 * Copyright (c) 2016 Andreas Färber
4 * Copyright (c) 2016 BayLibre, Inc.
5 * Author: Kevin Hilman <khilman@kernel.org>
6 */
7
8/dts-v1/;
9
10#include "meson-gxbb.dtsi"
11#include <dt-bindings/gpio/gpio.h>
12
13/ {
14	compatible = "hardkernel,odroid-c2", "amlogic,meson-gxbb";
15	model = "Hardkernel ODROID-C2";
16
17	aliases {
18		serial0 = &uart_AO;
19		ethernet0 = &ethmac;
20	};
21
22	chosen {
23		stdout-path = "serial0:115200n8";
24	};
25
26	memory@0 {
27		device_type = "memory";
28		reg = <0x0 0x0 0x0 0x80000000>;
29	};
30
31	usb_otg_pwr: regulator-usb-pwrs {
32		compatible = "regulator-fixed";
33
34		regulator-name = "USB_OTG_PWR";
35
36		regulator-min-microvolt = <5000000>;
37		regulator-max-microvolt = <5000000>;
38
39		/*
40		 * signal name from schematics: PWREN
41		 */
42		gpio = <&gpio_ao GPIOAO_5 GPIO_ACTIVE_HIGH>;
43		enable-active-high;
44		/*
45		 * signal name from schematics: USB_POWER
46		 */
47		vin-supply = <&p5v0>;
48	};
49
50	leds {
51		compatible = "gpio-leds";
52		blue {
53			label = "c2:blue:alive";
54			gpios = <&gpio_ao GPIOAO_13 GPIO_ACTIVE_LOW>;
55			linux,default-trigger = "heartbeat";
56			default-state = "off";
57		};
58	};
59
60	p5v0: regulator-p5v0 {
61		compatible = "regulator-fixed";
62
63		regulator-name = "P5V0";
64		regulator-min-microvolt = <5000000>;
65		regulator-max-microvolt = <5000000>;
66		regulator-always-on;
67	};
68
69	hdmi_p5v0: regulator-hdmi_p5v0 {
70		compatible = "regulator-fixed";
71		regulator-name = "HDMI_P5V0";
72		regulator-min-microvolt = <5000000>;
73		regulator-max-microvolt = <5000000>;
74		/* AP2331SA-7 */
75		vin-supply = <&p5v0>;
76	};
77
78	tflash_vdd: regulator-tflash_vdd {
79		compatible = "regulator-fixed";
80
81		regulator-name = "TFLASH_VDD";
82		regulator-min-microvolt = <3300000>;
83		regulator-max-microvolt = <3300000>;
84
85		/*
86		 * signal name from schematics: TFLASH_VDD_EN
87		 */
88		gpio = <&gpio GPIOY_12 GPIO_ACTIVE_HIGH>;
89		enable-active-high;
90		/* U16 RT9179GB */
91		vin-supply = <&vddio_ao3v3>;
92	};
93
94	tf_io: gpio-regulator-tf_io {
95		compatible = "regulator-gpio";
96
97		regulator-name = "TF_IO";
98		regulator-min-microvolt = <1800000>;
99		regulator-max-microvolt = <3300000>;
100
101		/*
102		 * signal name from schematics: TF_3V3N_1V8_EN
103		 */
104		gpios = <&gpio_ao GPIOAO_3 GPIO_ACTIVE_HIGH>;
105		gpios-states = <0>;
106
107		states = <3300000 0>,
108			 <1800000 1>;
109		/* U12/U13 RT9179GB */
110		vin-supply = <&vddio_ao3v3>;
111	};
112
113	vcc1v8: regulator-vcc1v8 {
114		compatible = "regulator-fixed";
115		regulator-name = "VCC1V8";
116		regulator-min-microvolt = <1800000>;
117		regulator-max-microvolt = <1800000>;
118		regulator-always-on;
119		/* U18 RT9179GB */
120		vin-supply = <&vddio_ao3v3>;
121	};
122
123	vcc3v3: regulator-vcc3v3 {
124		compatible = "regulator-fixed";
125		regulator-name = "VCC3V3";
126		regulator-min-microvolt = <3300000>;
127		regulator-max-microvolt = <3300000>;
128	};
129
130	vddio_ao1v8: regulator-vddio-ao1v8 {
131		compatible = "regulator-fixed";
132		regulator-name = "VDDIO_AO1V8";
133		regulator-min-microvolt = <1800000>;
134		regulator-max-microvolt = <1800000>;
135		regulator-always-on;
136		/* U17 RT9179GB */
137		vin-supply = <&p5v0>;
138	};
139
140	vddio_ao3v3: regulator-vddio-ao3v3 {
141		compatible = "regulator-fixed";
142		regulator-name = "VDDIO_AO3V3";
143		regulator-min-microvolt = <3300000>;
144		regulator-max-microvolt = <3300000>;
145		regulator-always-on;
146		/* U11 MP2161GJ-C499 */
147		vin-supply = <&p5v0>;
148	};
149
150	ddr3_1v5: regulator-ddr3_1v5 {
151		compatible = "regulator-fixed";
152		regulator-name = "DDR3_1V5";
153		regulator-min-microvolt = <1500000>;
154		regulator-max-microvolt = <1500000>;
155		regulator-always-on;
156		/* U15 MP2161GJ-C499 */
157		vin-supply = <&p5v0>;
158	};
159
160	emmc_pwrseq: emmc-pwrseq {
161		compatible = "mmc-pwrseq-emmc";
162		reset-gpios = <&gpio BOOT_9 GPIO_ACTIVE_LOW>;
163	};
164
165	hdmi-connector {
166		compatible = "hdmi-connector";
167		type = "a";
168
169		port {
170			hdmi_connector_in: endpoint {
171				remote-endpoint = <&hdmi_tx_tmds_out>;
172			};
173		};
174	};
175};
176
177&cec_AO {
178	status = "okay";
179	pinctrl-0 = <&ao_cec_pins>;
180	pinctrl-names = "default";
181	hdmi-phandle = <&hdmi_tx>;
182};
183
184&ethmac {
185	status = "okay";
186	pinctrl-0 = <&eth_rgmii_pins>;
187	pinctrl-names = "default";
188	phy-handle = <&eth_phy0>;
189	phy-mode = "rgmii";
190
191	amlogic,tx-delay-ns = <2>;
192
193	mdio {
194		compatible = "snps,dwmac-mdio";
195		#address-cells = <1>;
196		#size-cells = <0>;
197
198		eth_phy0: ethernet-phy@0 {
199			/* Realtek RTL8211F (0x001cc916) */
200			reg = <0>;
201
202			reset-assert-us = <10000>;
203			reset-deassert-us = <30000>;
204			reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>;
205
206			interrupt-parent = <&gpio_intc>;
207			/* MAC_INTR on GPIOZ_15 */
208			interrupts = <29 IRQ_TYPE_LEVEL_LOW>;
209		};
210	};
211};
212
213&gpio_ao {
214	/*
215	 * WARNING: The USB Hub on the Odroid-C2 needs a reset signal
216	 * to be turned high in order to be detected by the USB Controller
217	 * This signal should be handled by a USB specific power sequence
218	 * in order to reset the Hub when USB bus is powered down.
219	 */
220	usb-hub {
221		gpio-hog;
222		gpios = <GPIOAO_4 GPIO_ACTIVE_HIGH>;
223		output-high;
224		line-name = "usb-hub-reset";
225	};
226};
227
228&hdmi_tx {
229	status = "okay";
230	pinctrl-0 = <&hdmi_hpd_pins>, <&hdmi_i2c_pins>;
231	pinctrl-names = "default";
232	hdmi-supply = <&hdmi_p5v0>;
233};
234
235&hdmi_tx_tmds_port {
236	hdmi_tx_tmds_out: endpoint {
237		remote-endpoint = <&hdmi_connector_in>;
238	};
239};
240
241&i2c_A {
242	status = "okay";
243	pinctrl-0 = <&i2c_a_pins>;
244	pinctrl-names = "default";
245};
246
247&ir {
248	status = "okay";
249	pinctrl-0 = <&remote_input_ao_pins>;
250	pinctrl-names = "default";
251};
252
253&gpio_ao {
254	gpio-line-names = "UART TX", "UART RX", "VCCK En", "TF 3V3/1V8 En",
255			  "USB HUB nRESET", "USB OTG Power En",
256			  "J7 Header Pin2", "IR In", "J7 Header Pin4",
257			  "J7 Header Pin6", "J7 Header Pin5", "J7 Header Pin7",
258			  "HDMI CEC", "SYS LED",
259			  /* GPIO_TEST_N */
260			  "";
261};
262
263&gpio {
264	gpio-line-names = /* Bank GPIOZ */
265			  "Eth MDIO", "Eth MDC", "Eth RGMII RX Clk",
266			  "Eth RX DV", "Eth RX D0", "Eth RX D1", "Eth RX D2",
267			  "Eth RX D3", "Eth RGMII TX Clk", "Eth TX En",
268			  "Eth TX D0", "Eth TX D1", "Eth TX D2", "Eth TX D3",
269			  "Eth PHY nRESET", "Eth PHY Intc",
270			  /* Bank GPIOH */
271			  "HDMI HPD", "HDMI DDC SDA", "HDMI DDC SCL", "",
272			  /* Bank BOOT */
273			  "eMMC D0", "eMMC D1", "eMMC D2", "eMMC D3", "eMMC D4",
274			  "eMMC D5", "eMMC D6", "eMMC D7", "eMMC Clk",
275			  "eMMC Reset", "eMMC CMD",
276			  "", "", "", "", "", "", "",
277			  /* Bank CARD */
278			  "SDCard D1", "SDCard D0", "SDCard CLK", "SDCard CMD",
279			  "SDCard D3", "SDCard D2", "SDCard Det",
280			  /* Bank GPIODV */
281			  "", "", "", "", "", "", "", "", "", "", "", "", "",
282			  "", "", "", "", "", "", "", "", "", "", "",
283			  "I2C A SDA", "I2C A SCK", "I2C B SDA", "I2C B SCK",
284			  "PWM D", "PWM B",
285			  /* Bank GPIOY */
286			  "Revision Bit0", "Revision Bit1", "",
287			  "J2 Header Pin35", "", "", "", "J2 Header Pin36",
288			  "J2 Header Pin31", "", "", "", "TF VDD En",
289			  "J2 Header Pin32", "J2 Header Pin26", "", "",
290			  /* Bank GPIOX */
291			  "J2 Header Pin29", "J2 Header Pin24",
292			  "J2 Header Pin23", "J2 Header Pin22",
293			  "J2 Header Pin21", "J2 Header Pin18",
294			  "J2 Header Pin33", "J2 Header Pin19",
295			  "J2 Header Pin16", "J2 Header Pin15",
296			  "J2 Header Pin12", "J2 Header Pin13",
297			  "J2 Header Pin8", "J2 Header Pin10",
298			  "", "", "", "", "",
299			  "J2 Header Pin11", "", "J2 Header Pin7", "",
300			  /* Bank GPIOCLK */
301			  "", "", "", "";
302};
303
304&saradc {
305	status = "okay";
306	vref-supply = <&vcc1v8>;
307};
308
309&scpi_clocks {
310	status = "disabled";
311};
312
313/* SD */
314&sd_emmc_b {
315	status = "okay";
316	pinctrl-0 = <&sdcard_pins>;
317	pinctrl-1 = <&sdcard_clk_gate_pins>;
318	pinctrl-names = "default", "clk-gate";
319
320	bus-width = <4>;
321	cap-sd-highspeed;
322	sd-uhs-sdr12;
323	sd-uhs-sdr25;
324	sd-uhs-sdr50;
325	sd-uhs-ddr50;
326	max-frequency = <100000000>;
327	disable-wp;
328
329	cd-gpios = <&gpio CARD_6 GPIO_ACTIVE_LOW>;
330
331	vmmc-supply = <&tflash_vdd>;
332	vqmmc-supply = <&tf_io>;
333};
334
335/* eMMC */
336&sd_emmc_c {
337	status = "okay";
338	pinctrl-0 = <&emmc_pins>, <&emmc_ds_pins>;
339	pinctrl-1 = <&emmc_clk_gate_pins>;
340	pinctrl-names = "default", "clk-gate";
341
342	bus-width = <8>;
343	max-frequency = <200000000>;
344	non-removable;
345	disable-wp;
346	cap-mmc-highspeed;
347	mmc-ddr-1_8v;
348	mmc-hs200-1_8v;
349
350	mmc-pwrseq = <&emmc_pwrseq>;
351	vmmc-supply = <&vcc3v3>;
352	vqmmc-supply = <&vcc1v8>;
353};
354
355&uart_AO {
356	status = "okay";
357	pinctrl-0 = <&uart_ao_a_pins>;
358	pinctrl-names = "default";
359};
360
361&usb0_phy {
362	status = "disabled";
363	phy-supply = <&usb_otg_pwr>;
364};
365
366&usb1_phy {
367	status = "okay";
368	phy-supply = <&usb_otg_pwr>;
369};
370
371&usb0 {
372	status = "disabled";
373};
374
375&usb1 {
376	status = "okay";
377};
378