1b4b8f2c9SClément Péron// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2bdecc9cbSJagan Teki/*
3bdecc9cbSJagan Teki * Copyright (C) 2017 Jagan Teki <jteki@openedev.com>
493d6a27cSSamuel Holland * Copyright (C) 2017-2018 Samuel Holland <samuel@sholland.org>
5bdecc9cbSJagan Teki */
6bdecc9cbSJagan Teki
7bdecc9cbSJagan Teki/dts-v1/;
8bdecc9cbSJagan Teki
9bdecc9cbSJagan Teki#include "sun50i-a64.dtsi"
10bdecc9cbSJagan Teki
11bdecc9cbSJagan Teki#include <dt-bindings/gpio/gpio.h>
12bdecc9cbSJagan Teki
13bdecc9cbSJagan Teki/ {
14bdecc9cbSJagan Teki	model = "OrangePi Win/Win Plus";
15bdecc9cbSJagan Teki	compatible = "xunlong,orangepi-win", "allwinner,sun50i-a64";
16bdecc9cbSJagan Teki
17bdecc9cbSJagan Teki	aliases {
1893d6a27cSSamuel Holland		ethernet0 = &emac;
19bdecc9cbSJagan Teki		serial0 = &uart0;
2013b31e6bSSamuel Holland		serial1 = &uart1;
2113b31e6bSSamuel Holland		serial2 = &uart2;
2213b31e6bSSamuel Holland		serial3 = &uart3;
2313b31e6bSSamuel Holland		serial4 = &uart4;
24bdecc9cbSJagan Teki	};
25bdecc9cbSJagan Teki
26bdecc9cbSJagan Teki	chosen {
27bdecc9cbSJagan Teki		stdout-path = "serial0:115200n8";
28bdecc9cbSJagan Teki	};
293131cfb6SSamuel Holland
30f4e4453aSJagan Teki	hdmi-connector {
31f4e4453aSJagan Teki		compatible = "hdmi-connector";
32f4e4453aSJagan Teki		type = "a";
33f4e4453aSJagan Teki
34f4e4453aSJagan Teki		port {
35f4e4453aSJagan Teki			hdmi_con_in: endpoint {
36f4e4453aSJagan Teki				remote-endpoint = <&hdmi_out_con>;
37f4e4453aSJagan Teki			};
38f4e4453aSJagan Teki		};
39f4e4453aSJagan Teki	};
40f4e4453aSJagan Teki
41e71cc560SSamuel Holland	leds {
42e71cc560SSamuel Holland		compatible = "gpio-leds";
43e71cc560SSamuel Holland
44e71cc560SSamuel Holland		status {
45e71cc560SSamuel Holland			label = "orangepi:green:status";
46e71cc560SSamuel Holland			gpios = <&pio 7 11 GPIO_ACTIVE_HIGH>; /* PH11 */
47e71cc560SSamuel Holland		};
48e71cc560SSamuel Holland	};
49e71cc560SSamuel Holland
5093d6a27cSSamuel Holland	reg_gmac_3v3: gmac-3v3 {
5193d6a27cSSamuel Holland		compatible = "regulator-fixed";
5293d6a27cSSamuel Holland		regulator-name = "gmac-3v3";
5393d6a27cSSamuel Holland		regulator-min-microvolt = <3300000>;
5493d6a27cSSamuel Holland		regulator-max-microvolt = <3300000>;
5593d6a27cSSamuel Holland		regulator-boot-on;
5693d6a27cSSamuel Holland		enable-active-high;
5793d6a27cSSamuel Holland		gpio = <&pio 3 14 GPIO_ACTIVE_HIGH>; /* PD14 */
5893d6a27cSSamuel Holland		status = "okay";
5993d6a27cSSamuel Holland	};
6093d6a27cSSamuel Holland
613131cfb6SSamuel Holland	reg_usb1_vbus: usb1-vbus {
623131cfb6SSamuel Holland		compatible = "regulator-fixed";
633131cfb6SSamuel Holland		regulator-name = "usb1-vbus";
643131cfb6SSamuel Holland		regulator-min-microvolt = <5000000>;
653131cfb6SSamuel Holland		regulator-max-microvolt = <5000000>;
663131cfb6SSamuel Holland		regulator-boot-on;
673131cfb6SSamuel Holland		enable-active-high;
683131cfb6SSamuel Holland		gpio = <&pio 3 7 GPIO_ACTIVE_HIGH>; /* PD7 */
693131cfb6SSamuel Holland		status = "okay";
703131cfb6SSamuel Holland	};
7164971e5aSSamuel Holland
7264971e5aSSamuel Holland	wifi_pwrseq: wifi_pwrseq {
7364971e5aSSamuel Holland		compatible = "mmc-pwrseq-simple";
7464971e5aSSamuel Holland		reset-gpios = <&r_pio 0 8 GPIO_ACTIVE_LOW>; /* PL8 */
7585c6faddSJernej Skrabec		clocks = <&rtc 1>;
7685c6faddSJernej Skrabec		clock-names = "ext_clock";
7764971e5aSSamuel Holland	};
78bdecc9cbSJagan Teki};
79bdecc9cbSJagan Teki
806db1aaf4SJernej Skrabec&codec {
816db1aaf4SJernej Skrabec	status = "okay";
826db1aaf4SJernej Skrabec};
836db1aaf4SJernej Skrabec
846db1aaf4SJernej Skrabec&codec_analog {
856db1aaf4SJernej Skrabec	cpvdd-supply = <&reg_eldo1>;
866db1aaf4SJernej Skrabec	status = "okay";
876db1aaf4SJernej Skrabec};
886db1aaf4SJernej Skrabec
896db1aaf4SJernej Skrabec&dai {
906db1aaf4SJernej Skrabec	status = "okay";
916db1aaf4SJernej Skrabec};
926db1aaf4SJernej Skrabec
93f4e4453aSJagan Teki&de {
94f4e4453aSJagan Teki	status = "okay";
95f4e4453aSJagan Teki};
96f4e4453aSJagan Teki
9714ff5d8fSSamuel Holland&ehci0 {
9814ff5d8fSSamuel Holland	status = "okay";
9914ff5d8fSSamuel Holland};
10014ff5d8fSSamuel Holland
101bdecc9cbSJagan Teki&ehci1 {
102bdecc9cbSJagan Teki	status = "okay";
103bdecc9cbSJagan Teki};
104bdecc9cbSJagan Teki
10593d6a27cSSamuel Holland&emac {
10693d6a27cSSamuel Holland	pinctrl-names = "default";
10793d6a27cSSamuel Holland	pinctrl-0 = <&rgmii_pins>;
10893d6a27cSSamuel Holland	phy-mode = "rgmii";
10993d6a27cSSamuel Holland	phy-handle = <&ext_rgmii_phy>;
11093d6a27cSSamuel Holland	phy-supply = <&reg_gmac_3v3>;
11193d6a27cSSamuel Holland	status = "okay";
11293d6a27cSSamuel Holland};
11393d6a27cSSamuel Holland
114f4e4453aSJagan Teki&hdmi {
115f4e4453aSJagan Teki	hvcc-supply = <&reg_dldo1>;
116f4e4453aSJagan Teki	status = "okay";
117f4e4453aSJagan Teki};
118f4e4453aSJagan Teki
119f4e4453aSJagan Teki&hdmi_out {
120f4e4453aSJagan Teki	hdmi_out_con: endpoint {
121f4e4453aSJagan Teki		remote-endpoint = <&hdmi_con_in>;
122f4e4453aSJagan Teki	};
123f4e4453aSJagan Teki};
124f4e4453aSJagan Teki
12593d6a27cSSamuel Holland&mdio {
12693d6a27cSSamuel Holland	ext_rgmii_phy: ethernet-phy@1 {
12793d6a27cSSamuel Holland		compatible = "ethernet-phy-ieee802.3-c22";
12893d6a27cSSamuel Holland		reg = <1>;
12993d6a27cSSamuel Holland	};
13093d6a27cSSamuel Holland};
13193d6a27cSSamuel Holland
132bdecc9cbSJagan Teki&mmc0 {
133bdecc9cbSJagan Teki	pinctrl-names = "default";
134bdecc9cbSJagan Teki	pinctrl-0 = <&mmc0_pins>;
135e5701010SJagan Teki	vmmc-supply = <&reg_dcdc1>;
13609b964afSSamuel Holland	cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; /* PF6 */
13709b964afSSamuel Holland	disable-wp;
13809b964afSSamuel Holland	bus-width = <4>;
139bdecc9cbSJagan Teki	status = "okay";
140bdecc9cbSJagan Teki};
141bdecc9cbSJagan Teki
14264971e5aSSamuel Holland&mmc1 {
14364971e5aSSamuel Holland	pinctrl-names = "default";
14464971e5aSSamuel Holland	pinctrl-0 = <&mmc1_pins>;
14564971e5aSSamuel Holland	vmmc-supply = <&reg_dldo2>;
14664971e5aSSamuel Holland	vqmmc-supply = <&reg_dldo4>;
14764971e5aSSamuel Holland	mmc-pwrseq = <&wifi_pwrseq>;
14864971e5aSSamuel Holland	bus-width = <4>;
14964971e5aSSamuel Holland	non-removable;
15064971e5aSSamuel Holland	status = "okay";
15185c6faddSJernej Skrabec
15285c6faddSJernej Skrabec	brcmf: wifi@1 {
15385c6faddSJernej Skrabec		reg = <1>;
15485c6faddSJernej Skrabec		compatible = "brcm,bcm4329-fmac";
15585c6faddSJernej Skrabec		interrupt-parent = <&r_pio>;
15685c6faddSJernej Skrabec		interrupts = <0 7 IRQ_TYPE_LEVEL_LOW>; /* PL7 */
15785c6faddSJernej Skrabec		interrupt-names = "host-wake";
15885c6faddSJernej Skrabec	};
15964971e5aSSamuel Holland};
16064971e5aSSamuel Holland
16114ff5d8fSSamuel Holland&ohci0 {
16214ff5d8fSSamuel Holland	status = "okay";
16314ff5d8fSSamuel Holland};
16414ff5d8fSSamuel Holland
165bdecc9cbSJagan Teki&ohci1 {
166bdecc9cbSJagan Teki	status = "okay";
167bdecc9cbSJagan Teki};
168bdecc9cbSJagan Teki
16963eb1e14SJernej Skrabec&r_ir {
17063eb1e14SJernej Skrabec	status = "okay";
17163eb1e14SJernej Skrabec};
17263eb1e14SJernej Skrabec
173e5701010SJagan Teki&r_rsb {
174e5701010SJagan Teki	status = "okay";
175e5701010SJagan Teki
176e5701010SJagan Teki	axp803: pmic@3a3 {
177e5701010SJagan Teki		compatible = "x-powers,axp803";
178e5701010SJagan Teki		reg = <0x3a3>;
179e5701010SJagan Teki		interrupt-parent = <&r_intc>;
180e5701010SJagan Teki		interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
181b1360dcfSJernej Skrabec		x-powers,drive-vbus-en; /* set N_VBUSEN as output pin */
182e5701010SJagan Teki	};
183e5701010SJagan Teki};
184e5701010SJagan Teki
185e5701010SJagan Teki#include "axp803.dtsi"
186e5701010SJagan Teki
187a24270afSChen-Yu Tsai&ac_power_supply {
188a24270afSChen-Yu Tsai	status = "okay";
189a24270afSChen-Yu Tsai};
190a24270afSChen-Yu Tsai
191a24270afSChen-Yu Tsai&battery_power_supply {
192a24270afSChen-Yu Tsai	status = "okay";
193a24270afSChen-Yu Tsai};
194a24270afSChen-Yu Tsai
195e5701010SJagan Teki&reg_aldo1 {
196eacd9c43SSamuel Holland	regulator-min-microvolt = <2800000>;
197eacd9c43SSamuel Holland	regulator-max-microvolt = <2800000>;
198e5701010SJagan Teki	regulator-name = "afvcc-csi";
199e5701010SJagan Teki};
200e5701010SJagan Teki
201e5701010SJagan Teki&reg_aldo2 {
202e5701010SJagan Teki	regulator-always-on;
203e5701010SJagan Teki	regulator-min-microvolt = <1800000>;
204e5701010SJagan Teki	regulator-max-microvolt = <3300000>;
205e5701010SJagan Teki	regulator-name = "vcc-pl";
206e5701010SJagan Teki};
207e5701010SJagan Teki
208e5701010SJagan Teki&reg_aldo3 {
209e5701010SJagan Teki	regulator-always-on;
210e5701010SJagan Teki	regulator-min-microvolt = <3000000>;
211e5701010SJagan Teki	regulator-max-microvolt = <3000000>;
212e5701010SJagan Teki	regulator-name = "vcc-pll-avcc";
213e5701010SJagan Teki};
214e5701010SJagan Teki
215e5701010SJagan Teki&reg_dcdc1 {
216e5701010SJagan Teki	regulator-always-on;
217e5701010SJagan Teki	regulator-min-microvolt = <3300000>;
218e5701010SJagan Teki	regulator-max-microvolt = <3300000>;
219e5701010SJagan Teki	regulator-name = "vcc-3v3";
220e5701010SJagan Teki};
221e5701010SJagan Teki
222e5701010SJagan Teki&reg_dcdc2 {
223e5701010SJagan Teki	regulator-always-on;
224e5701010SJagan Teki	regulator-min-microvolt = <1040000>;
225e5701010SJagan Teki	regulator-max-microvolt = <1300000>;
226e5701010SJagan Teki	regulator-name = "vdd-cpux";
227e5701010SJagan Teki};
228e5701010SJagan Teki
229e5701010SJagan Teki/* DCDC3 is polyphased with DCDC2 */
230e5701010SJagan Teki
231e5701010SJagan Teki&reg_dcdc5 {
232e5701010SJagan Teki	regulator-always-on;
233e5701010SJagan Teki	regulator-min-microvolt = <1500000>;
234e5701010SJagan Teki	regulator-max-microvolt = <1500000>;
235e5701010SJagan Teki	regulator-name = "vcc-dram";
236e5701010SJagan Teki};
237e5701010SJagan Teki
238e5701010SJagan Teki&reg_dcdc6 {
239e5701010SJagan Teki	regulator-always-on;
240e5701010SJagan Teki	regulator-min-microvolt = <1100000>;
241e5701010SJagan Teki	regulator-max-microvolt = <1100000>;
242e5701010SJagan Teki	regulator-name = "vdd-sys";
243e5701010SJagan Teki};
244e5701010SJagan Teki
245e5701010SJagan Teki&reg_dldo1 {
246e5701010SJagan Teki	regulator-min-microvolt = <3300000>;
247e5701010SJagan Teki	regulator-max-microvolt = <3300000>;
248e5701010SJagan Teki	regulator-name = "vcc-hdmi-dsi";
249e5701010SJagan Teki};
250e5701010SJagan Teki
251e5701010SJagan Teki&reg_dldo2 {
252e5701010SJagan Teki	regulator-min-microvolt = <3300000>;
253e5701010SJagan Teki	regulator-max-microvolt = <3300000>;
254e5701010SJagan Teki	regulator-name = "vcc-wifi";
255e5701010SJagan Teki};
256e5701010SJagan Teki
257e5701010SJagan Teki&reg_dldo3 {
258e5701010SJagan Teki	regulator-min-microvolt = <3300000>;
259e5701010SJagan Teki	regulator-max-microvolt = <3300000>;
260e5701010SJagan Teki	regulator-name = "avdd-csi";
261e5701010SJagan Teki};
262e5701010SJagan Teki
263e5701010SJagan Teki&reg_dldo4 {
264e5701010SJagan Teki	regulator-min-microvolt = <3300000>;
265e5701010SJagan Teki	regulator-max-microvolt = <3300000>;
266e5701010SJagan Teki	regulator-name = "vcc-wifi-io";
267e5701010SJagan Teki};
268e5701010SJagan Teki
26914ff5d8fSSamuel Holland&reg_drivevbus {
27014ff5d8fSSamuel Holland	regulator-name = "usb0-vbus";
27114ff5d8fSSamuel Holland	status = "okay";
27214ff5d8fSSamuel Holland};
27314ff5d8fSSamuel Holland
274e5701010SJagan Teki&reg_eldo1 {
275e5701010SJagan Teki	regulator-min-microvolt = <1800000>;
276e5701010SJagan Teki	regulator-max-microvolt = <1800000>;
277e5701010SJagan Teki	regulator-name = "cpvdd";
278e5701010SJagan Teki};
279e5701010SJagan Teki
280eacd9c43SSamuel Holland&reg_eldo3 {
281eacd9c43SSamuel Holland	regulator-min-microvolt = <1500000>;
282eacd9c43SSamuel Holland	regulator-max-microvolt = <1800000>;
283eacd9c43SSamuel Holland	regulator-name = "dvdd-csi";
284eacd9c43SSamuel Holland};
285eacd9c43SSamuel Holland
286e5701010SJagan Teki&reg_fldo1 {
287e5701010SJagan Teki	regulator-min-microvolt = <1200000>;
288e5701010SJagan Teki	regulator-max-microvolt = <1200000>;
289e5701010SJagan Teki	regulator-name = "vcc-1v2-hsic";
290e5701010SJagan Teki};
291e5701010SJagan Teki
292e5701010SJagan Teki/*
293e5701010SJagan Teki * The A64 chip cannot work without this regulator off, although
294e5701010SJagan Teki * it seems to be only driving the AR100 core.
295e5701010SJagan Teki * Maybe we don't still know well about CPUs domain.
296e5701010SJagan Teki */
297e5701010SJagan Teki&reg_fldo2 {
298e5701010SJagan Teki	regulator-always-on;
299e5701010SJagan Teki	regulator-min-microvolt = <1100000>;
300e5701010SJagan Teki	regulator-max-microvolt = <1100000>;
301e5701010SJagan Teki	regulator-name = "vdd-cpus";
302e5701010SJagan Teki};
303e5701010SJagan Teki
304e5701010SJagan Teki&reg_rtc_ldo {
305e5701010SJagan Teki	regulator-name = "vcc-rtc";
306e5701010SJagan Teki};
307e5701010SJagan Teki
3085cbef9f9SIcenowy Zheng&simplefb_hdmi {
3095cbef9f9SIcenowy Zheng	vcc-hdmi-supply = <&reg_dldo1>;
3105cbef9f9SIcenowy Zheng};
3115cbef9f9SIcenowy Zheng
3126db1aaf4SJernej Skrabec&sound {
3136db1aaf4SJernej Skrabec	status = "okay";
3146db1aaf4SJernej Skrabec	simple-audio-card,widgets = "Headphone", "Headphone Jack",
3156db1aaf4SJernej Skrabec				    "Microphone", "Microphone Jack",
3166db1aaf4SJernej Skrabec				    "Microphone", "Onboard Microphone";
3176db1aaf4SJernej Skrabec	simple-audio-card,routing =
3186db1aaf4SJernej Skrabec			"Left DAC", "AIF1 Slot 0 Left",
3196db1aaf4SJernej Skrabec			"Right DAC", "AIF1 Slot 0 Right",
3206db1aaf4SJernej Skrabec			"AIF1 Slot 0 Left ADC", "Left ADC",
3216db1aaf4SJernej Skrabec			"AIF1 Slot 0 Right ADC", "Right ADC",
3226db1aaf4SJernej Skrabec			"Headphone Jack", "HP",
3236db1aaf4SJernej Skrabec			"MIC2", "Microphone Jack",
3246db1aaf4SJernej Skrabec			"Onboard Microphone", "MBIAS",
3256db1aaf4SJernej Skrabec			"MIC1", "Onboard Microphone";
3266db1aaf4SJernej Skrabec};
3276db1aaf4SJernej Skrabec
328d8174422SSamuel Holland&spi0 {
329d8174422SSamuel Holland	status = "okay";
330d8174422SSamuel Holland
331d8174422SSamuel Holland	spi-flash@0 {
332d8174422SSamuel Holland		compatible = "mxicy,mx25l1606e", "jedec,spi-nor";
333d8174422SSamuel Holland		reg = <0>;
334d8174422SSamuel Holland		spi-max-frequency = <80000000>;
335d8174422SSamuel Holland		m25p,fast-read;
336d8174422SSamuel Holland		status = "okay";
337d8174422SSamuel Holland	};
338d8174422SSamuel Holland};
339d8174422SSamuel Holland
34013b31e6bSSamuel Holland/* On debug connector */
341bdecc9cbSJagan Teki&uart0 {
342bdecc9cbSJagan Teki	pinctrl-names = "default";
343d91ebb95SChen-Yu Tsai	pinctrl-0 = <&uart0_pb_pins>;
344bdecc9cbSJagan Teki	status = "okay";
345bdecc9cbSJagan Teki};
346bdecc9cbSJagan Teki
34713b31e6bSSamuel Holland/* Bluetooth */
34813b31e6bSSamuel Holland&uart1 {
34913b31e6bSSamuel Holland	pinctrl-names = "default";
35013b31e6bSSamuel Holland	pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>;
35185c6faddSJernej Skrabec	uart-has-rtscts;
35213b31e6bSSamuel Holland	status = "okay";
35385c6faddSJernej Skrabec
35485c6faddSJernej Skrabec	bluetooth {
35585c6faddSJernej Skrabec		compatible = "brcm,bcm43438-bt";
35685c6faddSJernej Skrabec		max-speed = <1500000>;
35785c6faddSJernej Skrabec		clocks = <&rtc 1>;
35885c6faddSJernej Skrabec		clock-names = "lpo";
35985c6faddSJernej Skrabec		vbat-supply = <&reg_dldo2>;
36085c6faddSJernej Skrabec		vddio-supply = <&reg_dldo4>;
36185c6faddSJernej Skrabec		device-wakeup-gpios = <&r_pio 0 6 GPIO_ACTIVE_HIGH>; /* PL6 */
36285c6faddSJernej Skrabec		host-wakeup-gpios = <&r_pio 0 5 GPIO_ACTIVE_HIGH>; /* PL5 */
36385c6faddSJernej Skrabec		shutdown-gpios = <&r_pio 0 4 GPIO_ACTIVE_HIGH>; /* PL4 */
36485c6faddSJernej Skrabec	};
36513b31e6bSSamuel Holland};
36613b31e6bSSamuel Holland
36713b31e6bSSamuel Holland/* On Pi-2 connector, RTS/CTS optional */
36813b31e6bSSamuel Holland&uart2 {
36913b31e6bSSamuel Holland	pinctrl-names = "default";
37013b31e6bSSamuel Holland	pinctrl-0 = <&uart2_pins>;
37113b31e6bSSamuel Holland	status = "disabled";
37213b31e6bSSamuel Holland};
37313b31e6bSSamuel Holland
37413b31e6bSSamuel Holland/* On Pi-2 connector, RTS/CTS optional */
37513b31e6bSSamuel Holland&uart3 {
37613b31e6bSSamuel Holland	pinctrl-names = "default";
37713b31e6bSSamuel Holland	pinctrl-0 = <&uart3_pins>;
37813b31e6bSSamuel Holland	status = "disabled";
37913b31e6bSSamuel Holland};
38013b31e6bSSamuel Holland
38113b31e6bSSamuel Holland/* On Pi-2 connector (labeled for SPI1), RTS/CTS optional */
38213b31e6bSSamuel Holland&uart4 {
38313b31e6bSSamuel Holland	pinctrl-names = "default";
38413b31e6bSSamuel Holland	pinctrl-0 = <&uart4_pins>;
38513b31e6bSSamuel Holland	status = "disabled";
38613b31e6bSSamuel Holland};
38713b31e6bSSamuel Holland
38814ff5d8fSSamuel Holland&usb_otg {
38914ff5d8fSSamuel Holland	dr_mode = "otg";
390bdecc9cbSJagan Teki	status = "okay";
391bdecc9cbSJagan Teki};
392bdecc9cbSJagan Teki
39314ff5d8fSSamuel Holland&usbphy {
39414ff5d8fSSamuel Holland	usb0_id_det-gpios = <&pio 7 9 GPIO_ACTIVE_HIGH>; /* PH9 */
39514ff5d8fSSamuel Holland	usb0_vbus-supply = <&reg_drivevbus>;
39614ff5d8fSSamuel Holland	usb1_vbus-supply = <&reg_usb1_vbus>;
39714ff5d8fSSamuel Holland	status = "okay";
39814ff5d8fSSamuel Holland};
399