ipq40xx: Add subtarget for Google WiFi (Gale)
[openwrt/staging/mkresin.git] / target / linux / ipq40xx / files / arch / arm / boot / dts / qcom-ipq4019-wifi.dts
diff --git a/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-wifi.dts b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-wifi.dts
new file mode 100644 (file)
index 0000000..9448e51
--- /dev/null
@@ -0,0 +1,413 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2016, 2018 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016 Google, Inc
+ */
+
+#include "qcom-ipq4019.dtsi"
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/leds/common.h>
+
+/ {
+       model = "Google WiFi (Gale)";
+       compatible = "google,wifi", "google,gale-v2", "qcom,ipq4019";
+
+       chosen {
+               /*
+                * rootwait: in case we're booting from slow/async USB storage.
+                */
+               bootargs-append = " rootwait";
+               stdout-path = &blsp1_uart1;
+       };
+
+       memory {
+               device_type = "memory";
+               reg = <0x80000000 0x20000000>; /* 512MB */
+       };
+
+       soc {
+               ess-switch@c000000 {
+                       status = "okay";
+               };
+
+               edma@c080000 {
+                       status = "okay";
+               };
+
+               ess-psgmii@98000 {
+                       status = "okay";
+               };
+       };
+};
+
+&tlmm {
+       fw_pinmux {
+               wp {
+                       pins = "gpio53";
+                       output-low;
+               };
+               recovery {
+                       pins = "gpio57";
+                       bias-none;
+               };
+               developer {
+                       pins = "gpio41";
+                       bias-none;
+               };
+       };
+
+       reset802_15_4 {
+               pins = "gpio60";
+       };
+
+       led_reset {
+               pins = "gpio22";
+               output-high;
+       };
+
+       sys_reset {
+               pins = "gpio19";
+               output-high;
+       };
+
+       rx_active {
+               pins = "gpio43";
+               bias-pull,down;
+       };
+
+       spi_0_pins: spi_0_pinmux {
+               pinmux {
+                       function = "blsp_spi0";
+                       pins = "gpio13", "gpio14","gpio15";
+               };
+               pinmux_cs {
+                       function = "gpio";
+                       pins = "gpio12";
+               };
+               pinconf {
+                       pins = "gpio13", "gpio14","gpio15";
+                       drive-strength = <12>;
+                       bias-disable;
+               };
+               pinconf_cs {
+                       pins = "gpio12";
+                       drive-strength = <2>;
+                       bias-disable;
+                       output-high;
+               };
+       };
+
+       spi_1_pins: spi_1_pinmux {
+               pinmux {
+                       function = "blsp_spi1";
+                       pins = "gpio44", "gpio46","gpio47";
+               };
+               pinmux_cs {
+                       function = "gpio";
+                       pins = "gpio45";
+               };
+               pinconf {
+                       pins = "gpio44", "gpio46","gpio47";
+                       drive-strength = <12>;
+                       bias-disable;
+               };
+               pinconf_cs {
+                       pins = "gpio45";
+                       drive-strength = <2>;
+                       bias-disable;
+                       output-high;
+               };
+       };
+
+       serial_0_pins: serial0_pinmux {
+               mux {
+                       pins = "gpio16", "gpio17";
+                       function = "blsp_uart0";
+                       bias-disable;
+               };
+       };
+
+       serial_1_pins: serial1_pinmux {
+               mux {
+                       pins = "gpio8", "gpio9", "gpio10", "gpio11";
+                       function = "blsp_uart1";
+                       bias-disable;
+               };
+       };
+
+       i2c_0_pins: i2c_0_pinmux {
+               mux {
+                       pins = "gpio20", "gpio21";
+                       function = "blsp_i2c0";
+                       drive-open-drain;
+               };
+       };
+
+       i2c_1_pins: i2c_1_pinmux {
+               mux {
+                       pins = "gpio34", "gpio35";
+                       function = "blsp_i2c1";
+                       drive-open-drain;
+               };
+       };
+
+       sd_0_pins: sd_0_pinmux {
+               sd0 {
+                       pins = "gpio23", "gpio24", "gpio25", "gpio26", "gpio29", "gpio30", "gpio31", "gpio32";
+                       function = "sdio";
+                       drive-strength = <10>;
+                       bias-pull-up;
+                       pull-up-res = <0>;
+               };
+               sdclk {
+                       pins = "gpio27";
+                       function = "sdio";
+                       drive-strength = <2>;
+                       bias-pull-up;
+                       pull-up-res = <0>;
+               };
+               sdcmd {
+                       pins = "gpio28";
+                       function = "sdio";
+                       drive-strength = <10>;
+                       bias-pull-up;
+                       pull-up-res = <0>;
+               };
+       };
+
+       mdio_pins: mdio_pinmux {
+               mux_1 {
+                       pins = "gpio6";
+                       function = "mdio";
+                       bias-disable;
+               };
+               mux_2 {
+                       pins = "gpio7";
+                       function = "mdc";
+                       bias-disable;
+               };
+               mux_3 {
+                       pins = "gpio40";
+                       function = "gpio";
+                       bias-disable;
+                       output-high;
+               };
+       };
+
+       wifi1_1_pins: wifi2_pinmux {
+               mux {
+                       pins = "gpio58";
+                       output-low;
+               };
+       };
+};
+
+&blsp_dma {
+       status = "okay";
+};
+
+&blsp1_i2c3 {
+       pinctrl-0 = <&i2c_0_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+
+       tpm@20 {
+               compatible = "infineon,slb9645tt";
+               reg = <0x20>;
+               powered-while-suspended;
+       };
+};
+
+&blsp1_i2c4 {
+       pinctrl-0 = <&i2c_1_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+
+       led-controller@32 {
+               #address-cells = <1>;
+               #size-cells = <0>;
+               compatible = "national,lp5523";
+               reg = <0x32>;
+               clock-mode = /bits/ 8 <1>;
+
+#if 1
+               led@0 {
+                       reg = <0>;
+                       chan-name = "LED0_Red";
+                       led-cur = /bits/ 8 <0x64>;
+                       max-cur = /bits/ 8 <0x78>;
+                       color = <LED_COLOR_ID_RED>;
+               };
+
+               led@1 {
+                       reg = <1>;
+                       chan-name = "LED0_Green";
+                       led-cur = /bits/ 8 <0x64>;
+                       max-cur = /bits/ 8 <0x78>;
+                       color = <LED_COLOR_ID_GREEN>;
+               };
+
+               led@2 {
+                       reg = <2>;
+                       chan-name = "LED0_Blue";
+                       led-cur = /bits/ 8 <0x64>;
+                       max-cur = /bits/ 8 <0x78>;
+                       color = <LED_COLOR_ID_BLUE>;
+               };
+#else
+               /*
+                * openwrt isn't ready to handle multi-intensity leds yet
+                * # echo 255 255 255 > /sys/class/leds/tricolor/multi_intensity
+                * # echo 255 > /sys/class/leds/tricolor/brightness
+                */
+               multi-led@2 {
+                       reg = <2>;
+                       color = <LED_COLOR_ID_RGB>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       led@0 {
+                               reg = <0>;
+                               chan-name = "tricolor";
+                               led-cur = /bits/ 8 <0x64>;
+                               max-cur = /bits/ 8 <0x78>;
+                               color = <LED_COLOR_ID_RED>;
+                       };
+
+                       led@1 {
+                               reg = <1>;
+                               chan-name = "tricolor";
+                               led-cur = /bits/ 8 <0x64>;
+                               max-cur = /bits/ 8 <0x78>;
+                               color = <LED_COLOR_ID_GREEN>;
+                       };
+
+                       led@2 {
+                               reg = <2>;
+                               chan-name = "tricolor";
+                               led-cur = /bits/ 8 <0x64>;
+                               max-cur = /bits/ 8 <0x78>;
+                               color = <LED_COLOR_ID_BLUE>;
+                       };
+               };
+#endif
+       };
+};
+
+&blsp1_spi1 {
+       pinctrl-0 = <&spi_0_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+       cs-gpios = <&tlmm 12 GPIO_ACTIVE_HIGH>;
+
+       flash@0 {
+               compatible = "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <24000000>;
+       };
+};
+
+&blsp1_spi2 {
+       pinctrl-0 = <&spi_1_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+       cs-gpios = <&tlmm 45 GPIO_ACTIVE_HIGH>;
+
+       /*
+        * This "spidev" was included in the manufacturer device tree. I
+        * suspect it's the (unused; and removed from later HW spins) Zigbee
+        * radio -- SiliconLabs EM3581 Zigbee? There's no driver or binding for
+        * this at the moment.
+        */
+       spidev@0 {
+               compatible = "spidev";
+               reg = <0>;
+               spi-max-frequency = <24000000>;
+       };
+};
+
+&blsp1_uart1 {
+       pinctrl-0 = <&serial_0_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+};
+
+&blsp1_uart2 {
+       pinctrl-0 = <&serial_1_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+};
+
+&gmac0 {
+       qcom,phy_mdio_addr = <4>;
+       qcom,poll_required = <1>;
+       qcom,forced_speed = <1000>;
+       qcom,forced_duplex = <1>;
+       vlan_tag = <2 0x20>;
+};
+
+&gmac1 {
+       qcom,phy_mdio_addr = <3>;
+       qcom,forced_duplex = <1>;
+       vlan_tag = <1 0x10>;
+};
+
+&mdio {
+       status = "okay";
+       pinctrl-0 = <&mdio_pins>;
+       pinctrl-names = "default";
+};
+
+&prng {
+       status = "okay";
+};
+
+&sdhci {
+       status = "okay";
+       pinctrl-0 = <&sd_0_pins>;
+       pinctrl-names = "default";
+       clock-frequency = <192000000>;
+       vqmmc-supply = <&vqmmc>;
+       non-removable;
+};
+
+&usb2 {
+       status = "okay";
+};
+
+&usb2_hs_phy {
+       status = "okay";
+};
+
+&usb3 {
+       status = "okay";
+};
+
+&usb3_ss_phy {
+       status = "okay";
+};
+
+&usb3_hs_phy {
+       status = "okay";
+};
+
+&vqmmc {
+       status = "okay";
+};
+
+&watchdog {
+       status = "okay";
+};
+
+&wifi0 {
+       status = "okay";
+       qcom,ath10k-calibration-variant = "GO_GALE";
+};
+
+&wifi1 {
+       status = "okay";
+       pinctrl-0 = <&wifi1_1_pins>;
+       pinctrl-names = "default";
+       qcom,ath10k-calibration-variant = "GO_GALE";
+};