/*
 * Copyright 2015 Hans de Goede <hdegoede@redhat.com>
 *
 * Hans de Goede <hdegoede@redhat.com>
 *
 * This file is dual-licensed: you can use it either under the terms
 * of the GPL or the X11 license, at your option. Note that this dual
 * licensing only applies to this file, and not this project as a
 * whole.
 *
 *  a) This file is free software; you can redistribute it and/or
 *     modify it under the terms of the GNU General Public License as
 *     published by the Free Software Foundation; either version 2 of the
 *     License, or (at your option) any later version.
 *
 *     This file is distributed in the hope that it will be useful,
 *     but WITHOUT ANY WARRANTY; without even the implied warranty of
 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *     GNU General Public License for more details.
 *
 * Or, alternatively,
 *
 *  b) Permission is hereby granted, free of charge, to any person
 *     obtaining a copy of this software and associated documentation
 *     files (the "Software"), to deal in the Software without
 *     restriction, including without limitation the rights to use,
 *     copy, modify, merge, publish, distribute, sublicense, and/or
 *     sell copies of the Software, and to permit persons to whom the
 *     Software is furnished to do so, subject to the following
 *     conditions:
 *
 *     The above copyright notice and this permission notice shall be
 *     included in all copies or substantial portions of the Software.
 *
 *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 *     OTHER DEALINGS IN THE SOFTWARE.
 */

/dts-v1/;
#include "sun7i-a20.dtsi"
#include "sunxi-common-regulators.dtsi"

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/irq.h>

/ {
	model = "Orange Pi Mini";
	compatible = "xunlong,orangepi-mini", "allwinner,sun7i-a20";

	aliases {
		serial0 = &uart0;
	};

	chosen {
		stdout-path = "serial0:115200n8";
	};

	leds {
		compatible = "gpio-leds";
		pinctrl-names = "default";
		pinctrl-0 = <&led_pins_orangepi>;

		green {
			label = "orangepi:green:usr";
			gpios = <&pio 7 24 GPIO_ACTIVE_HIGH>; /* PH24 */
		};

		blue {
			label = "orangepi:blue:usr";
			gpios = <&pio 7 25 GPIO_ACTIVE_HIGH>; /* PH25 */
		};
	};

	reg_gmac_3v3: gmac-3v3 {
		compatible = "regulator-fixed";
		pinctrl-names = "default";
		pinctrl-0 = <&gmac_power_pin_orangepi>;
		regulator-name = "gmac-3v3";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		startup-delay-us = <100000>;
		enable-active-high;
		gpio = <&pio 7 23 GPIO_ACTIVE_HIGH>; /* PH23 */
	};
};

&ahci {
	status = "okay";
};

&codec {
	status = "okay";
};

&ehci0 {
	status = "okay";
};

&ehci1 {
	status = "okay";
};

&gmac {
	pinctrl-names = "default";
	pinctrl-0 = <&gmac_pins_rgmii_a>;
	phy = <&phy1>;
	phy-mode = "rgmii";
	phy-supply = <&reg_gmac_3v3>;
	status = "okay";

	phy1: ethernet-phy@1 {
		reg = <1>;
	};
};

&i2c0 {
	pinctrl-names = "default";
	pinctrl-0 = <&i2c0_pins_a>;
	status = "okay";

	axp209: pmic@34 {
		reg = <0x34>;
		interrupt-parent = <&nmi_intc>;
		interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
	};
};

#include "axp209.dtsi"

&ir0 {
	pinctrl-names = "default";
	pinctrl-0 = <&ir0_rx_pins_a>;
	status = "okay";
};

&mmc0 {
	pinctrl-names = "default";
	pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_orangepi>;
	vmmc-supply = <&reg_vcc3v3>;
	bus-width = <4>;
	cd-gpios = <&pio 7 10 GPIO_ACTIVE_HIGH>; /* PH10 */
	cd-inverted;
	status = "okay";
};

&mmc3 {
	pinctrl-names = "default";
	pinctrl-0 = <&mmc3_pins_a>, <&mmc3_cd_pin_orangepi>;
	vmmc-supply = <&reg_vcc3v3>;
	bus-width = <4>;
	cd-gpios = <&pio 7 11 GPIO_ACTIVE_HIGH>; /* PH11 */
	cd-inverted;
	status = "okay";
};

&otg_sram {
	status = "okay";
};

&pio {
	usb0_id_detect_pin: usb0_id_detect_pin@0 {
		pins = "PH4";
		function = "gpio_in";
		bias-pull-up;
	};

	mmc0_cd_pin_orangepi: mmc0_cd_pin@0 {
		pins = "PH10";
		function = "gpio_in";
		bias-pull-up;
	};

	mmc3_cd_pin_orangepi: mmc3_cd_pin@0 {
		pins = "PH11";
		function = "gpio_in";
		bias-pull-up;
	};

	usb2_vbus_pin_bananapro: usb2_vbus_pin@0 {
		pins = "PH22";
		function = "gpio_out";
	};

	gmac_power_pin_orangepi: gmac_power_pin@0 {
		pins = "PH23";
		function = "gpio_out";
	};

	led_pins_orangepi: led_pins@0 {
		pins = "PH24", "PH25";
		function = "gpio_out";
	};

	usb1_vbus_pin_bananapro: usb1_vbus_pin@0 {
		pins = "PH26";
		function = "gpio_out";
	};
};

&reg_dcdc2 {
	regulator-always-on;
	regulator-min-microvolt = <1000000>;
	regulator-max-microvolt = <1500000>;
	regulator-name = "vdd-cpu";
};

&reg_dcdc3 {
	regulator-always-on;
	regulator-min-microvolt = <1000000>;
	regulator-max-microvolt = <1400000>;
	regulator-name = "vdd-int-pll";
};

&reg_ldo1 {
	regulator-name = "vdd-rtc";
};

&reg_ldo2 {
	regulator-always-on;
	regulator-min-microvolt = <3000000>;
	regulator-max-microvolt = <3000000>;
	regulator-name = "avcc";
};

&reg_usb0_vbus {
	status = "okay";
};

&reg_usb1_vbus {
	pinctrl-0 = <&usb1_vbus_pin_bananapro>;
	gpio = <&pio 7 26 GPIO_ACTIVE_HIGH>; /* PH26 */
	status = "okay";
};

&reg_usb2_vbus {
	pinctrl-0 = <&usb2_vbus_pin_bananapro>;
	gpio = <&pio 7 22 GPIO_ACTIVE_HIGH>; /* PH22 */
	status = "okay";
};

&uart0 {
	pinctrl-names = "default";
	pinctrl-0 = <&uart0_pins_a>;
	status = "okay";
};

&usb_otg {
	dr_mode = "otg";
	status = "okay";
};

&usb_power_supply {
	status = "okay";
};

&usbphy {
	pinctrl-names = "default";
	pinctrl-0 = <&usb0_id_detect_pin>;
	usb0_id_det-gpio = <&pio 7 4 GPIO_ACTIVE_HIGH>; /* PH4 */
	usb0_vbus_power-supply = <&usb_power_supply>;
	usb0_vbus-supply = <&reg_usb0_vbus>;
	usb1_vbus-supply = <&reg_usb1_vbus>;
	usb2_vbus-supply = <&reg_usb2_vbus>;
	status = "okay";
};
