/*
 * Copyright 2017-2018 Sean Wang <sean.wang@mediatek.com>
 *
 * SPDX-License-Identifier: (GPL-2.0+ OR MIT)
 */

/dts-v1/;
#include <dt-bindings/input/input.h>
#include "mt7623n.dtsi"
#include "mt6323.dtsi"

/ {
	model = "Bananapi BPI-R2";
	compatible = "bananapi,bpi-r2", "mediatek,mt7623";

	aliases {
		serial2 = &uart2;
	};

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

	connector {
		compatible = "hdmi-connector";
		label = "hdmi";
		type = "d";
		ddc-i2c-bus = <&hdmiddc0>;

		port {
			hdmi_connector_in: endpoint {
				remote-endpoint = <&hdmi0_out>;
			};
		};
	};

	cpus {
		cpu@0 {
			proc-supply = <&mt6323_vproc_reg>;
		};

		cpu@1 {
			proc-supply = <&mt6323_vproc_reg>;
		};

		cpu@2 {
			proc-supply = <&mt6323_vproc_reg>;
		};

		cpu@3 {
			proc-supply = <&mt6323_vproc_reg>;
		};
	};

	reg_1p8v: regulator-1p8v {
		compatible = "regulator-fixed";
		regulator-name = "fixed-1.8V";
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <1800000>;
		regulator-boot-on;
		regulator-always-on;
	};

	reg_3p3v: regulator-3p3v {
		compatible = "regulator-fixed";
		regulator-name = "fixed-3.3V";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		regulator-boot-on;
		regulator-always-on;
	};

	reg_5v: regulator-5v {
		compatible = "regulator-fixed";
		regulator-name = "fixed-5V";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		regulator-boot-on;
		regulator-always-on;
	};

	reg_vgpu: fixedregulator@0 {
		compatible = "regulator-fixed";
		regulator-name = "vdd_fixed_vgpu";
		regulator-min-microvolt = <1150000>;
		regulator-max-microvolt = <1150000>;
	};

	gpio-keys {
		compatible = "gpio-keys";
		pinctrl-names = "default";
		pinctrl-0 = <&key_pins_a>;

		button-factory {
			label = "factory";
			linux,code = <BTN_0>;
			gpios = <&pio 256 GPIO_ACTIVE_LOW>;
		};

		button-wps {
			label = "wps";
			linux,code = <KEY_WPS_BUTTON>;
			gpios = <&pio 257 GPIO_ACTIVE_HIGH>;
		};
	};

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

		blue {
			label = "bpi-r2:pio:blue";
			gpios = <&pio 240 GPIO_ACTIVE_LOW>;
			default-state = "off";
		};

		green {
			label = "bpi-r2:pio:green";
			gpios = <&pio 241 GPIO_ACTIVE_LOW>;
			default-state = "off";
		};

		red {
			label = "bpi-r2:pio:red";
			gpios = <&pio 239 GPIO_ACTIVE_LOW>;
			default-state = "off";
		};
	};

	memory@80000000 {
		device_type = "memory";
		reg = <0 0x80000000 0 0x80000000>;
	};
};

&bls {
	status = "okay";
};

&btif {
	status = "okay";
};

&cec {
	status = "okay";
};

&cir {
	pinctrl-names = "default";
	pinctrl-0 = <&cir_pins_a>;
	status = "okay";
};

&crypto {
	status = "okay";
};

&dpi0 {
	status = "okay";

	ports {
		#address-cells = <1>;
		#size-cells = <0>;
		port@0 {
			reg = <0>;
			dpi0_out: endpoint {
				remote-endpoint = <&hdmi0_in>;
			};
		};
	};
};

&gmac0 {
	status = "okay";
	phy-mode = "trgmii";

	fixed-link {
		speed = <1000>;
		full-duplex;
		pause;
	};
};

&gmac1 {
	status = "okay";
	phy-mode = "rgmii";

	fixed-link {
		speed = <1000>;
		full-duplex;
		pause;
	};
};

&eth {
	status = "okay";

	mdio-bus {
		#address-cells = <1>;
		#size-cells = <0>;

		switch@1f {
			compatible = "mediatek,mt7530";
			reg = <0x1f>;
			reset-gpios = <&pio 33 0>;
			core-supply = <&mt6323_vpa_reg>;
			io-supply = <&mt6323_vemc3v3_reg>;

			ports {
				#address-cells = <1>;
				#size-cells = <0>;

				port@0 {
					reg = <0>;
					label = "wan";
				};

				port@1 {
					reg = <1>;
					label = "lan0";
				};

				port@2 {
					reg = <2>;
					label = "lan1";
				};

				port@3 {
					reg = <3>;
					label = "lan2";
				};

				port@4 {
					reg = <4>;
					label = "lan3";
				};

				port@5 {
					reg = <5>;
					label = "cpu";
					ethernet = <&gmac1>;
					phy-mode = "rgmii";

					fixed-link {
						speed = <1000>;
						full-duplex;
						pause;
					};
				};

				port@6 {
					reg = <6>;
					label = "cpu";
					ethernet = <&gmac0>;
					phy-mode = "trgmii";

					fixed-link {
						speed = <1000>;
						full-duplex;
						pause;
					};
				};
			};
		};
	};
};

