17514069aSMaxime Ripard/*
27514069aSMaxime Ripard * Copyright (c) 2017 Free Electrons <maxime.ripard@free-electrons.com>
37514069aSMaxime Ripard *
47514069aSMaxime Ripard * This file is dual-licensed: you can use it either under the terms
57514069aSMaxime Ripard * of the GPL or the X11 license, at your option. Note that this dual
67514069aSMaxime Ripard * licensing only applies to this file, and not this project as a
77514069aSMaxime Ripard * whole.
87514069aSMaxime Ripard *
97514069aSMaxime Ripard *  a) This file is free software; you can redistribute it and/or
107514069aSMaxime Ripard *     modify it under the terms of the GNU General Public License as
117514069aSMaxime Ripard *     published by the Free Software Foundation; either version 2 of the
127514069aSMaxime Ripard *     License, or (at your option) any later version.
137514069aSMaxime Ripard *
147514069aSMaxime Ripard *     This file is distributed in the hope that it will be useful,
157514069aSMaxime Ripard *     but WITHOUT ANY WARRANTY; without even the implied warranty of
167514069aSMaxime Ripard *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
177514069aSMaxime Ripard *     GNU General Public License for more details.
187514069aSMaxime Ripard *
197514069aSMaxime Ripard * Or, alternatively,
207514069aSMaxime Ripard *
217514069aSMaxime Ripard *  b) Permission is hereby granted, free of charge, to any person
227514069aSMaxime Ripard *     obtaining a copy of this software and associated documentation
237514069aSMaxime Ripard *     files (the "Software"), to deal in the Software without
247514069aSMaxime Ripard *     restriction, including without limitation the rights to use,
257514069aSMaxime Ripard *     copy, modify, merge, publish, distribute, sublicense, and/or
267514069aSMaxime Ripard *     sell copies of the Software, and to permit persons to whom the
277514069aSMaxime Ripard *     Software is furnished to do so, subject to the following
287514069aSMaxime Ripard *     conditions:
297514069aSMaxime Ripard *
307514069aSMaxime Ripard *     The above copyright notice and this permission notice shall be
317514069aSMaxime Ripard *     included in all copies or substantial portions of the Software.
327514069aSMaxime Ripard *
337514069aSMaxime Ripard *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
347514069aSMaxime Ripard *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
357514069aSMaxime Ripard *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
367514069aSMaxime Ripard *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
377514069aSMaxime Ripard *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
387514069aSMaxime Ripard *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
397514069aSMaxime Ripard *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
407514069aSMaxime Ripard *     OTHER DEALINGS IN THE SOFTWARE.
417514069aSMaxime Ripard */
427514069aSMaxime Ripard
437514069aSMaxime Ripard/dts-v1/;
447514069aSMaxime Ripard#include "sun8i-a33.dtsi"
457514069aSMaxime Ripard
467514069aSMaxime Ripard#include <dt-bindings/gpio/gpio.h>
477514069aSMaxime Ripard
487514069aSMaxime Ripard/ {
497514069aSMaxime Ripard	model = "BananaPi M2 Magic";
507514069aSMaxime Ripard	compatible = "sinovoip,bananapi-m2m", "allwinner,sun8i-a33";
517514069aSMaxime Ripard
527514069aSMaxime Ripard	aliases {
537514069aSMaxime Ripard		i2c0 = &i2c0;
547514069aSMaxime Ripard		i2c1 = &i2c1;
557514069aSMaxime Ripard		i2c2 = &i2c2;
567514069aSMaxime Ripard		serial0 = &uart0;
577514069aSMaxime Ripard		serial1 = &uart1;
587514069aSMaxime Ripard	};
597514069aSMaxime Ripard
607514069aSMaxime Ripard	chosen {
617514069aSMaxime Ripard		stdout-path = "serial0:115200n8";
627514069aSMaxime Ripard	};
637514069aSMaxime Ripard
647514069aSMaxime Ripard	leds {
657514069aSMaxime Ripard		compatible = "gpio-leds";
667514069aSMaxime Ripard
677514069aSMaxime Ripard		blue {
687514069aSMaxime Ripard			label = "bpi-m2m:blue:usr";
697514069aSMaxime Ripard			gpios = <&pio 2 7 GPIO_ACTIVE_LOW>;
707514069aSMaxime Ripard		};
717514069aSMaxime Ripard
727514069aSMaxime Ripard		green {
737514069aSMaxime Ripard			label = "bpi-m2m:green:usr";
747514069aSMaxime Ripard			gpios = <&r_pio 0 2 GPIO_ACTIVE_LOW>;
757514069aSMaxime Ripard		};
767514069aSMaxime Ripard
777514069aSMaxime Ripard		red {
787514069aSMaxime Ripard			label = "bpi-m2m:red:power";
797514069aSMaxime Ripard			gpios = <&r_pio 0 3 GPIO_ACTIVE_LOW>;
807514069aSMaxime Ripard			default-state = "on";
817514069aSMaxime Ripard		};
827514069aSMaxime Ripard	};
837514069aSMaxime Ripard
847514069aSMaxime Ripard	reg_vcc5v0: vcc5v0 {
857514069aSMaxime Ripard		compatible = "regulator-fixed";
867514069aSMaxime Ripard		regulator-name = "vcc5v0";
877514069aSMaxime Ripard		regulator-min-microvolt = <5000000>;
887514069aSMaxime Ripard		regulator-max-microvolt = <5000000>;
897514069aSMaxime Ripard	};
907514069aSMaxime Ripard
917514069aSMaxime Ripard	wifi_pwrseq: wifi_pwrseq {
927514069aSMaxime Ripard		compatible = "mmc-pwrseq-simple";
937514069aSMaxime Ripard		reset-gpios = <&r_pio 0 6 GPIO_ACTIVE_LOW>; /* PL06 */
947514069aSMaxime Ripard	};
957514069aSMaxime Ripard};
967514069aSMaxime Ripard
977514069aSMaxime Ripard&codec {
987514069aSMaxime Ripard	status = "okay";
997514069aSMaxime Ripard};
1007514069aSMaxime Ripard
1017514069aSMaxime Ripard&cpu0 {
1027514069aSMaxime Ripard	cpu-supply = <&reg_dcdc3>;
1037514069aSMaxime Ripard};
1047514069aSMaxime Ripard
1057514069aSMaxime Ripard&cpu0_opp_table {
1067514069aSMaxime Ripard	opp@1104000000 {
1077514069aSMaxime Ripard		opp-hz = /bits/ 64 <1104000000>;
1087514069aSMaxime Ripard		opp-microvolt = <1320000>;
1097514069aSMaxime Ripard		clock-latency-ns = <244144>; /* 8 32k periods */
1107514069aSMaxime Ripard	};
1117514069aSMaxime Ripard
1127514069aSMaxime Ripard	opp@1200000000 {
1137514069aSMaxime Ripard		opp-hz = /bits/ 64 <1200000000>;
1147514069aSMaxime Ripard		opp-microvolt = <1320000>;
1157514069aSMaxime Ripard		clock-latency-ns = <244144>; /* 8 32k periods */
1167514069aSMaxime Ripard	};
1177514069aSMaxime Ripard};
1187514069aSMaxime Ripard
1197514069aSMaxime Ripard&dai {
1207514069aSMaxime Ripard	status = "okay";
1217514069aSMaxime Ripard};
1227514069aSMaxime Ripard
1237514069aSMaxime Ripard&ehci0 {
1247514069aSMaxime Ripard	status = "okay";
1257514069aSMaxime Ripard};
1267514069aSMaxime Ripard
1277514069aSMaxime Ripard/* This is the i2c bus exposed on the DSI connector for the touch panel */
1287514069aSMaxime Ripard&i2c0 {
1297514069aSMaxime Ripard	pinctrl-names = "default";
1307514069aSMaxime Ripard	pinctrl-0 = <&i2c0_pins_a>;
1317514069aSMaxime Ripard	status = "disabled";
1327514069aSMaxime Ripard};
1337514069aSMaxime Ripard
1347514069aSMaxime Ripard/* This is the i2c bus exposed on the GPIO header */
1357514069aSMaxime Ripard&i2c1 {
1367514069aSMaxime Ripard	pinctrl-names = "default";
1377514069aSMaxime Ripard	pinctrl-0 = <&i2c1_pins_a>;
1387514069aSMaxime Ripard	status = "disabled";
1397514069aSMaxime Ripard};
1407514069aSMaxime Ripard
1417514069aSMaxime Ripard/* This is the i2c bus exposed on the CSI connector to control the sensor */
1427514069aSMaxime Ripard&i2c2 {
1437514069aSMaxime Ripard	pinctrl-names = "default";
1447514069aSMaxime Ripard	pinctrl-0 = <&i2c2_pins_a>;
1457514069aSMaxime Ripard	status = "disabled";
1467514069aSMaxime Ripard};
1477514069aSMaxime Ripard
1487514069aSMaxime Ripard&mmc0 {
1497514069aSMaxime Ripard	pinctrl-names = "default";
1507514069aSMaxime Ripard	pinctrl-0 = <&mmc0_pins_a>;
1517514069aSMaxime Ripard	vmmc-supply = <&reg_dcdc1>;
1527514069aSMaxime Ripard	bus-width = <4>;
153*9ad93c0cSJagan Teki	cd-gpios = <&pio 1 4 GPIO_ACTIVE_LOW>; /* PB4 */
1547514069aSMaxime Ripard	status = "okay";
1557514069aSMaxime Ripard};
1567514069aSMaxime Ripard
1577514069aSMaxime Ripard&mmc1 {
1587514069aSMaxime Ripard	pinctrl-names = "default";
1597514069aSMaxime Ripard	pinctrl-0 = <&mmc1_pins_a>;
1607514069aSMaxime Ripard	vmmc-supply = <&reg_aldo1>;
1617514069aSMaxime Ripard	mmc-pwrseq = <&wifi_pwrseq>;
1627514069aSMaxime Ripard	bus-width = <4>;
1637514069aSMaxime Ripard	non-removable;
1647514069aSMaxime Ripard	status = "okay";
1657514069aSMaxime Ripard};
1667514069aSMaxime Ripard
1677514069aSMaxime Ripard&mmc2 {
1687514069aSMaxime Ripard	pinctrl-names = "default";
1697514069aSMaxime Ripard	pinctrl-0 = <&mmc2_8bit_pins>;
1707514069aSMaxime Ripard	vmmc-supply = <&reg_dcdc1>;
1717514069aSMaxime Ripard	bus-width = <8>;
1727514069aSMaxime Ripard	non-removable;
1737514069aSMaxime Ripard	cap-mmc-hw-reset;
1747514069aSMaxime Ripard	status = "okay";
1757514069aSMaxime Ripard};
1767514069aSMaxime Ripard
1777514069aSMaxime Ripard&ohci0 {
1787514069aSMaxime Ripard	status = "okay";
1797514069aSMaxime Ripard};
1807514069aSMaxime Ripard
1817514069aSMaxime Ripard&r_rsb {
1827514069aSMaxime Ripard	status = "okay";
1837514069aSMaxime Ripard
1847514069aSMaxime Ripard	axp22x: pmic@3a3 {
1857514069aSMaxime Ripard		compatible = "x-powers,axp223";
1867514069aSMaxime Ripard		reg = <0x3a3>;
1877514069aSMaxime Ripard		interrupt-parent = <&nmi_intc>;
1887514069aSMaxime Ripard		interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
1897514069aSMaxime Ripard		eldoin-supply = <&reg_dcdc1>;
1907514069aSMaxime Ripard		x-powers,drive-vbus-en;
1917514069aSMaxime Ripard	};
1927514069aSMaxime Ripard};
1937514069aSMaxime Ripard
1947514069aSMaxime Ripard#include "axp223.dtsi"
1957514069aSMaxime Ripard
1967514069aSMaxime Ripard&ac_power_supply {
1977514069aSMaxime Ripard	status = "okay";
1987514069aSMaxime Ripard};
1997514069aSMaxime Ripard
2007514069aSMaxime Ripard&reg_aldo1 {
2017514069aSMaxime Ripard	regulator-always-on;
2027514069aSMaxime Ripard	regulator-min-microvolt = <3000000>;
2037514069aSMaxime Ripard	regulator-max-microvolt = <3000000>;
2047514069aSMaxime Ripard	regulator-name = "vcc-io";
2057514069aSMaxime Ripard};
2067514069aSMaxime Ripard
2077514069aSMaxime Ripard&reg_aldo2 {
2087514069aSMaxime Ripard	regulator-always-on;
2097514069aSMaxime Ripard	regulator-min-microvolt = <2500000>;
2107514069aSMaxime Ripard	regulator-max-microvolt = <2500000>;
2117514069aSMaxime Ripard	regulator-name = "vdd-dll";
2127514069aSMaxime Ripard};
2137514069aSMaxime Ripard
2147514069aSMaxime Ripard&reg_aldo3 {
2157514069aSMaxime Ripard	regulator-always-on;
2167514069aSMaxime Ripard	regulator-min-microvolt = <3000000>;
2177514069aSMaxime Ripard	regulator-max-microvolt = <3000000>;
2187514069aSMaxime Ripard	regulator-name = "avcc";
2197514069aSMaxime Ripard};
2207514069aSMaxime Ripard
2217514069aSMaxime Ripard&reg_dc1sw {
2227514069aSMaxime Ripard	regulator-name = "vcc-lcd";
2237514069aSMaxime Ripard};
2247514069aSMaxime Ripard
2257514069aSMaxime Ripard&reg_dc5ldo {
2267514069aSMaxime Ripard	regulator-always-on;
2277514069aSMaxime Ripard	regulator-min-microvolt = <900000>;
2287514069aSMaxime Ripard	regulator-max-microvolt = <1400000>;
2297514069aSMaxime Ripard	regulator-name = "vdd-cpus";
2307514069aSMaxime Ripard};
2317514069aSMaxime Ripard
2327514069aSMaxime Ripard&reg_dcdc1 {
2337514069aSMaxime Ripard	regulator-always-on;
2347514069aSMaxime Ripard	regulator-min-microvolt = <3000000>;
2357514069aSMaxime Ripard	regulator-max-microvolt = <3000000>;
2367514069aSMaxime Ripard	regulator-name = "vcc-3v0";
2377514069aSMaxime Ripard};
2387514069aSMaxime Ripard
2397514069aSMaxime Ripard&reg_dcdc2 {
2407514069aSMaxime Ripard	regulator-always-on;
2417514069aSMaxime Ripard	regulator-min-microvolt = <900000>;
2427514069aSMaxime Ripard	regulator-max-microvolt = <1400000>;
2437514069aSMaxime Ripard	regulator-name = "vdd-sys";
2447514069aSMaxime Ripard};
2457514069aSMaxime Ripard
2467514069aSMaxime Ripard&reg_dcdc3 {
2477514069aSMaxime Ripard	regulator-always-on;
2487514069aSMaxime Ripard	regulator-min-microvolt = <900000>;
2497514069aSMaxime Ripard	regulator-max-microvolt = <1400000>;
2507514069aSMaxime Ripard	regulator-name = "vdd-cpu";
2517514069aSMaxime Ripard};
2527514069aSMaxime Ripard
2537514069aSMaxime Ripard&reg_dcdc5 {
2547514069aSMaxime Ripard	regulator-always-on;
2557514069aSMaxime Ripard	regulator-min-microvolt = <1500000>;
2567514069aSMaxime Ripard	regulator-max-microvolt = <1500000>;
2577514069aSMaxime Ripard	regulator-name = "vcc-dram";
2587514069aSMaxime Ripard};
2597514069aSMaxime Ripard
2607514069aSMaxime Ripard/*
2617514069aSMaxime Ripard * Our WiFi chip needs both DLDO1 and DLDO2 to be powered at the same
2627514069aSMaxime Ripard * time, with the two being in sync. Since this is not really
2637514069aSMaxime Ripard * supported right now, just use the two as always on, and we will fix
2647514069aSMaxime Ripard * it later.
2657514069aSMaxime Ripard */
2667514069aSMaxime Ripard&reg_dldo1 {
2677514069aSMaxime Ripard	regulator-always-on;
2687514069aSMaxime Ripard	regulator-min-microvolt = <3300000>;
2697514069aSMaxime Ripard	regulator-max-microvolt = <3300000>;
2707514069aSMaxime Ripard	regulator-name = "vcc-wifi0";
2717514069aSMaxime Ripard};
2727514069aSMaxime Ripard
2737514069aSMaxime Ripard&reg_dldo2 {
2747514069aSMaxime Ripard	regulator-always-on;
2757514069aSMaxime Ripard	regulator-min-microvolt = <3300000>;
2767514069aSMaxime Ripard	regulator-max-microvolt = <3300000>;
2777514069aSMaxime Ripard	regulator-name = "vcc-wifi1";
2787514069aSMaxime Ripard};
2797514069aSMaxime Ripard
2807514069aSMaxime Ripard&reg_drivevbus {
2817514069aSMaxime Ripard	regulator-name = "usb0-vbus";
2827514069aSMaxime Ripard	status = "okay";
2837514069aSMaxime Ripard};
2847514069aSMaxime Ripard
2857514069aSMaxime Ripard&reg_rtc_ldo {
2867514069aSMaxime Ripard	regulator-name = "vcc-rtc";
2877514069aSMaxime Ripard};
2887514069aSMaxime Ripard
2897514069aSMaxime Ripard&sound {
2907514069aSMaxime Ripard	status = "okay";
2917514069aSMaxime Ripard};
2927514069aSMaxime Ripard
2937514069aSMaxime Ripard&uart0 {
2947514069aSMaxime Ripard	pinctrl-names = "default";
2957514069aSMaxime Ripard	pinctrl-0 = <&uart0_pins_b>;
2967514069aSMaxime Ripard	status = "okay";
2977514069aSMaxime Ripard};
2987514069aSMaxime Ripard
2997514069aSMaxime Ripard&uart1 {
3007514069aSMaxime Ripard	pinctrl-names = "default";
3017514069aSMaxime Ripard	pinctrl-0 = <&uart1_pins_a>, <&uart1_pins_cts_rts_a>;
3027514069aSMaxime Ripard	status = "okay";
3037514069aSMaxime Ripard};
3047514069aSMaxime Ripard
3057514069aSMaxime Ripard&usb_otg {
3067514069aSMaxime Ripard	dr_mode = "otg";
3077514069aSMaxime Ripard	status = "okay";
3087514069aSMaxime Ripard};
3097514069aSMaxime Ripard
3107514069aSMaxime Ripard&usb_power_supply {
3117514069aSMaxime Ripard	status = "okay";
3127514069aSMaxime Ripard};
3137514069aSMaxime Ripard
3147514069aSMaxime Ripard&usbphy {
3157514069aSMaxime Ripard	usb0_id_det-gpios = <&pio 7 8 GPIO_ACTIVE_HIGH>; /* PH8 */
3167514069aSMaxime Ripard	usb0_vbus_power-supply = <&usb_power_supply>;
3177514069aSMaxime Ripard	usb0_vbus-supply = <&reg_drivevbus>;
3187514069aSMaxime Ripard	usb1_vbus-supply = <&reg_vcc5v0>;
3197514069aSMaxime Ripard	status = "okay";
3207514069aSMaxime Ripard};
321