// SPDX-License-Identifier: ISC
/*
 * Copyright (c) 2015 - 2016, The Linux Foundation. All rights reserved.
 * Copyright (c) 2020 Yanase Yuki <dev@zpc.sakura.ne.jp>
 */

#include "qcom-ipq4019.dtsi"
#include <dt-bindings/input/input.h>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/soc/qcom,tcsr.h>

/ {
	model = "Buffalo WTR-M2133HP";
	compatible = "buffalo,wtr-m2133hp", "qcom,ipq4019";

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

	chosen {
		/*
		 * U-Boot adds "ubi.mtd=rootfs root=mtd:ubi_rootfs" to
		 * kernel command line. But we use different partition names,
		 * so we have to set correct parameters.
		 */
		bootargs-append = " ubi.mtd=ubi root=/dev/ubiblock0_1";
	};

	aliases {
		led-boot = &led_power_blue;
		led-failsafe = &led_power_orange;
		led-running = &led_power_white;
		led-upgrade = &led_power_blue;
		label-mac-device = &gmac0;
	};

	soc {
		rng@22000 {
			status = "okay";
		};

		tcsr@1949000 {
			compatible = "qcom,tcsr";
			reg = <0x1949000 0x100>;
			qcom,wifi_glb_cfg = <TCSR_WIFI_GLB_CFG>;
		};

		tcsr@194b000 {
			compatible = "qcom,tcsr";
			reg = <0x194b000 0x100>;
			qcom,usb-hsphy-mode-select = <TCSR_USB_HSPHY_HOST_MODE>;
			status = "okay";
		};

		ess_tcsr@1953000 {
			compatible = "qcom,tcsr";
			reg = <0x1953000 0x1000>;
			qcom,ess-interface-select = <TCSR_ESS_PSGMII>;
		};

		tcsr@1957000 {
			compatible = "qcom,tcsr";
			reg = <0x1957000 0x100>;
			qcom,wifi_noc_memtype_m0_m2 = <TCSR_WIFI_NOC_MEMTYPE_M0_M2>;
		};

		crypto@8e3a000 {
			status = "okay";
		};

		watchdog@b017000 {
			status = "okay";
		};

		ess-switch@c000000 {
			status = "okay";
			switch_lan_bmp = <0x1c>;
		};

		ess-psgmii@98000 {
			status = "okay";
		};

		edma@c080000 {
			status = "okay";
		};

		usb3@8af8800 {
			status = "okay";
		};
	};

	leds {
		compatible = "gpio-leds";

		led_power_white: power_white {
			label = "white:power";
			gpios = <&tlmm 40 GPIO_ACTIVE_HIGH>;
		};

		led_power_orange: power_orange {
			label = "orange:power";
			gpios = <&tlmm 25 GPIO_ACTIVE_HIGH>;
		};

		led_power_blue: power_blue {
			label = "blue:power";
			gpios = <&tlmm 43 GPIO_ACTIVE_HIGH>;
		};

		router_white {
			label = "white:router";
			gpios = <&tlmm 28 GPIO_ACTIVE_HIGH>;
		};

		router_orange {
			label = "orange:router";
			gpios = <&tlmm 46 GPIO_ACTIVE_HIGH>;
		};

		internet_white {
			label = "white:internet";
			gpios = <&tlmm 27 GPIO_ACTIVE_HIGH>;
		};

		internet_orange {
			label = "orange:internet";
			gpios = <&tlmm 45 GPIO_ACTIVE_HIGH>;
		};

		wireless_white {
			label = "white:wireless";
			gpios = <&tlmm 24 GPIO_ACTIVE_HIGH>;
		};

		wireless_orange {
			label = "orange:wireless";
			gpios = <&tlmm 44 GPIO_ACTIVE_HIGH>;
		};
	};

	keys {
		compatible = "gpio-keys";

		auto_mode {
			label = "auto_mode";
			gpios = <&tlmm 9 GPIO_ACTIVE_LOW>;
			linux,code = <BTN_0>;
			linux,input-type = <EV_SW>;
		};

		router_mode {
			label = "router_mode";
			gpios = <&tlmm 10 GPIO_ACTIVE_LOW>;
			linux,code = <BTN_1>;
			linux,input-type = <EV_SW>;
		};

		ap_mode {
			label = "ap_mode";
			gpios = <&tlmm 11 GPIO_ACTIVE_LOW>;
			linux,code = <BTN_2>;
			linux,input-type = <EV_SW>;
		};

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

		wps {
			label = "AOSS Button";
			gpios = <&tlmm 32 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_WPS_BUTTON>;
		};
	};
};

