/dts-v1/;
#include "mt7981.dtsi"
/ {
	model = "MediaTek MT7981 RFB/R138";
	compatible = "mediatek,mt7981-spim-snand-rfb";
	chosen {
		bootargs = "console=ttyS0,115200n1 loglevel=8  \
				earlycon=uart8250,mmio32,0x11002000";
	};

	memory {
		// fpga ddr2: 128MB*2
		reg = <0 0x40000000 0 0x20000000>;
	};

	gsw: gsw@0 {
                compatible = "mediatek,mt753x";
                mediatek,ethsys = <&ethsys>;
                #address-cells = <1>;
                #size-cells = <0>;
	};

	gpio-leds {
		compatible = "gpio-leds";
		status {
			label = "oem:green:status";
			gpios = <&pio 8 GPIO_ACTIVE_LOW>;
		};

		blue {
			label = "oem:green:blue";
			gpios = <&pio 10 GPIO_ACTIVE_LOW>;
		};
		
		red {
			label = "oem:green:red";
			gpios = <&pio 4 GPIO_ACTIVE_LOW>;
		};

		lan {
			label = "oem:green:lan";
			gpios = <&pio 9 GPIO_ACTIVE_LOW>;
		};

		wan {
			label = "oem:green:wan";
			gpios = <&pio 11 GPIO_ACTIVE_LOW>;
		};
		
		wifi {
			label = "oem:green:wifi";
			gpios = <&pio 6 GPIO_ACTIVE_LOW>;
		};

		wifi5g {
			label = "oem:green:wifi5g";
			gpios = <&pio 7 GPIO_ACTIVE_LOW>;
		};
	};

	gpio-keys-polled {
		compatible = "gpio-keys-polled";
		#address-cells = <1>;
		#size-cells = <0>;
		poll-interval = <20>;

		reset {
			label = "reset";
			gpios = <&pio 1 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_RESTART>;
		};

		wps {
			label = "wps";
			gpios = <&pio 0 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_WPS_BUTTON>;
		};
	};

	gpio_export {
		compatible = "gpio-export";
		#size-cells = <0>;

		usb3en {
			gpio-export,name = "usb3en";
			gpio-export,output = <1>;
			gpios = <&pio 35 GPIO_ACTIVE_HIGH>;
		};
	};

	nmbm_spim_nand {
		compatible = "generic,nmbm";

		#address-cells = <1>;
		#size-cells = <1>;

		lower-mtd-device = <&spi_nand>;
		forced-create;

		partitions {
			compatible = "fixed-partitions";
			#address-cells = <1>;
			#size-cells = <1>;

			partition@0 {
				label = "BL2";
				reg = <0x00000 0x0100000>;
				read-only;
			};

			partition@100000 {
				label = "u-boot-env";
				reg = <0x0100000 0x0080000>;
			};

			partition@180000 {
				label = "Factory";
				reg = <0x180000 0x0200000>;
			};
			
			bdinfo: partition@380000 {
				label = "bdinfo";
				reg = <0x380000 0x0040000>;
			};

			partition@3C0000 {
				label = "FIP";
				reg = <0x3C0000 0x0200000>;
			};

			partition@5C0000 {
				label = "ubi";
				reg = <0x5C0000 0xE600000>;
			};
		};
	};

	sound_wm8960 {
		compatible = "mediatek,mt79xx-wm8960-machine";
		mediatek,platform = <&afe>;
		audio-routing = "Headphone", "HP_L",
				"Headphone", "HP_R",
				"LINPUT1", "AMIC",
				"RINPUT1", "AMIC";
		mediatek,audio-codec = <&wm8960>;
		status = "disabled";
	};

	sound_si3218x {
		compatible = "mediatek,mt79xx-si3218x-machine";
		mediatek,platform = <&afe>;
		mediatek,ext-codec = <&proslic_spi>;
		status = "disabled";
	};
};

&afe {
	pinctrl-names = "default";
	pinctrl-0 = <&pcm_pins>;
	status = "okay";
};

&i2c0 {
	pinctrl-names = "default";
	pinctrl-0 = <&i2c_pins>;
	status = "disabled";

	wm8960: wm8960@1a {
		compatible = "wlf,wm8960";
		reg = <0x1a>;
	};
};

