From d3e832d6fda8a39e7ec262994f75dac67353dcae Mon Sep 17 00:00:00 2001
From: DENG Qingfang <dengqf6@mail2.sysu.edu.cn>
Date: Tue, 23 Jul 2019 20:12:48 +0800
Subject: [PATCH] ramips: add support for HiWiFi HC5761A

HiWiFi HC5761A is an "MT7628AN variant" of HC5761

Specifications:
- MediaTek MT7628AN 580MHz
- 128 MB DDR2 RAM
- 16 MB SPI Flash
- 2.4G MT7628AN 802.11bgn 2T2R 300Mbps
- 5G MT7610EN 802.11ac 433Mbps
- 3x 10/100 Mbps Ethernet

Flash instruction:
1. Get SSH access to the router
2. SSH to router with `ssh -p 1022 root@192.168.199.1`, The SSH password is the same as the webconfig one
3. Upload OpenWrt sysupgrade firmware into the router's `/tmp` folder with SCP
4. Run `mtd write /tmp/<filename> firmware`
5. reboot

Known bug:
- SD slot does not work (See PR 1500)

Signed-off-by: DENG Qingfang <dengqf6@mail2.sysu.edu.cn>
---
 .../ramips/base-files/etc/board.d/01_leds     |  1 +
 .../ramips/base-files/etc/board.d/02_network  |  2 +
 .../ramips/dts/mt7628an_hiwifi_hc5761a.dts    | 56 +++++++++++++++++++
 target/linux/ramips/image/mt76x8.mk           |  9 +++
 4 files changed, 68 insertions(+)
 create mode 100644 target/linux/ramips/dts/mt7628an_hiwifi_hc5761a.dts

diff --git a/target/linux/ramips/base-files/etc/board.d/01_leds b/target/linux/ramips/base-files/etc/board.d/01_leds
index 4b72156621ae..d5ea20127951 100755
--- a/target/linux/ramips/base-files/etc/board.d/01_leds
+++ b/target/linux/ramips/base-files/etc/board.d/01_leds
@@ -208,6 +208,7 @@ hiwifi,hc5661)
 	set_wifi_led "$boardname:blue:wlan2g"
 	;;
 hiwifi,hc5661a|\
+hiwifi,hc5761a|\
 xzwifi,creativebox-v1)
 	ucidef_set_led_switch "internet" "internet" "$boardname:blue:internet" "switch0" "0x10"
 	;;
diff --git a/target/linux/ramips/base-files/etc/board.d/02_network b/target/linux/ramips/base-files/etc/board.d/02_network
index 2f9a02256e31..5fe61c31deec 100755
--- a/target/linux/ramips/base-files/etc/board.d/02_network
+++ b/target/linux/ramips/base-files/etc/board.d/02_network
@@ -57,6 +57,7 @@ ramips_setup_interfaces()
 	firefly,firewrt|\
 	hilink,hlk-rm04|\
 	hiwifi,hc5661a|\
+	hiwifi,hc5761a|\
 	hiwifi,hc5962|\
 	mediatek,ap-mt7621a-v60|\
 	mediatek,mt7621-eval-board|\
@@ -597,6 +598,7 @@ ramips_setup_macs()
 	hiwifi,hc5661|\
 	hiwifi,hc5661a|\
 	hiwifi,hc5761|\
+	hiwifi,hc5761a|\
 	hiwifi,hc5861|\
 	hiwifi,hc5861b|\
 	hiwifi,hc5962)
diff --git a/target/linux/ramips/dts/mt7628an_hiwifi_hc5761a.dts b/target/linux/ramips/dts/mt7628an_hiwifi_hc5761a.dts
new file mode 100644
index 000000000000..a8b904939188
--- /dev/null
+++ b/target/linux/ramips/dts/mt7628an_hiwifi_hc5761a.dts
@@ -0,0 +1,56 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/dts-v1/;
+
+#include "mt7628an_hiwifi_hc5x61a.dtsi"
+
+/ {
+	compatible = "hiwifi,hc5761a", "mediatek,mt7628an-soc";
+	model = "HiWiFi HC5761A";
+
+	leds {
+		compatible = "gpio-leds";
+
+		led_system: system {
+			label = "hc5761a:blue:system";
+			gpios = <&gpio1 5 GPIO_ACTIVE_HIGH>;
+		};
+
+		internet {
+			label = "hc5761a:blue:internet";
+			gpios = <&gpio0 1 GPIO_ACTIVE_HIGH>;
+		};
+
+		wlan2g {
+			label = "hc5761a:blue:wlan2g";
+			gpios = <&gpio1 12 GPIO_ACTIVE_HIGH>;
+			linux,default-trigger = "phy0tpt";
+		};
+
+		wlan5g {
+			label = "hc5761a:blue:wlan5g";
+			gpios = <&gpio1 8 GPIO_ACTIVE_HIGH>;
+			linux,default-trigger = "phy1tpt";
+		};
+	};
+};
+
+&pinctrl {
+	state_default: pinctrl0 {
+		gpio {
+			ralink,group = "i2c", "refclk", "wdt", "p3led_an", "wled_an";
+			ralink,function = "gpio";
+		};
+	};
+};
+
+&pcie {
+	status = "okay";
+};
+
+&pcie0 {
+	wifi@0,0 {
+		reg = <0x0000 0 0 0 0>;
+		mediatek,mtd-eeprom = <&factory 0x8000>;
+		ieee80211-freq-limit = <5000000 6000000>;
+	};
+};
diff --git a/target/linux/ramips/image/mt76x8.mk b/target/linux/ramips/image/mt76x8.mk
index edf9a676455b..d560a2aab007 100644
--- a/target/linux/ramips/image/mt76x8.mk
+++ b/target/linux/ramips/image/mt76x8.mk
@@ -102,6 +102,15 @@ define Device/hiwifi_hc5661a
 endef
 TARGET_DEVICES += hiwifi_hc5661a
 
+define Device/hiwifi_hc5761a
+  MTK_SOC := mt7628an
+  IMAGE_SIZE := 15808k
+  DEVICE_VENDOR := HiWiFi
+  DEVICE_MODEL := HC5761A
+  DEVICE_PACKAGES := kmod-mt76x0e kmod-usb2 kmod-usb-ohci
+endef
+TARGET_DEVICES += hiwifi_hc5761a
+
 define Device/hiwifi_hc5861b
   MTK_SOC := mt7628an
   IMAGE_SIZE := 15808k
-- 
2.30.2