&tlmm {
	serial_0_pins: serial0_pinmux {
		mux {
			pins = "gpio16", "gpio17";
			function = "blsp_uart0";
			bias-disable;
		};
	};

	mdio_pins: mdio_pinmux {
		mux_1 {
			pins = "gpio6";
			function = "mdio";
			bias-pull-up;
		};

		mux_2 {
			pins = "gpio7";
			function = "mdc";
			bias-pull-up;
		};
	};

	nand_pins: nand_pins {
		pullups {
			pins = "gpio52", "gpio53", "gpio58",
				"gpio59";
			function = "qpic";
			bias-pull-up;
		};

		pulldowns {
			pins = "gpio54", "gpio55", "gpio56",
				"gpio57", "gpio60", "gpio61",
				"gpio62", "gpio63", "gpio64",
				"gpio65", "gpio66", "gpio67",
				"gpio68", "gpio69";
			function = "qpic";
			bias-pull-down;
		};
	};

	usb_power {
		line-name = "USB power";
		gpios = <34 GPIO_ACTIVE_HIGH>;
		gpio-hog;
		output-high;
	};
};

&blsp_dma {
	status = "okay";
};

&blsp1_uart1 {
	pinctrl-0 = <&serial_0_pins>;
	pinctrl-names = "default";
	status = "okay";
};

&cryptobam {
	status = "okay";
};

&pcie0 {
	status = "okay";

	bridge@0,0 {
		reg = <0x00000000 0 0 0 0>;
		#address-cells = <3>;
		#size-cells = <2>;
		ranges;

		wifi@0,0 {
			compatible = "qcom,ath10k";
			reg = <0 0 0 0 0>;

			qcom,ath10k-calibration-variant = "Buffalo-WTR-M2133HP";
		};
	};
};

&qpic_bam {
	status = "okay";
};

&nand {
	pinctrl-0 = <&nand_pins>;
	pinctrl-names = "default";
	status = "okay";

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

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

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

			partition@200000 {
				label = "BOOTCONFIG";
				reg = <0x0200000 0x0100000>;
				read-only;
			};

			partition@300000 {
				label = "QSEE";
				reg = <0x0300000 0x0100000>;
				read-only;
			};

			partition@400000 {
				label = "QSEE_1";
				reg = <0x0400000 0x0100000>;
				read-only;
			};

			partition@500000 {
				label = "CDT";
				reg = <0x0500000 0x0080000>;
				read-only;
			};

			partition@580000 {
				label = "CDT_1";
				reg = <0x0580000 0x0080000>;
				read-only;
			};

			partition@600000 {
				label = "BOOTCONFIG1";
				reg = <0x0600000 0x0080000>;
				read-only;
			};

			partition@680000 {
				label = "APPSBLENV";
				reg = <0x0680000 0x0080000>;
			};

			partition@700000 {
				label = "APPSBL";
				reg = <0x0700000 0x0200000>;
				read-only;
			};

			partition@900000 {
				label = "APPSBL_1";
				reg = <0x0900000 0x0200000>;
				read-only;
			};

			art: partition@b00000 {
				label = "ART";
				reg = <0x0b00000 0x0080000>;
				read-only;
			};

			partition@b80000 {
				label = "ART_1";
				reg = <0x0b80000 0x0080000>;
				read-only;
			};

			orgdata: partition@c00000 {
				label = "ORGDATA";
				reg = <0x0c00000 0x0080000>;
				read-only;
			};

			partition@c80000 {
				label = "ORGDATA_1";
				reg = <0x0c80000 0x0080000>;
				read-only;
			};

			partition@d00000 {
				label = "ubi";
				reg = <0x0d00000 0x2900000>;
			};

			partition@3600000 {
				label = "rootfs_recover";
				reg = <0x3600000 0x2900000>;
				read-only;
			};

			partition@5f00000 {
				label = "user_property";
				reg = <0x5f00000 0x1a20000>;
				read-only;
			};
		};
	};
};

&wifi0 {
	status = "okay";
	qcom,ath10k-calibration-variant = "Buffalo-WTR-M2133HP";
	ieee80211-freq-limit = <2400000 2483000>;
};

&wifi1 {
	status = "okay";
	qcom,ath10k-calibration-variant = "Buffalo-WTR-M2133HP";
};

&mdio {
	status = "okay";
	pinctrl-0 = <&mdio_pins>;
	pinctrl-names = "default";
	reset-gpios = <&tlmm 47 GPIO_ACTIVE_LOW>;
};

&gmac0 {
	mtd-mac-address = <&orgdata 0x20>;
};

&gmac1 {
	mtd-mac-address = <&orgdata 0x20>;
};

&usb3_ss_phy {
	status = "okay";
};

&usb3_hs_phy {
	status = "okay";
};