1868e3715SJagan Teki/*
2*1caeae37SAndre Przywara * Copyright (C) 2017 Icenowy Zheng <icenowy@aosc.xyz>
3*1caeae37SAndre Przywara *
4*1caeae37SAndre Przywara * Based on sun50i-h5-orangepi-pc2.dts, which is:
5*1caeae37SAndre Przywara *   Copyright (C) 2016 ARM Ltd.
6868e3715SJagan Teki *
7868e3715SJagan Teki * This file is dual-licensed: you can use it either under the terms
8868e3715SJagan Teki * of the GPL or the X11 license, at your option. Note that this dual
9868e3715SJagan Teki * licensing only applies to this file, and not this project as a
10868e3715SJagan Teki * whole.
11868e3715SJagan Teki *
12*1caeae37SAndre Przywara *  a) This file is free software; you can redistribute it and/or
13868e3715SJagan Teki *     modify it under the terms of the GNU General Public License as
14868e3715SJagan Teki *     published by the Free Software Foundation; either version 2 of the
15868e3715SJagan Teki *     License, or (at your option) any later version.
16868e3715SJagan Teki *
17*1caeae37SAndre Przywara *     This file is distributed in the hope that it will be useful,
18868e3715SJagan Teki *     but WITHOUT ANY WARRANTY; without even the implied warranty of
19868e3715SJagan Teki *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20868e3715SJagan Teki *     GNU General Public License for more details.
21868e3715SJagan Teki *
22868e3715SJagan Teki * Or, alternatively,
23868e3715SJagan Teki *
24868e3715SJagan Teki *  b) Permission is hereby granted, free of charge, to any person
25868e3715SJagan Teki *     obtaining a copy of this software and associated documentation
26868e3715SJagan Teki *     files (the "Software"), to deal in the Software without
27868e3715SJagan Teki *     restriction, including without limitation the rights to use,
28868e3715SJagan Teki *     copy, modify, merge, publish, distribute, sublicense, and/or
29868e3715SJagan Teki *     sell copies of the Software, and to permit persons to whom the
30868e3715SJagan Teki *     Software is furnished to do so, subject to the following
31868e3715SJagan Teki *     conditions:
32868e3715SJagan Teki *
33868e3715SJagan Teki *     The above copyright notice and this permission notice shall be
34868e3715SJagan Teki *     included in all copies or substantial portions of the Software.
35868e3715SJagan Teki *
36868e3715SJagan Teki *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
37868e3715SJagan Teki *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
38868e3715SJagan Teki *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
39868e3715SJagan Teki *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
40868e3715SJagan Teki *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
41868e3715SJagan Teki *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
42868e3715SJagan Teki *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
43868e3715SJagan Teki *     OTHER DEALINGS IN THE SOFTWARE.
44868e3715SJagan Teki */
45868e3715SJagan Teki
46868e3715SJagan Teki/dts-v1/;
47868e3715SJagan Teki#include "sun50i-h5.dtsi"
48868e3715SJagan Teki
49868e3715SJagan Teki#include <dt-bindings/gpio/gpio.h>
50*1caeae37SAndre Przywara#include <dt-bindings/input/input.h>
51868e3715SJagan Teki
52868e3715SJagan Teki/ {
53*1caeae37SAndre Przywara	model = "Xunlong Orange Pi Prime";
54868e3715SJagan Teki	compatible = "xunlong,orangepi-prime", "allwinner,sun50i-h5";
55868e3715SJagan Teki
56868e3715SJagan Teki	aliases {
57*1caeae37SAndre Przywara		ethernet0 = &emac;
58868e3715SJagan Teki		serial0 = &uart0;
59868e3715SJagan Teki	};
60868e3715SJagan Teki
61868e3715SJagan Teki	chosen {
62868e3715SJagan Teki		stdout-path = "serial0:115200n8";
63868e3715SJagan Teki	};
64868e3715SJagan Teki
65*1caeae37SAndre Przywara	connector {
66*1caeae37SAndre Przywara		compatible = "hdmi-connector";
67*1caeae37SAndre Przywara		type = "a";
68*1caeae37SAndre Przywara
69*1caeae37SAndre Przywara		port {
70*1caeae37SAndre Przywara			hdmi_con_in: endpoint {
71*1caeae37SAndre Przywara				remote-endpoint = <&hdmi_out_con>;
72*1caeae37SAndre Przywara			};
73*1caeae37SAndre Przywara		};
74868e3715SJagan Teki	};
75868e3715SJagan Teki
76*1caeae37SAndre Przywara	leds {
77*1caeae37SAndre Przywara		compatible = "gpio-leds";
78*1caeae37SAndre Przywara
79*1caeae37SAndre Przywara		pwr {
80*1caeae37SAndre Przywara			label = "orangepi:green:pwr";
81*1caeae37SAndre Przywara			gpios = <&r_pio 0 10 GPIO_ACTIVE_HIGH>;
82*1caeae37SAndre Przywara			default-state = "on";
83*1caeae37SAndre Przywara		};
84*1caeae37SAndre Przywara
85*1caeae37SAndre Przywara		status {
86*1caeae37SAndre Przywara			label = "orangepi:red:status";
87*1caeae37SAndre Przywara			gpios = <&pio 0 20 GPIO_ACTIVE_HIGH>;
88*1caeae37SAndre Przywara		};
89*1caeae37SAndre Przywara	};
90*1caeae37SAndre Przywara
91*1caeae37SAndre Przywara	r-gpio-keys {
92*1caeae37SAndre Przywara		compatible = "gpio-keys";
93*1caeae37SAndre Przywara
94*1caeae37SAndre Przywara		sw4 {
95*1caeae37SAndre Przywara			label = "sw4";
96*1caeae37SAndre Przywara			linux,code = <BTN_0>;
97*1caeae37SAndre Przywara			gpios = <&r_pio 0 3 GPIO_ACTIVE_LOW>;
98*1caeae37SAndre Przywara		};
99*1caeae37SAndre Przywara	};
100*1caeae37SAndre Przywara
101*1caeae37SAndre Przywara	reg_gmac_3v3: gmac-3v3 {
102*1caeae37SAndre Przywara		compatible = "regulator-fixed";
103*1caeae37SAndre Przywara		regulator-name = "gmac-3v3";
104*1caeae37SAndre Przywara		regulator-min-microvolt = <3300000>;
105*1caeae37SAndre Przywara		regulator-max-microvolt = <3300000>;
106*1caeae37SAndre Przywara		startup-delay-us = <100000>;
107*1caeae37SAndre Przywara		enable-active-high;
108*1caeae37SAndre Przywara		gpio = <&pio 3 6 GPIO_ACTIVE_HIGH>;
109*1caeae37SAndre Przywara	};
110*1caeae37SAndre Przywara
111868e3715SJagan Teki	reg_vcc3v3: vcc3v3 {
112868e3715SJagan Teki		compatible = "regulator-fixed";
113868e3715SJagan Teki		regulator-name = "vcc3v3";
114868e3715SJagan Teki		regulator-min-microvolt = <3300000>;
115868e3715SJagan Teki		regulator-max-microvolt = <3300000>;
116868e3715SJagan Teki	};
117*1caeae37SAndre Przywara
118*1caeae37SAndre Przywara	reg_usb0_vbus: usb0-vbus {
119*1caeae37SAndre Przywara		compatible = "regulator-fixed";
120*1caeae37SAndre Przywara		regulator-name = "usb0-vbus";
121*1caeae37SAndre Przywara		regulator-min-microvolt = <5000000>;
122*1caeae37SAndre Przywara		regulator-max-microvolt = <5000000>;
123*1caeae37SAndre Przywara		enable-active-high;
124*1caeae37SAndre Przywara		gpio = <&r_pio 0 2 GPIO_ACTIVE_HIGH>; /* PL2 */
125*1caeae37SAndre Przywara		status = "okay";
126868e3715SJagan Teki	};
127*1caeae37SAndre Przywara
128*1caeae37SAndre Przywara	wifi_pwrseq: wifi_pwrseq {
129*1caeae37SAndre Przywara		compatible = "mmc-pwrseq-simple";
130*1caeae37SAndre Przywara		reset-gpios = <&pio 2 14 GPIO_ACTIVE_LOW>; /* PC14 */
131*1caeae37SAndre Przywara	};
132*1caeae37SAndre Przywara};
133*1caeae37SAndre Przywara
134*1caeae37SAndre Przywara&codec {
135*1caeae37SAndre Przywara	allwinner,audio-routing =
136*1caeae37SAndre Przywara		"Line Out", "LINEOUT",
137*1caeae37SAndre Przywara		"MIC1", "Mic",
138*1caeae37SAndre Przywara		"Mic",  "MBIAS";
139*1caeae37SAndre Przywara	status = "okay";
140*1caeae37SAndre Przywara};
141*1caeae37SAndre Przywara
142*1caeae37SAndre Przywara&de {
143*1caeae37SAndre Przywara	status = "okay";
144868e3715SJagan Teki};
145868e3715SJagan Teki
14682843d8dSJagan Teki&ehci0 {
14782843d8dSJagan Teki	status = "okay";
14882843d8dSJagan Teki};
14982843d8dSJagan Teki
15023cd00abSJagan Teki&ehci1 {
15123cd00abSJagan Teki	status = "okay";
15223cd00abSJagan Teki};
15323cd00abSJagan Teki
154*1caeae37SAndre Przywara&ehci2 {
155*1caeae37SAndre Przywara	status = "okay";
156*1caeae37SAndre Przywara};
157*1caeae37SAndre Przywara
158*1caeae37SAndre Przywara&ehci3 {
159*1caeae37SAndre Przywara	status = "okay";
160*1caeae37SAndre Przywara};
161*1caeae37SAndre Przywara
162*1caeae37SAndre Przywara&emac {
163*1caeae37SAndre Przywara	pinctrl-names = "default";
164*1caeae37SAndre Przywara	pinctrl-0 = <&emac_rgmii_pins>;
165*1caeae37SAndre Przywara	phy-supply = <&reg_gmac_3v3>;
166*1caeae37SAndre Przywara	phy-handle = <&ext_rgmii_phy>;
167*1caeae37SAndre Przywara	phy-mode = "rgmii";
168*1caeae37SAndre Przywara	status = "okay";
169*1caeae37SAndre Przywara};
170*1caeae37SAndre Przywara
171*1caeae37SAndre Przywara&external_mdio {
172*1caeae37SAndre Przywara	ext_rgmii_phy: ethernet-phy@1 {
173*1caeae37SAndre Przywara		compatible = "ethernet-phy-ieee802.3-c22";
174*1caeae37SAndre Przywara		reg = <1>;
175*1caeae37SAndre Przywara	};
176*1caeae37SAndre Przywara};
177*1caeae37SAndre Przywara
178*1caeae37SAndre Przywara&hdmi {
179*1caeae37SAndre Przywara	status = "okay";
180*1caeae37SAndre Przywara};
181*1caeae37SAndre Przywara
182*1caeae37SAndre Przywara&hdmi_out {
183*1caeae37SAndre Przywara	hdmi_out_con: endpoint {
184*1caeae37SAndre Przywara		remote-endpoint = <&hdmi_con_in>;
185*1caeae37SAndre Przywara	};
186*1caeae37SAndre Przywara};
187*1caeae37SAndre Przywara
188*1caeae37SAndre Przywara&ir {
189*1caeae37SAndre Przywara	pinctrl-names = "default";
190*1caeae37SAndre Przywara	pinctrl-0 = <&ir_pins_a>;
191*1caeae37SAndre Przywara	status = "okay";
192*1caeae37SAndre Przywara};
193*1caeae37SAndre Przywara
194868e3715SJagan Teki&mmc0 {
195868e3715SJagan Teki	vmmc-supply = <&reg_vcc3v3>;
196868e3715SJagan Teki	bus-width = <4>;
197*1caeae37SAndre Przywara	cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; /* PF6 */
198*1caeae37SAndre Przywara	status = "okay";
199*1caeae37SAndre Przywara};
200*1caeae37SAndre Przywara
201*1caeae37SAndre Przywara&mmc1 {
202*1caeae37SAndre Przywara	vmmc-supply = <&reg_vcc3v3>;
203*1caeae37SAndre Przywara	mmc-pwrseq = <&wifi_pwrseq>;
204*1caeae37SAndre Przywara	bus-width = <4>;
205*1caeae37SAndre Przywara	non-removable;
206868e3715SJagan Teki	status = "okay";
207868e3715SJagan Teki};
208868e3715SJagan Teki
20982843d8dSJagan Teki&ohci0 {
21082843d8dSJagan Teki	status = "okay";
21182843d8dSJagan Teki};
21282843d8dSJagan Teki
21323cd00abSJagan Teki&ohci1 {
21423cd00abSJagan Teki	status = "okay";
21523cd00abSJagan Teki};
21623cd00abSJagan Teki
217*1caeae37SAndre Przywara&ohci2 {
218*1caeae37SAndre Przywara	status = "okay";
219*1caeae37SAndre Przywara};
220*1caeae37SAndre Przywara
221*1caeae37SAndre Przywara&ohci3 {
222*1caeae37SAndre Przywara	status = "okay";
223*1caeae37SAndre Przywara};
224*1caeae37SAndre Przywara
225868e3715SJagan Teki&uart0 {
226868e3715SJagan Teki	pinctrl-names = "default";
227868e3715SJagan Teki	pinctrl-0 = <&uart0_pins_a>;
228868e3715SJagan Teki	status = "okay";
229868e3715SJagan Teki};
230868e3715SJagan Teki
231*1caeae37SAndre Przywara&uart1 {
232*1caeae37SAndre Przywara	pinctrl-names = "default";
233*1caeae37SAndre Przywara	pinctrl-0 = <&uart1_pins>;
234*1caeae37SAndre Przywara	status = "disabled";
235*1caeae37SAndre Przywara};
236*1caeae37SAndre Przywara
237*1caeae37SAndre Przywara&uart2 {
238*1caeae37SAndre Przywara	pinctrl-names = "default";
239*1caeae37SAndre Przywara	pinctrl-0 = <&uart2_pins>;
240*1caeae37SAndre Przywara	status = "disabled";
241*1caeae37SAndre Przywara};
242*1caeae37SAndre Przywara
24382843d8dSJagan Teki&usb_otg {
24482843d8dSJagan Teki	dr_mode = "otg";
24582843d8dSJagan Teki	status = "okay";
24682843d8dSJagan Teki};
24782843d8dSJagan Teki
248868e3715SJagan Teki&usbphy {
249*1caeae37SAndre Przywara	/* USB Type-A ports' VBUS is always on */
250*1caeae37SAndre Przywara	usb0_id_det-gpios = <&pio 0 21 GPIO_ACTIVE_HIGH>; /* PA21 */
251*1caeae37SAndre Przywara	usb0_vbus-supply = <&reg_usb0_vbus>;
252868e3715SJagan Teki	status = "okay";
253868e3715SJagan Teki};
254