[PATCH v2] ramips: mt76x8: add support for Keenetic KN-1510
lotigara at lotigara.ru
lotigara at lotigara.ru
Sat Sep 27 08:55:32 PDT 2025
From: Ivan Davydov <lotigara at lotigara.ru>
Specification:
* SoC: MediaTek MT7628AN
* RAM: 64 MB, Winbond W9751G6KB-25 (DDR2)
* Flash: 16MB, GigaDevice GD25Q128CSIG (Dual Boot, SPI)
* Switch: MediaTek MT7628AN, 3 ports 100 Mbps
* WiFi:
* MediaTek MT7628AN 2x2:2/2.4GHz 802.11b/g/n
* MediaTek MT7610E 1x1:1/5GHz 802.11an+ac
* GPIO:
* 2 buttons (Wi-Fi, Reset)
* 4 LEDs (Power, Internet, 5GHz Wi-Fi (FN), 2GHz Wi-Fi)
Disassembly:
At the bottom there are 4 screws hidden by rubber feet. After removing
the screws, pry the gray plastic part around (it is secured with
latches) and remove it.
Serial Interface:
The serial interface can be connected to the 4 pin dots to the left of
the flash. Pins (from LEDs to LAN ports):
3.3V (do not connect) | TX | RX | GND
Settings: 57600, 8N1
Flashing via TFTP:
1. Connect your PC and router to port 1-3, configure PC interface using
IP 192.168.1.2, mask 255.255.255.252
2. Serve the firmware image (for OpenWRT it is *-squashfs-factory.bin)
renamed to KN-1510_recovery.bin via TFTP
3. Power up the router while pressing Reset button on the back (ex.
with a toothstick)
4. Release Restart button when the Power LED starts blinking
To revert back to OEM firmware: The return to the OEM firmware is carried
out by using the methods described above with the help of the appropriate
firmware image. When using OEM bootloader, the firmware image size cannot
exceed the size of one OEM "Firmware_x" partition or Kernel + rootFS size.
Signed-off-by: Ivan Davydov <lotigara at lotigara.ru>
---
.../ramips/dts/mt7628an_keenetic_kn-1510.dts | 236 ++++++++++++++++++
target/linux/ramips/image/mt76x8.mk | 11 +
.../mt76x8/base-files/etc/board.d/01_leds | 1 +
.../mt76x8/base-files/etc/board.d/02_network | 2 +
4 files changed, 250 insertions(+)
create mode 100644 target/linux/ramips/dts/mt7628an_keenetic_kn-1510.dts
diff --git a/target/linux/ramips/dts/mt7628an_keenetic_kn-1510.dts b/target/linux/ramips/dts/mt7628an_keenetic_kn-1510.dts
new file mode 100644
index 0000000000..62d46066f9
--- /dev/null
+++ b/target/linux/ramips/dts/mt7628an_keenetic_kn-1510.dts
@@ -0,0 +1,236 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+#include "mt7628an.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/leds/common.h>
+
+/ {
+ compatible = "keenetic,kn-1510", "mediatek,mt7628an-soc";
+ model = "Keenetic KN-1510";
+
+ aliases {
+ label-mac-device = ðernet;
+
+ led-boot = &led_power;
+ led-failsafe = &led_power;
+ led-running = &led_power;
+ led-upgrade = &led_power;
+ };
+
+ chosen {
+ bootargs = "console=ttyS0,57600";
+ };
+
+ leds {
+ compatible = "gpio-leds";
+
+ led_power: power {
+ function = LED_FUNCTION_POWER;
+ color = <LED_COLOR_ID_GREEN>;
+ gpios = <&gpio 44 GPIO_ACTIVE_LOW>;
+ };
+
+ internet {
+ function = LED_FUNCTION_WAN;
+ color = <LED_COLOR_ID_GREEN>;
+ gpios = <&gpio 0 GPIO_ACTIVE_LOW>;
+ };
+
+ wifi2 {
+ function = LED_FUNCTION_WLAN_2GHZ;
+ color = <LED_COLOR_ID_GREEN>;
+ gpios = <&gpio 2 GPIO_ACTIVE_LOW>;
+ linux,default-trigger = "phy0tpt";
+ };
+
+ wifi5 {
+ function = LED_FUNCTION_WLAN_5GHZ;
+ color = <LED_COLOR_ID_GREEN>;
+ gpios = <&gpio 11 GPIO_ACTIVE_LOW>;
+ linux,default-trigger = "phy1tpt";
+ };
+ };
+
+ keys {
+ compatible = "gpio-keys";
+
+ reset {
+ label = "reset";
+ gpios = <&gpio 38 GPIO_ACTIVE_LOW>;
+ linux,code = <KEY_RESTART>;
+ };
+
+ wps {
+ label = "wps";
+ gpios = <&gpio 37 GPIO_ACTIVE_LOW>;
+ linux,code = <KEY_WPS_BUTTON>;
+ };
+ };
+
+ virtual_flash {
+ compatible = "mtd-concat";
+ devices = <&firmware1 &firmware2>;
+
+ partitions {
+ compatible = "fixed-partitions";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ partition at 0 {
+ compatible = "denx,uimage";
+ label = "firmware";
+ reg = <0x0 0x1000000>;
+ };
+ };
+ };
+};
+
+&state_default {
+ gpio {
+ groups = "i2s", "gpio", "refclk", "wdt", "wled_an";
+ function = "gpio";
+ };
+};
+
+&usbphy {
+ status = "disabled";
+};
+
+&ehci {
+ status = "disabled";
+};
+
+&ohci {
+ status = "disabled";
+};
+
+&spi0 {
+ status = "okay";
+
+ flash at 0 {
+ compatible = "jedec,spi-nor";
+ reg = <0>;
+ spi-max-frequency = <32000000>;
+
+ partitions {
+ compatible = "fixed-partitions";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ partition at 0 {
+ label = "u-boot";
+ reg = <0x0 0x30000>;
+ read-only;
+ };
+
+ partition at 30000 {
+ label = "u-config";
+ reg = <0x30000 0x10000>;
+ read-only;
+ };
+
+ partition at 40000 {
+ label = "rf-eeprom";
+ reg = <0x40000 0x10000>;
+ read-only;
+
+ nvmem-layout {
+ compatible = "fixed-layout";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ eeprom_factory_0: eeprom at 0 {
+ reg = <0x0 0x400>;
+ };
+
+ eeprom_factory_8000: eeprom at 8000 {
+ reg = <0x8000 0x200>;
+ };
+
+ macaddr_factory_4: macaddr at 4 {
+ reg = <0x4 0x6>;
+ };
+ };
+ };
+
+ firmware1: partition at 50000 {
+ label = "firmware_1";
+ reg = <0x50000 0x790000>;
+ };
+
+ partition at 7e0000 {
+ label = "config_1";
+ reg = <0x7e0000 0x10000>;
+ read-only;
+ };
+
+ partition at 7f0000 {
+ label = "dump";
+ reg = <0x7f0000 0x10000>;
+ read-only;
+ };
+
+ partition at 800000 {
+ label = "u-state";
+ reg = <0x800000 0x30000>;
+ read-only;
+ };
+
+ partition at 830000 {
+ label = "u-config_res";
+ reg = <0x830000 0x10000>;
+ read-only;
+ };
+
+ partition at 840000 {
+ label = "rf-eeprom_res";
+ reg = <0x840000 0x10000>;
+ read-only;
+ };
+
+ firmware2: partition at 850000 {
+ label = "firmware_2";
+ reg = <0x850000 0x790000>;
+ };
+
+ partition at fe0000 {
+ label = "config_2";
+ reg = <0xfe0000 0x10000>;
+ read-only;
+ };
+ };
+ };
+};
+
+ðernet {
+ nvmem-cells = <&macaddr_factory_4>;
+ nvmem-cell-names = "mac-address";
+};
+
+&esw {
+ mediatek,portmap = <0x3e>;
+ mediatek,portdisable = <0x30>;
+};
+
+&wmac {
+ status = "okay";
+
+ nvmem-cells = <&eeprom_factory_0>;
+ nvmem-cell-names = "eeprom";
+};
+
+&pcie {
+ status = "okay";
+};
+
+&pcie0 {
+ wifi at 0,0 {
+ compatible = "mediatek,mt76";
+ reg = <0x0000 0 0 0 0>;
+ nvmem-cells = <&eeprom_factory_8000>;
+ nvmem-cell-names = "eeprom";
+ ieee80211-freq-limit = <5000000 6000000>;
+ };
+};
diff --git a/target/linux/ramips/image/mt76x8.mk b/target/linux/ramips/image/mt76x8.mk
index 2555596edf..acab39a57c 100644
--- a/target/linux/ramips/image/mt76x8.mk
+++ b/target/linux/ramips/image/mt76x8.mk
@@ -442,6 +442,17 @@ define Device/keenetic_kn-1221
endef
TARGET_DEVICES += keenetic_kn-1221
+define Device/keenetic_kn-1510
+ IMAGE_SIZE := 16064k
+ DEVICE_VENDOR := Keenetic
+ DEVICE_MODEL := KN-1510
+ DEVICE_PACKAGES := kmod-mt76x0e
+ IMAGES += factory.bin
+ IMAGE/factory.bin := $$(sysupgrade_bin) | pad-to $$$$(BLOCKSIZE) | \
+ check-size | zyimage -d 0x801510 -v "KN-1510"
+endef
+TARGET_DEVICES += keenetic_kn-1510
+
define Device/keenetic_kn-1613
IMAGE_SIZE := 15073280
DEVICE_VENDOR := Keenetic
diff --git a/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds b/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
index 5f74acf45f..31fdc3b9e7 100644
--- a/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
+++ b/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
@@ -64,6 +64,7 @@ hiwifi,hc5761a)
keenetic,kn-1112|\
keenetic,kn-1212|\
keenetic,kn-1221|\
+keenetic,kn-1510|\
keenetic,kn-1613|\
keenetic,kn-1711|\
keenetic,kn-1713)
diff --git a/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network b/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
index d1689ccc2f..e949d731c2 100644
--- a/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
+++ b/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
@@ -142,6 +142,7 @@ ramips_setup_interfaces()
;;
keenetic,kn-1112|\
keenetic,kn-1212|\
+ keenetic,kn-1510|\
keenetic,kn-1613|\
keenetic,kn-1713|\
motorola,mwr03)
@@ -311,6 +312,7 @@ ramips_setup_macs()
wan_mac=$(mtd_get_mac_binary factory 0x2e)
;;
keenetic,kn-1221|\
+ keenetic,kn-1510|\
keenetic,kn-1613|\
keenetic,kn-3211|\
zyxel,keenetic-extra-ii)
--
2.47.3
More information about the openwrt-devel
mailing list