summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorINAGAKI Hiroshi <musashino.open@gmail.com>2018-09-10 09:30:28 +0200
committerJohn Crispin <john@phrozen.org>2018-09-10 09:30:28 +0200
commit7768f115349da48f44478f0c5b79f89ffa54c3f4 (patch)
tree9983eeb7e230b01622068ec484494257ee72639d
parent7a67b437e7f72f765fb5affe686f308cb42a09e7 (diff)
downloadmtk-20170518-7768f115349da48f44478f0c5b79f89ffa54c3f4.zip
mtk-20170518-7768f115349da48f44478f0c5b79f89ffa54c3f4.tar.gz
mtk-20170518-7768f115349da48f44478f0c5b79f89ffa54c3f4.tar.bz2
ath79: add support for ELECOM WRC-300GHBK2-I
ELECOM WRC-300GHBK2-I is a 2.4 GHz wireless router, based on Qualcomm Atheros QCA9563. Specification: - Qualcomm Atheros QCA9563 - 64 MB of RAM (DDR2) - 8 MB of Flash (SPI-NOR) - 2T2R 2.4 GHz wifi - SoC internal - 5x 10/100/1000 Mbps Ethernet - 3x LEDs, 4x keys(connected to GPIO: 3x) - UART header on PCB - TX, GND, RX, Vcc from ethernet port side - 115200n8 Flash instruction using factory image: 1. Boot the WRC-300GHBK2-I normaly and connect the computer to its LAN port 2. Access to "http://192.168.2.1/" and open firmware update page ("ファームウェア更新 手動更新(アップデート)") 3. Select the OpenWrt factory image and click apply ("適用") button to perform firmware update 4. On the (initramfs) factory image, execute "mtd erase firmware" to erase stock firmware and execute sysupgrade with squashfs-sysupgrade image for WRC-300GHBK2-I 5. Wait ~150 seconds to complete flashing Signed-off-by: INAGAKI Hiroshi <musashino.open@gmail.com>
-rwxr-xr-xtarget/linux/ath79/base-files/etc/board.d/02_network7
-rw-r--r--target/linux/ath79/dts/qca9563_elecom_wrc-300ghbk2-i.dts160
-rw-r--r--target/linux/ath79/image/generic.mk35
3 files changed, 202 insertions, 0 deletions
diff --git a/target/linux/ath79/base-files/etc/board.d/02_network b/target/linux/ath79/base-files/etc/board.d/02_network
index 3a3c597..6cd794e 100755
--- a/target/linux/ath79/base-files/etc/board.d/02_network
+++ b/target/linux/ath79/base-files/etc/board.d/02_network
@@ -40,6 +40,10 @@ ath79_setup_interfaces()
ucidef_add_switch "switch0" \
"0:lan" "1:lan" "2:lan" "3:lan" "5@eth0"
;;
+ elecom,wrc-300ghbk2-i)
+ ucidef_add_switch "switch0" \
+ "0@eth0" "2:lan:4" "3:lan:3" "4:lan:2" "5:lan:1" "1:wan"
+ ;;
embeddedwireless,dorin)
ucidef_add_switch "switch0" \
"0@eth0" "1:wan" "2:lan:3" "3:lan:2"
@@ -177,6 +181,9 @@ ath79_setup_macs()
lan_mac=$(mtd_get_mac_text "caldata" 65440)
wan_mac=$(mtd_get_mac_text "caldata" 65460)
;;
+ elecom,wrc-300ghbk2-i)
+ wan_mac=$(macaddr_add "$(mtd_get_mac_binary ART 4098)" -2)
+ ;;
iodata,etg3-r)
lan_mac=$(mtd_get_mac_ascii u-boot-env ethaddr)
wan_mac=$(macaddr_add "$lan_mac" -1)
diff --git a/target/linux/ath79/dts/qca9563_elecom_wrc-300ghbk2-i.dts b/target/linux/ath79/dts/qca9563_elecom_wrc-300ghbk2-i.dts
new file mode 100644
index 0000000..7052795
--- /dev/null
+++ b/target/linux/ath79/dts/qca9563_elecom_wrc-300ghbk2-i.dts
@@ -0,0 +1,160 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/dts-v1/;
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+#include "qca956x.dtsi"
+
+/ {
+ model = "ELECOM WRC-300GHBK2-I";
+ compatible = "elecom,wrc-300ghbk2-i", "qca,qca9563";
+
+ chosen {
+ bootargs = "console=ttyS0,115200n8";
+ };
+
+ aliases {
+ led-boot = &power;
+ led-failsafe = &power;
+ led-running = &power;
+ led-upgrade = &power;
+ };
+
+ leds {
+ compatible = "gpio-leds";
+
+ power: power {
+ label = "wrc-300ghbk2-i:white:power";
+ gpios = <&gpio 1 GPIO_ACTIVE_HIGH>;
+ default-state = "on";
+ };
+
+ wlan2g {
+ label = "wrc-300ghbk2-i:white:wlan2g";
+ gpios = <&gpio 7 GPIO_ACTIVE_HIGH>;
+ default-state = "off";
+ linux,default-trigger = "phy0tpt";
+ };
+
+ wps {
+ label = "wrc-300ghbk2-i:red:wps";
+ gpios = <&gpio 9 GPIO_ACTIVE_HIGH>;
+ default-state = "off";
+ };
+ };
+
+ keys {
+ compatible = "gpio-keys";
+
+ reset {
+ label = "reset";
+ gpios = <&gpio 2 GPIO_ACTIVE_LOW>;
+ linux,code = <KEY_RESTART>;
+ debounce-interval = <60>;
+ };
+
+ button_wps {
+ label = "wps";
+ gpios = <&gpio 5 GPIO_ACTIVE_LOW>;
+ linux,code = <KEY_WPS_BUTTON>;
+ debounce-interval = <60>;
+ };
+
+ ap {
+ label = "ap";
+ gpios = <&gpio 6 GPIO_ACTIVE_LOW>;
+ linux,code = <BTN_0>;
+ linux,input-type = <EV_SW>;
+ debounce-interval = <60>;
+ };
+ };
+};
+
+&spi {
+ status = "okay";
+ num-cs = <1>;
+
+ flash@0 {
+ compatible = "jedec,spi-nor";
+ reg = <0>;
+ spi-max-frequency = <25000000>;
+
+ partitions {
+ compatible = "fixed-partitions";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ partition@0 {
+ label = "u-boot";
+ reg = <0x000000 0x040000>;
+ read-only;
+ };
+
+ partition@40000 {
+ label = "u-boot-env";
+ reg = <0x040000 0x010000>;
+ read-only;
+ };
+
+ partition@50000 {
+ label = "nvram";
+ reg = <0x050000 0x020000>;
+ read-only;
+ };
+
+ partition@70000 {
+ label = "firmware";
+ reg = <0x070000 0x770000>;
+ };
+
+ partition@7e0000 {
+ label = "hwconfig";
+ reg = <0x7e0000 0x010000>;
+ read-only;
+ };
+
+ ART: partition@7f0000 {
+ label = "ART";
+ reg = <0x7f0000 0x010000>;
+ read-only;
+ };
+ };
+ };
+};
+
+&mdio0 {
+ status = "okay";
+
+ phy0: ethernet-phy@0 {
+ reg = <0>;
+ phy-mode = "sgmii";
+
+ qca,ar8327-initvals = <
+ 0x04 0x00000080 /* PORT0 PAD MODE CTRL */
+ 0x50 0xcf37cf37 /* LED_CTRL0 */
+ 0x54 0x00000000 /* LED_CTRL1 */
+ 0x58 0x00000000 /* LED_CTRL2 */
+ 0x5c 0x03ffff00 /* LED_CTRL3 */
+ 0x7c 0x0000007e /* PORT0_STATUS */
+ >;
+ };
+};
+
+&eth0 {
+ status = "okay";
+
+ mtd-mac-address = <&ART 0x1002>;
+ mtd-mac-address-increment = <(-1)>;
+ phy-mode = "sgmii";
+ phy-handle = <&phy0>;
+};
+
+&uart {
+ status = "okay";
+};
+
+&wmac {
+ status = "okay";
+ mtd-cal-data = <&ART 0x1000>;
+};
diff --git a/target/linux/ath79/image/generic.mk b/target/linux/ath79/image/generic.mk
index 60dc512..fc38c09 100644
--- a/target/linux/ath79/image/generic.mk
+++ b/target/linux/ath79/image/generic.mk
@@ -17,6 +17,31 @@ define Build/addpattern
-mv "$@.new" "$@"
endef
+define Build/elecom-header
+ $(eval fw_size=$(word 1,$(1)))
+ $(eval edimax_model=$(word 2,$(1)))
+ $(eval product=$(word 3,$(1)))
+ $(eval factory_bin=$(word 4,$(1)))
+ if [ -e $(KDIR)/tmp/$(KERNEL_INITRAMFS_IMAGE) -a "$$(stat -c%s $@)" -lt "$(fw_size)" ]; then \
+ $(CP) $(KDIR)/tmp/$(KERNEL_INITRAMFS_IMAGE) $(factory_bin); \
+ $(STAGING_DIR_HOST)/bin/mkedimaximg \
+ -b -s CSYS -m $(edimax_model) \
+ -f 0x70000 -S 0x01100000 \
+ -i $(factory_bin) -o $(factory_bin).new; \
+ mv $(factory_bin).new $(factory_bin); \
+ ( \
+ echo -n -e "ELECOM\x00\x00$(product)" | dd bs=40 count=1 conv=sync; \
+ echo -n "0.00" | dd bs=16 count=1 conv=sync; \
+ dd if=$(factory_bin); \
+ ) > $(factory_bin).new; \
+ mv $(factory_bin).new $(factory_bin); \
+ $(CP) $(factory_bin) $(BIN_DIR)/; \
+ else \
+ echo "WARNING: initramfs kernel image too big, cannot generate factory image" >&2; \
+ fi
+
+endef
+
define Device/avm_fritz300e
ATH_SOC := ar7242
DEVICE_TITLE := AVM FRITZ!WLAN Repeater 300E
@@ -62,6 +87,16 @@ define Device/dlink_dir-825-b1
endef
TARGET_DEVICES += dlink_dir-825-b1
+define Device/elecom_wrc-300ghbk2-i
+ ATH_SOC := qca9563
+ DEVICE_TITLE := ELECOM WRC-300GHBK2-I
+ IMAGE_SIZE := 7616k
+ KERNEL_INITRAMFS := $$(KERNEL) | pad-to 2 | \
+ elecom-header 7798706 RN51 WRC-300GHBK2-I \
+ $(KDIR)/tmp/$$(KERNEL_INITRAMFS_PREFIX)-factory.bin
+endef
+TARGET_DEVICES += elecom_wrc-300ghbk2-i
+
define Device/embeddedwireless_dorin
ATH_SOC := ar9331
DEVICE_TITLE := Embedded Wireless Dorin