1b4b8f2c9SClément Péron// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2cabbaed7SClément Péron// Copyright (C) 2017 Jagan Teki <jteki@openedev.com>
34969efb2SJagan Teki
44969efb2SJagan Teki/dts-v1/;
54969efb2SJagan Teki
64969efb2SJagan Teki#include "sun50i-a64.dtsi"
7ac904843SVasily Khoruzhick#include "sun50i-a64-cpu-opp.dtsi"
84969efb2SJagan Teki
94969efb2SJagan Teki#include <dt-bindings/gpio/gpio.h>
104969efb2SJagan Teki
114969efb2SJagan Teki/ {
124969efb2SJagan Teki	model = "Olimex A64-Olinuxino";
134969efb2SJagan Teki	compatible = "olimex,a64-olinuxino", "allwinner,sun50i-a64";
144969efb2SJagan Teki
154969efb2SJagan Teki	aliases {
1621eac6f3SAndre Przywara		ethernet0 = &emac;
174969efb2SJagan Teki		serial0 = &uart0;
184969efb2SJagan Teki	};
194969efb2SJagan Teki
204969efb2SJagan Teki	chosen {
214969efb2SJagan Teki		stdout-path = "serial0:115200n8";
224969efb2SJagan Teki	};
23916b68cfSJagan Teki
24f4e4453aSJagan Teki	hdmi-connector {
25f4e4453aSJagan Teki		compatible = "hdmi-connector";
26f4e4453aSJagan Teki		type = "a";
27f4e4453aSJagan Teki
28f4e4453aSJagan Teki		port {
29f4e4453aSJagan Teki			hdmi_con_in: endpoint {
30f4e4453aSJagan Teki				remote-endpoint = <&hdmi_out_con>;
31f4e4453aSJagan Teki			};
32f4e4453aSJagan Teki		};
33f4e4453aSJagan Teki	};
34f4e4453aSJagan Teki
3589866b26SPetr Štetiar	leds {
3689866b26SPetr Štetiar		compatible = "gpio-leds";
3789866b26SPetr Štetiar
3889866b26SPetr Štetiar		led-0 {
3989866b26SPetr Štetiar			label = "a64-olinuxino:red:user";
4089866b26SPetr Štetiar			gpios = <&pio 4 17 GPIO_ACTIVE_HIGH>; /* PE17 */
4189866b26SPetr Štetiar		};
4289866b26SPetr Štetiar	};
4389866b26SPetr Štetiar
44aa9cbe94SAndre Przywara	reg_usb1_vbus: usb1-vbus {
45aa9cbe94SAndre Przywara		compatible = "regulator-fixed";
46aa9cbe94SAndre Przywara		regulator-name = "usb1-vbus";
47aa9cbe94SAndre Przywara		regulator-min-microvolt = <5000000>;
48aa9cbe94SAndre Przywara		regulator-max-microvolt = <5000000>;
49aa9cbe94SAndre Przywara		regulator-boot-on;
50aa9cbe94SAndre Przywara		enable-active-high;
51aa9cbe94SAndre Przywara		gpio = <&pio 6 9 GPIO_ACTIVE_HIGH>; /* PG9 */
52aa9cbe94SAndre Przywara		status = "okay";
53aa9cbe94SAndre Przywara	};
54aa9cbe94SAndre Przywara
55916b68cfSJagan Teki	wifi_pwrseq: wifi_pwrseq {
56916b68cfSJagan Teki		compatible = "mmc-pwrseq-simple";
57916b68cfSJagan Teki		reset-gpios = <&r_pio 0 2 GPIO_ACTIVE_LOW>; /* PL2 */
58916b68cfSJagan Teki	};
594969efb2SJagan Teki};
604969efb2SJagan Teki
61*f9814e2eSPhilip Rinn&codec {
62*f9814e2eSPhilip Rinn	status = "okay";
63*f9814e2eSPhilip Rinn};
64*f9814e2eSPhilip Rinn
65*f9814e2eSPhilip Rinn&codec_analog {
66*f9814e2eSPhilip Rinn	cpvdd-supply = <&reg_eldo1>;
67*f9814e2eSPhilip Rinn	status = "okay";
68*f9814e2eSPhilip Rinn};
69*f9814e2eSPhilip Rinn
70ac904843SVasily Khoruzhick&cpu0 {
71ac904843SVasily Khoruzhick	cpu-supply = <&reg_dcdc2>;
72ac904843SVasily Khoruzhick};
73ac904843SVasily Khoruzhick
74ac904843SVasily Khoruzhick&cpu1 {
75ac904843SVasily Khoruzhick	cpu-supply = <&reg_dcdc2>;
76ac904843SVasily Khoruzhick};
77ac904843SVasily Khoruzhick
78ac904843SVasily Khoruzhick&cpu2 {
79ac904843SVasily Khoruzhick	cpu-supply = <&reg_dcdc2>;
80ac904843SVasily Khoruzhick};
81ac904843SVasily Khoruzhick
82ac904843SVasily Khoruzhick&cpu3 {
83ac904843SVasily Khoruzhick	cpu-supply = <&reg_dcdc2>;
84ac904843SVasily Khoruzhick};
85ac904843SVasily Khoruzhick
86*f9814e2eSPhilip Rinn&dai {
87*f9814e2eSPhilip Rinn	status = "okay";
88*f9814e2eSPhilip Rinn};
89*f9814e2eSPhilip Rinn
90f4e4453aSJagan Teki&de {
91f4e4453aSJagan Teki	status = "okay";
92f4e4453aSJagan Teki};
93f4e4453aSJagan Teki
94aa9cbe94SAndre Przywara&ehci0 {
95aa9cbe94SAndre Przywara	status = "okay";
96aa9cbe94SAndre Przywara};
97aa9cbe94SAndre Przywara
98aa9cbe94SAndre Przywara&ehci1 {
99aa9cbe94SAndre Przywara	status = "okay";
100aa9cbe94SAndre Przywara};
101aa9cbe94SAndre Przywara
10221eac6f3SAndre Przywara&emac {
10321eac6f3SAndre Przywara	pinctrl-names = "default";
10421eac6f3SAndre Przywara	pinctrl-0 = <&rgmii_pins>;
10521eac6f3SAndre Przywara	phy-mode = "rgmii";
10621eac6f3SAndre Przywara	phy-handle = <&ext_rgmii_phy>;
10721eac6f3SAndre Przywara	phy-supply = <&reg_dcdc1>;
10867929449SRodrigo Exterckötter Tjäder	allwinner,tx-delay-ps = <600>;
10921eac6f3SAndre Przywara	status = "okay";
11021eac6f3SAndre Przywara};
11121eac6f3SAndre Przywara
112f4e4453aSJagan Teki&hdmi {
113f4e4453aSJagan Teki	hvcc-supply = <&reg_dldo1>;
114f4e4453aSJagan Teki	status = "okay";
115f4e4453aSJagan Teki};
116f4e4453aSJagan Teki
117f4e4453aSJagan Teki&hdmi_out {
118f4e4453aSJagan Teki	hdmi_out_con: endpoint {
119f4e4453aSJagan Teki		remote-endpoint = <&hdmi_con_in>;
120f4e4453aSJagan Teki	};
121f4e4453aSJagan Teki};
122f4e4453aSJagan Teki
12321eac6f3SAndre Przywara&mdio {
12421eac6f3SAndre Przywara	ext_rgmii_phy: ethernet-phy@1 {
12521eac6f3SAndre Przywara		compatible = "ethernet-phy-ieee802.3-c22";
12621eac6f3SAndre Przywara		reg = <1>;
12721eac6f3SAndre Przywara	};
12821eac6f3SAndre Przywara};
12921eac6f3SAndre Przywara
1304969efb2SJagan Teki&mmc0 {
1314969efb2SJagan Teki	pinctrl-names = "default";
1324969efb2SJagan Teki	pinctrl-0 = <&mmc0_pins>;
1334969efb2SJagan Teki	vmmc-supply = <&reg_dcdc1>;
134b75cb68dSTuomas Tynkkynen	cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>;
1354969efb2SJagan Teki	disable-wp;
1364969efb2SJagan Teki	bus-width = <4>;
1374969efb2SJagan Teki	status = "okay";
1384969efb2SJagan Teki};
1394969efb2SJagan Teki
140916b68cfSJagan Teki&mmc1 {
141916b68cfSJagan Teki	pinctrl-names = "default";
142916b68cfSJagan Teki	pinctrl-0 = <&mmc1_pins>;
1433d615c2fSStefan Mavrodiev	vmmc-supply = <&reg_dcdc1>;
144916b68cfSJagan Teki	vqmmc-supply = <&reg_dldo4>;
145916b68cfSJagan Teki	mmc-pwrseq = <&wifi_pwrseq>;
146916b68cfSJagan Teki	bus-width = <4>;
147916b68cfSJagan Teki	non-removable;
148916b68cfSJagan Teki	status = "okay";
149916b68cfSJagan Teki
150916b68cfSJagan Teki	rtl8723bs: wifi@1 {
151916b68cfSJagan Teki		reg = <1>;
152916b68cfSJagan Teki		interrupt-parent = <&r_pio>;
153916b68cfSJagan Teki		interrupts = <0 3 IRQ_TYPE_LEVEL_LOW>; /* PL3 */
154916b68cfSJagan Teki		interrupt-names = "host-wake";
155916b68cfSJagan Teki	};
156916b68cfSJagan Teki};
157916b68cfSJagan Teki
158aa9cbe94SAndre Przywara&ohci0 {
159aa9cbe94SAndre Przywara	status = "okay";
160aa9cbe94SAndre Przywara};
161aa9cbe94SAndre Przywara
162aa9cbe94SAndre Przywara&ohci1 {
163aa9cbe94SAndre Przywara	status = "okay";
164aa9cbe94SAndre Przywara};
165aa9cbe94SAndre Przywara
166f0c3b29fSStefan Mavrodiev&pio {
167f0c3b29fSStefan Mavrodiev	vcc-pc-supply = <&reg_dcdc1>;
168f0c3b29fSStefan Mavrodiev	vcc-pd-supply = <&reg_dcdc1>;
169f0c3b29fSStefan Mavrodiev	vcc-pe-supply = <&reg_aldo1>;
170f0c3b29fSStefan Mavrodiev	vcc-pg-supply = <&reg_dldo4>;
171f0c3b29fSStefan Mavrodiev};
172f0c3b29fSStefan Mavrodiev
173f0c3b29fSStefan Mavrodiev&r_pio {
174f0c3b29fSStefan Mavrodiev	/*
175f0c3b29fSStefan Mavrodiev	 * FIXME: We can't add that supply for now since it would
176f0c3b29fSStefan Mavrodiev	 * create a circular dependency between pinctrl, the regulator
177f0c3b29fSStefan Mavrodiev	 * and the RSB Bus.
178f0c3b29fSStefan Mavrodiev	 *
179f0c3b29fSStefan Mavrodiev	 * vcc-pl-supply = <&reg_aldo2>;
180f0c3b29fSStefan Mavrodiev	 */
181f0c3b29fSStefan Mavrodiev};
182f0c3b29fSStefan Mavrodiev
1835a5e5216SEmmanuel Vadot&pio {
1845a5e5216SEmmanuel Vadot	vcc-pa-supply = <&reg_dcdc1>;
1855a5e5216SEmmanuel Vadot	vcc-pb-supply = <&reg_dcdc1>;
1865a5e5216SEmmanuel Vadot	vcc-pc-supply = <&reg_dcdc1>;
1875a5e5216SEmmanuel Vadot	vcc-pd-supply = <&reg_dcdc1>;
1885a5e5216SEmmanuel Vadot	vcc-pe-supply = <&reg_aldo1>;
1895a5e5216SEmmanuel Vadot	vcc-pf-supply = <&reg_dcdc1>;
1905a5e5216SEmmanuel Vadot	vcc-pg-supply = <&reg_dldo4>;
1915a5e5216SEmmanuel Vadot	vcc-ph-supply = <&reg_dcdc1>;
1925a5e5216SEmmanuel Vadot};
1935a5e5216SEmmanuel Vadot
1944969efb2SJagan Teki&r_rsb {
1954969efb2SJagan Teki	status = "okay";
1964969efb2SJagan Teki
1974969efb2SJagan Teki	axp803: pmic@3a3 {
1984969efb2SJagan Teki		compatible = "x-powers,axp803";
1994969efb2SJagan Teki		reg = <0x3a3>;
2004969efb2SJagan Teki		interrupt-parent = <&r_intc>;
20173088dfeSSamuel Holland		interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_LOW>;
202aa9cbe94SAndre Przywara		x-powers,drive-vbus-en;	/* set N_VBUSEN as output pin */
2034969efb2SJagan Teki	};
2044969efb2SJagan Teki};
2054969efb2SJagan Teki
2065a5e5216SEmmanuel Vadot/* VCC-PL is powered by aldo2 but we cannot add it as the RSB */
2075a5e5216SEmmanuel Vadot/* interface used to talk to the PMIC in on the PL pins */
2085a5e5216SEmmanuel Vadot/* &r_pio { */
2095a5e5216SEmmanuel Vadot/*	vcc-pl-supply = <&reg_aldo2>; */
2105a5e5216SEmmanuel Vadot/* }; */
2115a5e5216SEmmanuel Vadot
2124969efb2SJagan Teki#include "axp803.dtsi"
2134969efb2SJagan Teki
214a24270afSChen-Yu Tsai&ac_power_supply {
215a24270afSChen-Yu Tsai	status = "okay";
216a24270afSChen-Yu Tsai};
217a24270afSChen-Yu Tsai
218a24270afSChen-Yu Tsai&battery_power_supply {
219a24270afSChen-Yu Tsai	status = "okay";
220a24270afSChen-Yu Tsai};
221a24270afSChen-Yu Tsai
2224969efb2SJagan Teki&reg_aldo1 {
2234969efb2SJagan Teki	regulator-always-on;
2244969efb2SJagan Teki	regulator-min-microvolt = <2800000>;
2254969efb2SJagan Teki	regulator-max-microvolt = <2800000>;
2264969efb2SJagan Teki	regulator-name = "vcc-pe";
2274969efb2SJagan Teki};
2284969efb2SJagan Teki
2294969efb2SJagan Teki&reg_aldo2 {
2304969efb2SJagan Teki	regulator-always-on;
2314969efb2SJagan Teki	regulator-min-microvolt = <3300000>;
2324969efb2SJagan Teki	regulator-max-microvolt = <3300000>;
2334969efb2SJagan Teki	regulator-name = "vcc-pl";
2344969efb2SJagan Teki};
2354969efb2SJagan Teki
2364969efb2SJagan Teki&reg_aldo3 {
2374969efb2SJagan Teki	regulator-always-on;
2384969efb2SJagan Teki	regulator-min-microvolt = <3000000>;
2394969efb2SJagan Teki	regulator-max-microvolt = <3000000>;
2404969efb2SJagan Teki	regulator-name = "vcc-pll-avcc";
2414969efb2SJagan Teki};
2424969efb2SJagan Teki
2434969efb2SJagan Teki&reg_dcdc1 {
2444969efb2SJagan Teki	regulator-always-on;
2454969efb2SJagan Teki	regulator-min-microvolt = <3300000>;
2464969efb2SJagan Teki	regulator-max-microvolt = <3300000>;
2474969efb2SJagan Teki	regulator-name = "vcc-3v3";
2484969efb2SJagan Teki};
2494969efb2SJagan Teki
2504969efb2SJagan Teki&reg_dcdc2 {
2514969efb2SJagan Teki	regulator-always-on;
2524969efb2SJagan Teki	regulator-min-microvolt = <1040000>;
2534969efb2SJagan Teki	regulator-max-microvolt = <1300000>;
2544969efb2SJagan Teki	regulator-name = "vdd-cpux";
2554969efb2SJagan Teki};
2564969efb2SJagan Teki
2574969efb2SJagan Teki/* DCDC3 is polyphased with DCDC2 */
2584969efb2SJagan Teki
25993366b49SAndre Przywara/*
26093366b49SAndre Przywara * The board uses DDR3L DRAM chips. 1.36V is the closest to the nominal
26193366b49SAndre Przywara * 1.35V that the PMIC can drive.
26293366b49SAndre Przywara */
2634969efb2SJagan Teki&reg_dcdc5 {
2644969efb2SJagan Teki	regulator-always-on;
26593366b49SAndre Przywara	regulator-min-microvolt = <1360000>;
26693366b49SAndre Przywara	regulator-max-microvolt = <1360000>;
2674969efb2SJagan Teki	regulator-name = "vcc-ddr3";
2684969efb2SJagan Teki};
2694969efb2SJagan Teki
2704969efb2SJagan Teki&reg_dcdc6 {
2714969efb2SJagan Teki	regulator-always-on;
2724969efb2SJagan Teki	regulator-min-microvolt = <1100000>;
2734969efb2SJagan Teki	regulator-max-microvolt = <1100000>;
2744969efb2SJagan Teki	regulator-name = "vdd-sys";
2754969efb2SJagan Teki};
2764969efb2SJagan Teki
2774969efb2SJagan Teki&reg_dldo1 {
2784969efb2SJagan Teki	regulator-min-microvolt = <3300000>;
2794969efb2SJagan Teki	regulator-max-microvolt = <3300000>;
2804969efb2SJagan Teki	regulator-name = "vcc-hdmi";
2814969efb2SJagan Teki};
2824969efb2SJagan Teki
2834969efb2SJagan Teki&reg_dldo2 {
2844969efb2SJagan Teki	regulator-min-microvolt = <3300000>;
2854969efb2SJagan Teki	regulator-max-microvolt = <3300000>;
2864969efb2SJagan Teki	regulator-name = "vcc-mipi";
2874969efb2SJagan Teki};
2884969efb2SJagan Teki
2894969efb2SJagan Teki&reg_dldo3 {
2904969efb2SJagan Teki	regulator-min-microvolt = <2800000>;
2914969efb2SJagan Teki	regulator-max-microvolt = <2800000>;
2924969efb2SJagan Teki	regulator-name = "vcc-avdd-csi";
2934969efb2SJagan Teki};
2944969efb2SJagan Teki
2954969efb2SJagan Teki&reg_dldo4 {
2964969efb2SJagan Teki	regulator-min-microvolt = <3300000>;
2974969efb2SJagan Teki	regulator-max-microvolt = <3300000>;
2984969efb2SJagan Teki	regulator-name = "vcc-wifi-io";
2994969efb2SJagan Teki};
3004969efb2SJagan Teki
301aa9cbe94SAndre Przywara&reg_drivevbus {
302aa9cbe94SAndre Przywara	regulator-name = "usb0-vbus";
303aa9cbe94SAndre Przywara	status = "okay";
304aa9cbe94SAndre Przywara};
305aa9cbe94SAndre Przywara
3064969efb2SJagan Teki&reg_eldo1 {
3074969efb2SJagan Teki	regulator-min-microvolt = <1800000>;
3084969efb2SJagan Teki	regulator-max-microvolt = <1800000>;
3094969efb2SJagan Teki	regulator-name = "cpvdd";
3104969efb2SJagan Teki};
3114969efb2SJagan Teki
3124969efb2SJagan Teki&reg_eldo2 {
3134969efb2SJagan Teki	regulator-min-microvolt = <1800000>;
3144969efb2SJagan Teki	regulator-max-microvolt = <1800000>;
3154969efb2SJagan Teki	regulator-name = "vcc-dvdd-csi";
3164969efb2SJagan Teki};
3174969efb2SJagan Teki
3184969efb2SJagan Teki&reg_fldo1 {
3194969efb2SJagan Teki	regulator-min-microvolt = <1200000>;
3204969efb2SJagan Teki	regulator-max-microvolt = <1200000>;
3214969efb2SJagan Teki	regulator-name = "vcc-1v2-hsic";
3224969efb2SJagan Teki};
3234969efb2SJagan Teki
3244969efb2SJagan Teki/*
3254969efb2SJagan Teki * The A64 chip cannot work without this regulator off, although
3264969efb2SJagan Teki * it seems to be only driving the AR100 core.
3274969efb2SJagan Teki * Maybe we don't still know well about CPUs domain.
3284969efb2SJagan Teki */
3294969efb2SJagan Teki&reg_fldo2 {
3304969efb2SJagan Teki	regulator-always-on;
3314969efb2SJagan Teki	regulator-min-microvolt = <1100000>;
3324969efb2SJagan Teki	regulator-max-microvolt = <1100000>;
3334969efb2SJagan Teki	regulator-name = "vdd-cpus";
3344969efb2SJagan Teki};
3354969efb2SJagan Teki
3364969efb2SJagan Teki&reg_rtc_ldo {
3374969efb2SJagan Teki	regulator-name = "vcc-rtc";
3384969efb2SJagan Teki};
3394969efb2SJagan Teki
3405cbef9f9SIcenowy Zheng&simplefb_hdmi {
3415cbef9f9SIcenowy Zheng	vcc-hdmi-supply = <&reg_dldo1>;
3425cbef9f9SIcenowy Zheng};
3435cbef9f9SIcenowy Zheng
344*f9814e2eSPhilip Rinn&sound {
345*f9814e2eSPhilip Rinn	simple-audio-card,aux-devs = <&codec_analog>;
346*f9814e2eSPhilip Rinn	simple-audio-card,widgets = "Microphone", "Microphone Jack Left",
347*f9814e2eSPhilip Rinn		    "Microphone", "Microphone Jack Right",
348*f9814e2eSPhilip Rinn		    "Headphone", "Headphone Jack";
349*f9814e2eSPhilip Rinn	simple-audio-card,routing = "Left DAC", "DACL",
350*f9814e2eSPhilip Rinn		    "Right DAC", "DACR",
351*f9814e2eSPhilip Rinn		    "Headphone Jack", "HP",
352*f9814e2eSPhilip Rinn		    "ADCL", "Left ADC",
353*f9814e2eSPhilip Rinn		    "ADCR", "Right ADC",
354*f9814e2eSPhilip Rinn		    "Microphone Jack Left", "MBIAS",
355*f9814e2eSPhilip Rinn		    "MIC1", "Microphone Jack Left",
356*f9814e2eSPhilip Rinn		    "Microphone Jack Right", "MBIAS",
357*f9814e2eSPhilip Rinn		    "MIC2", "Microphone Jack Right";
358*f9814e2eSPhilip Rinn	status = "okay";
359*f9814e2eSPhilip Rinn};
360*f9814e2eSPhilip Rinn
3614969efb2SJagan Teki&uart0 {
3624969efb2SJagan Teki	pinctrl-names = "default";
363d91ebb95SChen-Yu Tsai	pinctrl-0 = <&uart0_pb_pins>;
3644969efb2SJagan Teki	status = "okay";
3654969efb2SJagan Teki};
366aa9cbe94SAndre Przywara
367aa9cbe94SAndre Przywara&usb_otg {
368aa9cbe94SAndre Przywara	dr_mode = "otg";
369aa9cbe94SAndre Przywara	status = "okay";
370aa9cbe94SAndre Przywara};
371aa9cbe94SAndre Przywara
372aa9cbe94SAndre Przywara&usbphy {
373aa9cbe94SAndre Przywara	status = "okay";
374aa9cbe94SAndre Przywara	usb0_id_det-gpios = <&pio 7 9 GPIO_ACTIVE_HIGH>; /* PH9 */
375aa9cbe94SAndre Przywara	usb0_vbus-supply = <&reg_drivevbus>;
376aa9cbe94SAndre Przywara	usb1_vbus-supply = <&reg_usb1_vbus>;
377aa9cbe94SAndre Przywara};
378