[PATCH 2/2] ipq40xx: add support for eero Cento (J010001)
Connor Northway
contact at cnorthway.com
Wed May 17 10:47:02 PDT 2023
development/internal name: Cento
public name: eero (2nd-gen)
model number: J010001
Hardware Info:
SoC : Qualcomm IPQ4019
RAM : 512 MB (Hynix NT5CC256M16ER-EK)
SPI Flash : 8 MB (Winbond W25Q64JVSS)
eMMC Flash : 4 GB (Kingston EMMC04G-M627)
Wi-Fi : 2.4 Ghz 2x2 802.11n (IPQ4019)
Wi-Fi : 5 Ghz 2x2 802.11ac (IPQ4019)
Ethernet : 2x 10/100/1000
Bluetooth : 5.0 / BLE (Cypress CYW20704)
RGBW LED Controller : Texas Instruments LP5562
Buttons : 1x Reset (bottom of device)
UART & SPI header : see below
Power & USB 2 : USB Type-C, requires 15W 5V/3A
Stock Firmware Layout:
The SPI flash stores U-Boot, U-Boot environment, hardware
calibration, and eero-specific information (keys, serial number,
MAC address, etc).
The eMMC is partitioned into an A/B layout with two sets of an ext2
kernel and ext4 rootfs partition, plus one cache partition.
MAC Address assignment:
One base MAC address is stored in SPI flash, with a space of 32
allocated. We follow stock layout, though stock FW also uses higher
addresses for routing / mesh applications.
Base / WAN : 48:dd:0c:**:**:xx
LAN : 48:dd:0c:**:**:xx + 1
Bluetooth : 48:dd:0c:**:**:xx + 2
Wi-Fi 1 : 48:dd:0c:**:**:xx + 3
Wi-Fi 2 : 48:dd:0c:**:**:xx + 4
Other OpenWrt details:
RGBW LED has been configured to the following:
Red: Failsafe
Green: Running
Blue: Upgrade
White: Boot
Ethernet ports are not labeled. Default config when viewed from
back: right port is WAN, left port is LAN.
UART/SPI Header:
2x5 1.27mm unpopulated SMT header labeled "J2".
Silkscreen dot marks pin 1; pins 2, 9, and 10 labeled with number.
Layout:
SPI cpu bypass --| 1 2 |-- SPI /CS
SPI CLK --| 3 4 |-- SPI DI
SPI DO --| 5 6 |-- GND
???? --| 7 8 |-- 3v3
UART RX --| 9 10 |-- UART TX
To access the SPI flash chip, pull pin 1 high (connect to 3v3)
before applying power through USB. This will disconnect the SPI
lines from the CPU and allow accessing the SPI bus without
contention. As always, do not connect external power to 3v3!
UART settings: 115200 8n1
Logic levels for UART and SPI are 3.3V.
OpenWrt Installation:
Unfortunately, eero has configured U-Boot to autoboot with no delay
and no way to abort boot. There does not appear to be any available
method to boot from an external source without modifications.
To change the bootdelay variable, editing the SPI flash contents
directly is required:
- Use an SPI programmer to make a backup of the flash
- Locate the APPSBLENV partition and modify the environment to have
a non-zero bootdelay value in both locations
- Update the leading CRC32 checksums
- Flash image back to the device and reboot
Details of environment layout:
APPSBLENV is at 0x210000. It contains two redundant copies of
the following struct, each 0x10000 bytes long.
struct env {
uint32_t crc; // calculated only over data[]
unsigned char flags;
unsigned char data[0x10000-5];
};
Once access to the U-Boot shell is achieved:
Use TFTP to load the initramfs image to memory:
`tftpboot <initramfs-image>.itb`
with a TFTP server at 192.168.1.1
or use USB:
`fatload usb <dev[:part]> 0x84000000 <initramfs-image>.itb`
with FAT32 USB drive connected through a powered hub
(use `usb part` to view partitions)
clear the bootargs variable:
`setenv bootargs`
then boot:
`bootm`
Make backups of SPI and eMMC flash!
Use SSH/SCP to transfer the sysupgrade file and run sysupgrade.
The upgrade script will determine which of the two dual-partition
slots the device is currently booting from. It will install to the
inactive slot if installing over stock FW, or the current slot if
upgrading OpenWrt. This leaves the most recent stock FW untouched
for easier restoration to stock. Don't rely on this as a backup!
Restore Stock Firmware:
If installed using sysupgrade and one stock partition set remains,
replace the U-Boot environment variables `bootargs` and `bootcmd`
with the contents of the `*_eero_backup` versions automatically
created during install. Stock firmware should overwrite OpenWrt the
next time it receives an update.
Signed-off-by: Connor Northway <contact at cnorthway.com>
---
package/boot/uboot-envtools/files/ipq40xx | 4 +
package/firmware/ipq-wifi/Makefile | 2 +
.../ipq40xx/base-files/etc/board.d/02_network | 5 +
.../etc/hotplug.d/firmware/11-ath10k-caldata | 8 +
.../etc/hotplug.d/usb/20-bluetooth-mac | 21 +
.../ipq40xx/base-files/lib/upgrade/eero.sh | 94 +++++
.../base-files/lib/upgrade/platform.sh | 3 +
.../arch/arm/boot/dts/qcom-ipq4019-cento.dts | 393 ++++++++++++++++++
target/linux/ipq40xx/image/generic.mk | 13 +
9 files changed, 543 insertions(+)
create mode 100644 target/linux/ipq40xx/base-files/etc/hotplug.d/usb/20-bluetooth-mac
create mode 100644 target/linux/ipq40xx/base-files/lib/upgrade/eero.sh
create mode 100644 target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-cento.dts
diff --git a/package/boot/uboot-envtools/files/ipq40xx b/package/boot/uboot-envtools/files/ipq40xx
index 8d993fae36..e8431048eb 100644
--- a/package/boot/uboot-envtools/files/ipq40xx
+++ b/package/boot/uboot-envtools/files/ipq40xx
@@ -56,6 +56,10 @@ aruba,ap-365)
buffalo,wtr-m2133hp)
ubootenv_add_uci_config "/dev/mtd8" "0x0" "0x40000" "0x20000"
;;
+eero,cento)
+ ubootenv_add_uci_config "/dev/mtd9" "0x0" "0x10000" "0x10000"
+ ubootenv_add_uci_config "/dev/mtd9" "0x10000" "0x10000" "0x10000"
+ ;;
linksys,ea6350v3)
ubootenv_add_uci_config "/dev/mtd7" "0x0" "0x20000" "0x20000"
;;
diff --git a/package/firmware/ipq-wifi/Makefile b/package/firmware/ipq-wifi/Makefile
index aeb690e913..f2e670e65c 100644
--- a/package/firmware/ipq-wifi/Makefile
+++ b/package/firmware/ipq-wifi/Makefile
@@ -38,6 +38,7 @@ ALLWIFIBOARDS:= \
edgecore_ecw5410 \
edgecore_oap100 \
edimax_cax1800 \
+ eero_cento\
extreme-networks_ws-ap3915i \
glinet_gl-a1300 \
glinet_gl-ap1300 \
@@ -143,6 +144,7 @@ $(eval $(call generate-ipq-wifi-package,edgecore_eap102,Edgecore EAP102))
$(eval $(call generate-ipq-wifi-package,edgecore_ecw5410,Edgecore ECW5410))
$(eval $(call generate-ipq-wifi-package,edgecore_oap100,Edgecore OAP100))
$(eval $(call generate-ipq-wifi-package,edimax_cax1800,Edimax CAX1800))
+$(eval $(call generate-ipq-wifi-package,eero_cento,Eero Cento))
$(eval $(call generate-ipq-wifi-package,extreme-networks_ws-ap3915i,Edgecore OAP100))
$(eval $(call generate-ipq-wifi-package,glinet_gl-a1300,GL.iNet GL-A1300))
$(eval $(call generate-ipq-wifi-package,glinet_gl-ap1300,GL.iNet GL-AP1300))
diff --git a/target/linux/ipq40xx/base-files/etc/board.d/02_network b/target/linux/ipq40xx/base-files/etc/board.d/02_network
index cb318d36a3..e5bd04a56e 100644
--- a/target/linux/ipq40xx/base-files/etc/board.d/02_network
+++ b/target/linux/ipq40xx/base-files/etc/board.d/02_network
@@ -32,6 +32,7 @@ ipq40xx_setup_interfaces()
asus,map-ac2200|\
cilab,meshpoint-one|\
edgecore,ecw5211|\
+ eero,cento|\
glinet,gl-ap1300|\
glinet,gl-b2200|\
google,wifi|\
@@ -159,6 +160,10 @@ ipq40xx_setup_macs()
lan_mac=$(mtd_get_mac_ascii bdcfg lanmac)
label_mac=$lan_mac
;;
+ eero,cento)
+ wan_mac=$(mtd_get_mac_ascii 0:IDENTITY mac)
+ lan_mac=$(macaddr_add "$(mtd_get_mac_ascii 0:IDENTITY mac)" 1)
+ ;;
engenius,eap2200|\
engenius,emd1)
lan_mac=$(mtd_get_mac_ascii 0:APPSBLENV ethaddr)
diff --git a/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
index 7f41bdcfcc..4b6072f0fe 100644
--- a/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
+++ b/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
@@ -83,6 +83,10 @@ case "$FIRMWARE" in
caldata_extract "ART" 0x1000 0x2f20
ath10k_patch_mac $(mtd_get_mac_ascii bdcfg wlanmac)
;;
+ eero,cento)
+ caldata_extract "0:ART" 0x1000 0x2f20
+ ath10k_patch_mac $(macaddr_add $(mtd_get_mac_ascii 0:IDENTITY mac) 3)
+ ;;
engenius,emd1)
caldata_extract "0:ART" 0x1000 0x2f20
ath10k_patch_mac $(mtd_get_mac_ascii 0:APPSBLENV wlanaddr)
@@ -178,6 +182,10 @@ case "$FIRMWARE" in
caldata_extract "ART" 0x5000 0x2f20
ath10k_patch_mac $(mtd_get_mac_ascii bdcfg wlanmac_a)
;;
+ eero,cento)
+ caldata_extract "0:ART" 0x5000 0x2f20
+ ath10k_patch_mac $(macaddr_add $(mtd_get_mac_ascii 0:IDENTITY mac) 4)
+ ;;
engenius,emd1)
caldata_extract "0:ART" 0x5000 0x2f20
ath10k_patch_mac $(macaddr_add $(mtd_get_mac_ascii 0:APPSBLENV wlanaddr) 1)
diff --git a/target/linux/ipq40xx/base-files/etc/hotplug.d/usb/20-bluetooth-mac b/target/linux/ipq40xx/base-files/etc/hotplug.d/usb/20-bluetooth-mac
new file mode 100644
index 0000000000..eada210214
--- /dev/null
+++ b/target/linux/ipq40xx/base-files/etc/hotplug.d/usb/20-bluetooth-mac
@@ -0,0 +1,21 @@
+. /lib/functions/system.sh
+
+setup_bluetooth_mac()
+{
+ local board=$(board_name)
+
+ case "$board" in
+ eero,cento)
+ hciconfig hci0 up
+ bdaddr "$(macaddr_add "$(mtd_get_mac_ascii 0:IDENTITY mac)" 2)"
+ hciconfig hci0 reset
+ hciconfig hci0 down
+ ;;
+ esac
+}
+
+if [ "${DRIVER}" = "btusb" ]; then
+ if [ "${ACTION}" = "bind" ]; then
+ setup_bluetooth_mac
+ fi
+fi
diff --git a/target/linux/ipq40xx/base-files/lib/upgrade/eero.sh b/target/linux/ipq40xx/base-files/lib/upgrade/eero.sh
new file mode 100644
index 0000000000..c27c4bfad7
--- /dev/null
+++ b/target/linux/ipq40xx/base-files/lib/upgrade/eero.sh
@@ -0,0 +1,94 @@
+# Flashes upgrade package using eero's A/B partition scheme
+# will leave most recent eero installation alone as a backup
+platform_do_upgrade_eero_cento() {
+ local tar_file="$1"
+
+ local current_bootcmd
+ local current_bootargs
+ current_bootcmd=$(fw_printenv -n bootcmd)
+ current_bootargs=$(fw_printenv -n bootargs)
+ local first_install
+ first_install=$(echo "$current_bootcmd" | grep -c "eero_kernel")
+ if [ $first_install -eq 1 ]; then
+ echo "first installation! backing up important stock env variables"
+ fw_setenv -s - <<-EOF
+ bootcmd_eero_backup $current_bootcmd
+ bootargs_eero_backup $current_bootargs
+ EOF
+ fi
+
+###
+# Determine partitions
+###
+ local current_bootpart
+ local current_rootpart
+ current_bootpart=$(echo "$current_bootcmd" | sed -nr 's/.*ext2load mmc 0:([[:digit:]]).*/\1/p')
+ current_rootpart=$(echo "$current_bootargs" | sed -nr 's/.*root=\/dev\/mmcblk0p([[:digit:]]).*/\1/p')
+
+ # validate that they're sane; determine inactive partitions
+ if [ "$current_bootpart" -eq 1 ] && [ "$current_rootpart" -eq 3 ]; then
+ local inactive_bootpart=2
+ local inactive_rootpart=4
+ echo "currently booting from slot A"
+ elif [ "$current_bootpart" -eq 2 ] && [ "$current_rootpart" -eq 4 ]; then
+ local inactive_bootpart=1
+ local inactive_rootpart=3
+ echo "currently booting from slot B"
+ else
+ echo "invalid boot or root partitions"
+ return 1
+ fi
+
+ # on the first install, we want to install to the inactive slot
+ # (easier to recover to known-good, configured stock OS).
+ # on subsequent installs, continue using the active slot to keep
+ # the stock install intact.
+ if $first_install; then
+ local install_bootpart=$inactive_bootpart
+ local install_rootpart=$inactive_rootpart
+ echo "installing to inactive slot;"
+ else
+ local install_bootpart=$current_bootpart
+ local install_rootpart=$current_rootpart
+ echo "installing to currently booted slot;"
+ fi
+ echo "boot: $install_bootpart"
+ echo "root: $install_rootpart"
+
+###
+# Install kernel to ext2 part
+###
+ local board_dir=$(tar tf $tar_file | grep -m 1 '^sysupgrade-.*/$')
+ board_dir=${board_dir%/}
+
+ # mount boot partition
+ mkdir /mnt/bootpart &&
+ mount -t ext2 /dev/mmcblk0p"$install_bootpart" /mnt/bootpart ||
+ { echo "unable to mount boot partition" && return 1 ; }
+
+ # clean it out and install new kernel image
+ rm -r /mnt/bootpart/* &&
+ mkdir /mnt/bootpart/lost+found &&
+ tar Oxf $tar_file ${board_dir}/kernel > /mnt/bootpart/kernel.itb ||
+ { echo "unable to install kernel image" && return 1 ; }
+
+ echo "installed kernel image to /dev/mmcblk0p$install_bootpart"
+
+###
+# Install rootfs using emmc_do_upgrade
+###
+ EMMC_ROOT_DEV=/dev/mmcblk0p"$install_rootpart"
+ emmc_do_upgrade $tar_file
+
+ echo "done with emmc_do_upgrade, rootfs should be installed"
+
+###
+# Finalize env vars
+###
+ fw_setenv -s - <<-EOF
+ bootcmd ext2load mmc 0:$install_bootpart 0x84000000 kernel.itb && bootm; reset
+ bootargs root=/dev/mmcblk0p$install_rootpart rootwait
+ EOF
+
+ echo "new boot cmd/args set, install complete!"
+}
diff --git a/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh b/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh
index 988921fa8c..74f425861b 100644
--- a/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh
+++ b/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh
@@ -156,6 +156,9 @@ platform_do_upgrade() {
compex,wpj419)
nand_do_upgrade "$1"
;;
+ eero,cento)
+ platform_do_upgrade_eero_cento "$1"
+ ;;
google,wifi)
export_bootdevice
export_partdevice CI_ROOTDEV 0
diff --git a/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-cento.dts b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-cento.dts
new file mode 100644
index 0000000000..5c646de918
--- /dev/null
+++ b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-cento.dts
@@ -0,0 +1,393 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+#include "qcom-ipq4019.dtsi"
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/leds/common.h>
+#include <dt-bindings/soc/qcom,tcsr.h>
+
+/ {
+ model = "Eero Cento (J010001)";
+ compatible = "eero,cento";
+
+ chosen {
+ stdout-path = &blsp1_uart1;
+ };
+
+ aliases {
+ led-boot = &led_status_white;
+ led-failsafe = &led_status_red;
+ led-running = &led_status_green;
+ led-upgrade = &led_status_blue;
+ };
+
+ memory {
+ device_type = "memory";
+ reg = <0x80000000 0x20000000>;
+ };
+
+ keys {
+ compatible = "gpio-keys";
+
+ reset {
+ label = "reset";
+ gpios = <&tlmm 18 GPIO_ACTIVE_LOW>;
+ linux,code = <KEY_RESTART>;
+ };
+ };
+
+ tcsr at 1949000 {
+ compatible = "qcom,tcsr";
+ reg = <0x1949000 0x100>;
+ qcom,wifi_glb_cfg = <TCSR_WIFI_GLB_CFG>;
+ };
+
+ tcsr at 194b000 {
+ compatible = "qcom,tcsr";
+ reg = <0x194b000 0x100>;
+ qcom,usb-hsphy-mode-select = <TCSR_USB_HSPHY_HOST_MODE>;
+ };
+
+ ess_tcsr at 1953000 {
+ compatible = "qcom,tcsr";
+ reg = <0x1953000 0x1000>;
+ qcom,ess-interface-select = <TCSR_ESS_PSGMII>;
+ };
+
+ tcsr at 1957000 {
+ compatible = "qcom,tcsr";
+ reg = <0x1957000 0x100>;
+ qcom,wifi_noc_memtype_m0_m2 = <TCSR_WIFI_NOC_MEMTYPE_M0_M2>;
+ };
+
+};
+
+&tlmm {
+ serial_0_pins: serial0_pinmux {
+ mux {
+ pins = "gpio16", "gpio17";
+ function = "blsp_uart0";
+ bias-disable;
+ };
+ };
+
+ 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";
+ bias-disable;
+ };
+
+ pinconf_cs {
+ pins = "gpio12";
+ bias-disable;
+ output-high;
+ };
+ };
+
+ sd_0_pins: sd_0_pinmux {
+ sd0 {
+ function = "sdio";
+ pins = "gpio23", "gpio24", "gpio25", "gpio26", "gpio29",
+ "gpio30", "gpio31", "gpio32";
+ drive-strength = <4>;
+ bias-disable;
+ };
+
+ sdclk {
+ pins = "gpio27";
+ function = "sdio";
+ drive-strength = <4>;
+ bias-disable;
+ };
+
+ sdcmd {
+ pins = "gpio28";
+ function = "sdio";
+ drive-strength = <4>;
+ bias-disable;
+ };
+ };
+
+ i2c_0_pins: i2c_0_pinmux {
+ mux {
+ pins = "gpio20", "gpio21";
+ function = "blsp_i2c0";
+ bias-disable;
+ };
+ };
+
+ i2c_1_pins: i2c_1_pinmux {
+ mux {
+ pins = "gpio34", "gpio35";
+ function = "blsp_i2c1";
+ bias-disable;
+ };
+ };
+
+ // cypress cyw20704 connected over usb
+ bluetooth-enable {
+ gpio-hog;
+ gpios = <48 GPIO_ACTIVE_HIGH>;
+ output-high;
+ };
+};
+
+&usb3_ss_phy {
+ status = "ok";
+};
+
+&usb3_hs_phy {
+ status = "ok";
+};
+
+&usb3 {
+ status = "ok";
+};
+
+&usb2_hs_phy {
+ status = "ok";
+};
+
+&usb2 {
+ status = "ok";
+};
+
+&blsp1_uart1 {
+ status = "ok";
+
+ pinctrl-0 = <&serial_0_pins>;
+ pinctrl-names = "default";
+};
+
+&watchdog {
+ status = "ok";
+};
+
+&prng {
+ status = "ok";
+};
+
+&crypto {
+ status = "ok";
+};
+
+&cryptobam {
+ status = "ok";
+};
+
+&blsp_dma {
+ status = "ok";
+};
+
+&blsp1_spi1 {
+ status = "ok";
+
+ pinctrl-0 = <&spi_0_pins>;
+ pinctrl-names = "default";
+ cs-gpios = <&tlmm 12 GPIO_ACTIVE_HIGH>;
+
+ flash at 0 {
+ reg = <0>;
+ compatible = "jedec,spi-nor";
+ spi-max-frequency = <24000000>;
+
+ partitions {
+ compatible = "fixed-partitions";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ partition at 0 {
+ label = "0:SBL1";
+ reg = <0x0 0x40000>;
+ read-only;
+ };
+
+ partition at 40000 {
+ label = "0:MIBIB";
+ reg = <0x40000 0x20000>;
+ read-only;
+ };
+
+ partition at 60000 {
+ label = "0:QSEE";
+ reg = <0x60000 0x60000>;
+ read-only;
+ };
+
+ partition at c0000 {
+ label = "0:CDT";
+ reg = <0xc0000 0x10000>;
+ read-only;
+ };
+
+ partition at d0000 {
+ label = "0:DDRPARAMS";
+ reg = <0xd0000 0x10000>;
+ read-only;
+ };
+
+ partition at e0000 {
+ label = "0:ART";
+ reg = <0xe0000 0x10000>;
+ read-only;
+ };
+
+ partition at f0000 {
+ label = "0:APPSBL";
+ reg = <0xf0000 0x100000>;
+ read-only;
+ };
+
+ partition at 1f0000 {
+ label = "0:IDENTITY";
+ reg = <0x1f0000 0x10000>;
+ read-only;
+ };
+
+ partition at 200000 {
+ label = "0:PK";
+ reg = <0x200000 0x10000>;
+ read-only;
+ };
+
+ partition at 210000 {
+ label = "0:APPSBLENV";
+ reg = <0x210000 0x20000>;
+ // r/w allowed because installation needs to modify u-boot env
+ };
+
+ partition at 230000 {
+ label = "0:SYSVAR";
+ reg = <0x230000 0x10000>;
+ read-only;
+ };
+ };
+ };
+};
+
+&vqmmc {
+ status = "ok";
+};
+
+&sdhci {
+ status = "ok";
+
+ pinctrl-0 = <&sd_0_pins>;
+ pinctrl-names = "default";
+ vqmmc-supply = <&vqmmc>;
+ non-removable;
+ no-1-8-v;
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ emmc at 0 {
+ compatible = "mmc-card";
+ reg = <0>;
+ };
+};
+
+&blsp1_i2c3 {
+ status = "ok";
+
+ pinctrl-0 = <&i2c_0_pins>;
+ pinctrl-names = "default";
+};
+
+&blsp1_i2c4 {
+ status = "ok";
+
+ pinctrl-0 = <&i2c_1_pins>;
+ pinctrl-names = "default";
+
+ led-controller at 30 {
+ compatible = "ti,lp5562";
+ reg = <0x30>;
+ clock-mode = /bits/ 8 <2>;
+ skip-reset;
+
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ // current limits from stock dt
+
+ led_status_red: led at 0 {
+ chan-name = "red:status";
+ led-cur = /bits/ 8 <0xB4>; /* 18.0 mA */
+ max-cur = /bits/ 8 <0xFF>; /* 25.5 mA */
+ reg = <0>;
+ color = <LED_COLOR_ID_RED>;
+ };
+
+ led_status_green: led at 1 {
+ chan-name = "green:status";
+ led-cur = /bits/ 8 <0xB4>; /* 18.0 mA */
+ max-cur = /bits/ 8 <0xC8>; /* 20.0 mA */
+ reg = <1>;
+ color = <LED_COLOR_ID_GREEN>;
+ };
+
+ led_status_blue: led at 2 {
+ chan-name = "blue:status";
+ led-cur = /bits/ 8 <0xC8>; /* 20.0 mA */
+ max-cur = /bits/ 8 <0xC8>; /* 20.0 mA */
+ reg = <2>;
+ color = <LED_COLOR_ID_BLUE>;
+ };
+
+ led_status_white: led at 3 {
+ chan-name = "white:status";
+ led-cur = /bits/ 8 <0x96>; /* 15.0 mA */
+ max-cur = /bits/ 8 <0x96>; /* 15.0 mA */
+ reg = <3>;
+ color = <LED_COLOR_ID_WHITE>;
+ };
+ };
+};
+
+&gmac {
+ status = "ok";
+};
+
+&mdio {
+ status = "ok";
+};
+
+&switch {
+ status = "ok";
+};
+
+&swport4 {
+ status = "ok";
+
+ label = "wan"; //arbitrary, no marking
+};
+
+&swport5 {
+ status = "ok";
+
+ label = "lan"; //arbitrary, no marking
+};
+
+&wifi0 {
+ status = "ok";
+
+ qcom,ath10k-calibration-variant = "Eero-Cento";
+ qcom,coexist-support = <1>;
+ qcom,coexist-gpio-pin = <52>;
+};
+
+&wifi1 {
+ status = "ok";
+
+ qcom,ath10k-calibration-variant = "Eero-Cento";
+};
diff --git a/target/linux/ipq40xx/image/generic.mk b/target/linux/ipq40xx/image/generic.mk
index adce4fe0f2..14e209fd2a 100644
--- a/target/linux/ipq40xx/image/generic.mk
+++ b/target/linux/ipq40xx/image/generic.mk
@@ -448,6 +448,19 @@ endef
# Missing DSA Setup
#TARGET_DEVICES += edgecore_oap100
+define Device/eero_cento
+ $(call Device/FitImage)
+ $(call Device/UbiFit)
+ DEVICE_VENDOR := Eero
+ DEVICE_MODEL := Cento (J010001)
+ SOC := qcom-ipq4019
+ DEVICE_PACKAGES := e2fsprogs kmod-fs-f2fs mkf2fs kmod-mmc kmod-fs-ext4 \
+ ipq-wifi-eero_cento kmod-bluetooth bluez-libs bluez-utils
+ IMAGES := sysupgrade.bin
+ IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
+endef
+TARGET_DEVICES += eero_cento
+
define Device/engenius_eap1300
$(call Device/FitImage)
DEVICE_VENDOR := EnGenius
--
2.40.1
More information about the openwrt-devel
mailing list