// SPDX-License-Identifier: GPL-2.0-or-later OR MIT

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

/ {
	aliases {
		led-boot = &led_status_white;
		led-failsafe = &led_status_red;
		led-running = &led_status_green;
		led-upgrade = &led_status_blue;
		label-mac-device = &gmac;
	};

	soc {
		counter@4a1000 {
			compatible = "qcom,qca-gcnt";
			reg = <0x4a1000 0x4>;
		};

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

		tcsr@194b000 {
			status = "okay";

			compatible = "qcom,tcsr";
			reg = <0x194b000 0x100>;
			qcom,usb-hsphy-mode-select = <TCSR_USB_HSPHY_HOST_MODE>;
		};

		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>;
		};
	};

	keys {
		compatible = "gpio-keys";

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

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

	leds {
		compatible = "gpio-leds";

		led-0 {
			function = LED_FUNCTION_POWER;
			color = <LED_COLOR_ID_GREEN>;
			gpios = <&tlmm 63 GPIO_ACTIVE_HIGH>;
			default-state = "on";
		};

		led-1 {
			function = LED_FUNCTION_POWER;
			color = <LED_COLOR_ID_RED>;
			gpios = <&tlmm 64 GPIO_ACTIVE_HIGH>;
			panic-indicator;
		};

		led_status_green: led-2 {
			function = LED_FUNCTION_STATUS;
			color = <LED_COLOR_ID_GREEN>;
			gpios = <&tlmm 53 GPIO_ACTIVE_HIGH>;
		};

		led_status_red: led-3 {
			function = LED_FUNCTION_STATUS;
			color = <LED_COLOR_ID_RED>;
			gpios = <&tlmm 54 GPIO_ACTIVE_HIGH>;
		};

		led_status_blue: led-4 {
			function = LED_FUNCTION_STATUS;
			color = <LED_COLOR_ID_BLUE>;
			gpios = <&tlmm 57 GPIO_ACTIVE_HIGH>;
		};

		led_status_white: led-5 {
			function = LED_FUNCTION_STATUS;
			color = <LED_COLOR_ID_WHITE>;
			gpios = <&tlmm 60 GPIO_ACTIVE_HIGH>;
		};
	};
};

&watchdog {
	status = "okay";
};

&prng {
	status = "okay";
};

&crypto {
	status = "okay";
};

&vqmmc {
	status = "okay";
};

&sdhci {
	status = "okay";

	pinctrl-0 = <&sd_pins>;
	pinctrl-names = "default";
	cd-gpios = <&tlmm 22 GPIO_ACTIVE_LOW>;
	vqmmc-supply = <&vqmmc>;
};

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

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

	serial_pins: serial_pinmux {
		mux {
			pins = "gpio16", "gpio17";
			function = "blsp_uart0";
			bias-disable;
		};
	};

	i2c_0_pins: i2c_0_pinmux {
		pinmux {
			function = "blsp_i2c0";
			pins = "gpio58", "gpio59";
			bias-disable;
		};
	};

	sd_pins: sd_pins {
		pinmux {
			function = "sdio";
			pins = "gpio23", "gpio24", "gpio25", "gpio26",
				"gpio28", "gpio29", "gpio30", "gpio31";
			drive-strength = <10>;
		};

		pinmux_sd_clk {
			function = "sdio";
			pins = "gpio27";
			drive-strength = <16>;
		};

		pinmux_sd7 {
			function = "sdio";
			pins = "gpio32";
			drive-strength = <10>;
			bias-disable;
		};
	};
};

&blsp_dma {
	status = "okay";
};

&blsp1_i2c3 {
	pinctrl-0 = <&i2c_0_pins>;
	pinctrl-names = "default";

	status = "okay";

	led-controller@27 {
		#address-cells = <1>;
		#size-cells = <0>;
		compatible = "ti,tlc59108"; /* really is tlc59208f */
		reg = <0x27>;

		led0@0 {
			label = "rgb:led0";
			reg = <0x0>;
			linux,default-trigger = "default-on";
		};

		led1@1 {
			label = "rgb:led1";
			reg = <0x1>;
			linux,default-trigger = "default-on";
		};

		led2@2 {
			label = "rgb:led2";
			reg = <0x2>;
			linux,default-trigger = "default-on";
		};

		led3@3 {
			label = "rgb:led3";
			reg = <0x3>;
			linux,default-trigger = "default-on";
		};

		led4@4 {
			label = "rgb:led4";
			reg = <0x4>;
			linux,default-trigger = "default-on";
		};

		led5@5 {
			label = "rgb:led5";
			reg = <0x5>;
			linux,default-trigger = "default-on";
		};

		led6@6 {
			label = "rgb:led6";
			reg = <0x6>;
			linux,default-trigger = "default-on";
		};

		led7@7 {
			label = "rgb:led7";
			reg = <0x7>;
			linux,default-trigger = "default-on";
		};
	};
};

&blsp1_uart1 {
	status = "okay";

	pinctrl-0 = <&serial_pins>;
	pinctrl-names = "default";
};

&cryptobam {
	status = "okay";
};

&mdio {
	status = "okay";
	pinctrl-0 = <&mdio_pins>;
	pinctrl-names = "default";
};

&gmac {
	status = "okay";
};

&switch {
	status = "okay";
};

&swport1 {
	status = "okay";

	label = "wan";
};

&swport2 {
	status = "okay";

	label = "lan1";
};

&swport3 {
	status = "okay";

	label = "lan2";
};

&swport4 {
	status = "okay";

	label = "lan3";
};

&ethphy4 {
	status = "disabled";
};

&pcie0 {
	status = "okay";

	perst-gpio = <&tlmm 38 GPIO_ACTIVE_LOW>;
	wake-gpio = <&tlmm 50 GPIO_ACTIVE_LOW>;

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

		wifi@1,0 {
			compatible = "qcom,ath10k";
			status = "okay";
			reg = <0x00010000 0 0 0 0>;
			ieee80211-freq-limit = <5470000 5875000>;
			qcom,ath10k-calibration-variant = "Netgear-Orbi-Pro-SRK60";
		};
	};
};

&wifi0 {
	status = "okay";

	qcom,ath10k-calibration-variant = "Netgear-Orbi-Pro-SRK60";
};

&wifi1 {
	status = "okay";

	qcom,ath10k-calibration-variant = "Netgear-Orbi-Pro-SRK60";
};