&uart0 {
	status = "okay";
};

&watchdog {
	status = "okay";
};

&eth {
        status = "okay";
        lower-mtd-name = "bdinfo";

        gmac0: mac@0 {
			compatible = "mediatek,eth-mac";
			reg = <0>;
			mtd-mac-address = <&bdinfo 0xDE00>;
			phy-mode = "2500base-x";

			fixed-link {
				speed = <2500>;
				full-duplex;
				pause;
			};
        };
		
        mdio: mdio-bus {
			#address-cells = <1>;
			#size-cells = <0>;
		};
};

&gsw {
        mediatek,mdio = <&mdio>;
        mediatek,portmap = "wllll";
        mediatek,mdio_master_pinmux = <1>;
        reset-gpios = <&pio 39 0>;
        interrupt-parent = <&pio>;
        interrupts = <38 IRQ_TYPE_LEVEL_HIGH>;
        status = "okay";

        port6: port@6 {
                compatible = "mediatek,mt753x-port";
                reg = <6>;
                phy-mode = "sgmii";
                fixed-link {
                        speed = <2500>;
                        full-duplex;
                };
        };
};

&hnat {
	mtketh-wan = "eth0.2";
	mtketh-lan = "eth0.1";
	mtketh-ppd = "eth0";
	mtketh-max-gmac = <1>;
	status = "okay";
};

&spi0 {
	pinctrl-names = "default";
	pinctrl-0 = <&spi0_flash_pins>;
	status = "okay";
	spi_nand: spi_nand@0 {
		#address-cells = <1>;
		#size-cells = <1>;
		compatible = "spi-nand";
		reg = <0>;
		spi-max-frequency = <52000000>;
		spi-tx-bus-width = <4>;
		spi-rx-bus-width = <4>;
	};
};

&spi1 {
	pinctrl-names = "default";
	pinctrl-0 = <&spic_pins>;
	status = "disabled";

	proslic_spi: proslic_spi@0 {
		compatible = "silabs,proslic_spi";
		reg = <0>;
		spi-max-frequency = <10000000>;
		spi-cpha = <1>;
		spi-cpol = <1>;
		channel_count = <1>;
		debug_level = <4>;       /* 1 = TRC, 2 = DBG, 4 = ERR */
		reset_gpio = <&pio 15 0>;
		ig,enable-spi = <1>;     /* 1: Enable, 0: Disable */
	};
};

&pio {

	i2c_pins: i2c-pins-g0 {
                mux {
                        function = "i2c";
                        groups = "i2c0_0";
                };
        };

        pcm_pins: pcm-pins-g0 {
                mux {
                        function = "pcm";
                        groups = "pcm";
                };
        };

        pwm0_pin: pwm0-pin-g0 {
                mux {
                        function = "pwm";
                        groups = "pwm0_0";
                };
        };

        pwm1_pin: pwm1-pin-g0 {
                mux {
                        function = "pwm";
                        groups = "pwm1_0";
                };
        };

        pwm2_pin: pwm2-pin {
                mux {
                        function = "pwm";
                        groups = "pwm2";
                };
        };

	spi0_flash_pins: spi0-pins {
		mux {
			function = "spi";
			groups = "spi0", "spi0_wp_hold";
		};

		conf-pu {
			pins = "SPI0_CS", "SPI0_HOLD", "SPI0_WP";
			drive-strength = <MTK_DRIVE_8mA>;
			bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
		};

		conf-pd {
			pins = "SPI0_CLK", "SPI0_MOSI", "SPI0_MISO";
			drive-strength = <MTK_DRIVE_8mA>;
			bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
		};
	};

	spic_pins: spi1-pins {
		mux {
			function = "spi";
			groups = "spi1_1";
		};
	};

	uart1_pins: uart1-pins-g1 {
                mux {
                        function = "uart";
                        groups = "uart1_1";
                };
        };

	uart2_pins: uart2-pins-g1 {
		mux {
                        function = "uart";
                        groups = "uart2_1";
                };
        };
};

&xhci {
	mediatek,u3p-dis-msk = <0x0>;
	phys = <&u2port0 PHY_TYPE_USB2>,
	       <&u3port0 PHY_TYPE_USB3>;
	status = "okay";
};