&hdmi0 {
	pinctrl-names = "default";
	pinctrl-0 = <&hdmi_pins_a>;
	status = "okay";

	ports {
		#address-cells = <1>;
		#size-cells = <0>;
		port@0 {
			reg = <0>;
			hdmi0_in: endpoint {
				remote-endpoint = <&dpi0_out>;
			};
		};

		port@1 {
			reg = <1>;
			hdmi0_out: endpoint {
				remote-endpoint = <&hdmi_connector_in>;
			};
		};
	};
};

&hdmiddc0 {
	pinctrl-names = "default";
	pinctrl-0 = <&hdmi_ddc_pins_a>;
	status = "okay";
};

&hdmi_phy {
	mediatek,ibias = <0xa>;
	mediatek,ibias_up = <0x1c>;
	status = "okay";
};

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

&i2c1 {
	pinctrl-names = "default";
	pinctrl-0 = <&i2c1_pins_a>;
	status = "okay";
};

&mali {
	mali-supply = <&reg_vgpu>;
	status = "okay";
};

&mmc0 {
	pinctrl-names = "default", "state_uhs";
	pinctrl-0 = <&mmc0_pins_default>;
	pinctrl-1 = <&mmc0_pins_uhs>;
	status = "okay";
	bus-width = <8>;
	max-frequency = <50000000>;
	cap-mmc-highspeed;
	vmmc-supply = <&reg_3p3v>;
	vqmmc-supply = <&reg_1p8v>;
	non-removable;
};

&mmc1 {
	pinctrl-names = "default", "state_uhs";
	pinctrl-0 = <&mmc1_pins_default>;
	pinctrl-1 = <&mmc1_pins_uhs>;
	status = "okay";
	bus-width = <4>;
	max-frequency = <50000000>;
	cap-sd-highspeed;
	cd-gpios = <&pio 261 GPIO_ACTIVE_LOW>;
	vmmc-supply = <&reg_3p3v>;
	vqmmc-supply = <&reg_3p3v>;
};

&mt6323keys {
	home {
		status = "disabled";
	};
};

&mt6323_leds {
	status = "okay";

	led@0 {
		reg = <0>;
		label = "bpi-r2:isink:green";
		default-state = "off";
	};

	led@1 {
		reg = <1>;
		label = "bpi-r2:isink:red";
		default-state = "off";
	};

	led@2 {
		reg = <2>;
		label = "bpi-r2:isink:blue";
		default-state = "off";
	};
};

&pcie {
	pinctrl-names = "default";
	pinctrl-0 = <&pcie_default>;
	status = "okay";

	pcie@0,0 {
		status = "okay";
	};

	pcie@1,0 {
		status = "okay";
	};
};

&pcie0_phy {
	status = "okay";
};

&pcie1_phy {
	status = "okay";
};

&pio {
	musb_pins: musb {
		pins-musb {
			pinmux = <MT7623_PIN_237_EXT_SDIO2_FUNC_DRV_VBUS>;
		};
	};
};

&pwm {
	pinctrl-names = "default";
	pinctrl-0 = <&pwm_pins_a>;
	status = "okay";
};

&spi0 {
	pinctrl-names = "default";
	pinctrl-0 = <&spi0_pins_a>;
	status = "okay";
};

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

&uart1 {
	pinctrl-names = "default";
	pinctrl-0 = <&uart1_pins_a>;
	status = "okay";
};

&uart2 {
	pinctrl-names = "default";
	pinctrl-0 = <&uart2_pins_a>;
	status = "okay";
};

&usb0 {
	pinctrl-names = "default";
	pinctrl-0 = <&musb_pins>;
	status = "okay";
	usb-role-switch;

	connector {
		compatible = "gpio-usb-b-connector", "usb-b-connector";
		type = "micro";
		id-gpios = <&pio 44 GPIO_ACTIVE_HIGH>;
	};
};

&usb1 {
	vusb33-supply = <&reg_3p3v>;
	vbus-supply = <&reg_5v>;
	status = "okay";
};

&usb2 {
	vusb33-supply = <&reg_3p3v>;
	vbus-supply = <&reg_5v>;
	status = "okay";
};

&u2phy1 {
	status = "okay";
};

&u3phy1 {
	status = "okay";
};

&u3phy2 {
	status = "okay";
};
