ramips: Add support for D-Link DIR-3040 A1
authorVince McKinsey <vincemckinsey@gmail.com>
Sun, 31 Mar 2024 18:29:05 +0000 (14:29 -0400)
committerHauke Mehrtens <hauke@hauke-m.de>
Sun, 14 Apr 2024 18:34:36 +0000 (20:34 +0200)
This adds support for the A1 hardware revision of the DIR-3040.
It is an exact copy of the DIR-3060 save for some cosmetic changes to the housing.
Even going so far as having the same FCC ID.

Hardware specification:
SoC: MediaTek MT7621AT
Flash: Winbond W29N01HVSINA 128MB
RAM: Micron MT41K128M16JT-125 256MB
Ethernet: 5x 10/100/1000 Mbps
WiFi1: MT7615DN 2.4GHz N 2x2:2
WiFi2: MT7615DN 5GHz AC 2x2:2
WiFi3: MT7615N 5GHz AC 4x4:4
Button: WPS, Reset

Flash instructions:
OpenWrt can be installed via D-Link Recovery GUI:
NOTE: Seems to only work in Firefox on Windows.
Tried with Chrome on Windows, Firefox in Linux, and Chromium in Linux.
None of these other browsers worked.

    1. Push and hold reset button (on the bottom of the device) until power led
starts flashing (about 10 secs or so) while plugging in the power cable.
    2. Give it ~30 seconds, to boot the recovery mode GUI
    3. Connect your client computer to LAN1 of the device
    4. Set your client IP address manually to 192.168.0.2 / 255.255.255.0.
    5. Call the recovery page for the device at http://192.168.0.1/
    6. Use the provided emergency web GUI to upload and flash a new firmware to the device

Thanks to @Lucky1openwrt and @iivailo for creating the DIR-3060 DTS file and related changes,
so it was possible for me to adapt them to the DIR-3040, build images,
test and fix minor issues.

MAC Addresses:

| use | address | example |
| --- | --- | --- |
| LAN | label | f4:*:61 |
| WAN | label + 4 | f4:*:65 |
| WI1/2g | label + 2 | f4:*:63 |
| WI1/5g | label + 1 | f4:*:62 |
| WI2/5g | label + 3 | f4:*:64 |

The label MAC address was found in Factory, 0xe000

Checklist:

✓ nand
✓ ethernet
✓ button
✓ wifi2g
✓ wifi5g
✓ wifi5g
✓ mac
✓ led

Signed-off-by: Vince McKinsey <vincemckinsey@gmail.com>
target/linux/ramips/dts/mt7621_dlink_dir-3040-a1.dts [new file with mode: 0644]
target/linux/ramips/dts/mt7621_dlink_dir-xx60-a1.dtsi
target/linux/ramips/image/mt7621.mk
target/linux/ramips/mt7621/base-files/etc/board.d/01_leds
target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh

diff --git a/target/linux/ramips/dts/mt7621_dlink_dir-3040-a1.dts b/target/linux/ramips/dts/mt7621_dlink_dir-3040-a1.dts
new file mode 100644 (file)
index 0000000..4bb35a9
--- /dev/null
@@ -0,0 +1,67 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+#include "mt7621_dlink_dir-xx60-a1.dtsi"
+
+/ {
+       compatible = "dlink,dir-3040-a1", "mediatek,mt7621-soc";
+       model = "D-Link DIR-3040 A1";
+};
+
+&wps {
+       gpios = <&gpio 6 GPIO_ACTIVE_LOW>;
+};
+
+&leds {
+       usb2_white {
+               function = LED_FUNCTION_USB;
+               color = <LED_COLOR_ID_WHITE>;
+               function-enumerator = <0>;
+               gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
+               trigger-sources = <&ehci_port2>;
+               linux,default-trigger = "usbport";
+       };
+
+       usb3_white {
+               function = LED_FUNCTION_USB;
+               color = <LED_COLOR_ID_WHITE>;
+               function-enumerator = <1>;
+               gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
+               trigger-sources = <&xhci_ehci_port1>;
+               linux,default-trigger = "usbport";
+       };
+
+       wlan2g {
+               function = LED_FUNCTION_WLAN_2GHZ;
+               color = <LED_COLOR_ID_WHITE>;
+               gpios = <&gpio 11 GPIO_ACTIVE_HIGH>;
+               linux,default-trigger = "phy0radio";
+       };
+
+       wlan5glb {
+               function = LED_FUNCTION_WLAN_5GHZ;
+               color = <LED_COLOR_ID_WHITE>;
+               function-enumerator = <0>;
+               gpios = <&gpio 9 GPIO_ACTIVE_HIGH>;
+               linux,default-trigger = "phy1radio";
+       };
+
+       wlan5ghb {
+               function = LED_FUNCTION_WLAN_5GHZ;
+               color = <LED_COLOR_ID_WHITE>;
+               function-enumerator = <1>;
+               gpios = <&gpio 5 GPIO_ACTIVE_HIGH>;
+               linux,default-trigger = "phy2radio";
+       };
+};
+
+&wifi0 {
+       nvmem-cells = <&eeprom_factory_0>, <&macaddr_factory_e000 1>;
+       nvmem-cell-names = "eeprom", "mac-address";
+       ieee80211-freq-limit;
+       /delete-property/ ieee80211-freq-limit;
+};
+
+&wifi1 {
+       nvmem-cells = <&eeprom_factory_8000>, <&macaddr_factory_e000 3>;
+       nvmem-cell-names = "eeprom", "mac-address";
+};
index 7b7228b8c36d6a0aa707a0af4c4aa70ec6c98588..57652fb278bd25f2a587f95826908a05a8651837 100644 (file)
@@ -24,7 +24,7 @@
                        linux,code = <KEY_RESTART>;
                };
 
-               wps {
+               wps: wps {
                        label = "wps";
                        gpios = <&gpio 18 GPIO_ACTIVE_LOW>;
                        linux,code = <KEY_WPS_BUTTON>;
index fb8cfce5894fcde5c6597f4f0621e3334f1cc84c..10e78576140f10f3090018b77b589ed25d81a40e 100644 (file)
@@ -783,6 +783,13 @@ define Device/dlink_dir-2660-a1
 endef
 TARGET_DEVICES += dlink_dir-2660-a1
 
+define Device/dlink_dir-3040-a1
+  $(Device/dlink_dir-xx60-a1)
+  DEVICE_MODEL := DIR-3040
+  DEVICE_VARIANT := A1
+endef
+TARGET_DEVICES += dlink_dir-3040-a1
+
 define Device/dlink_dir-3060-a1
   $(Device/dlink_dir-xx60-a1)
   DEVICE_MODEL := DIR-3060
index 3eba20bb79a0104bf391c8d3c627eaea3dad51a7..6848bebd0010cc1869c13c45227144bb5bffa68b 100644 (file)
@@ -96,6 +96,7 @@ dlink,dir-2640-a1|\
 dlink,dir-2660-a1)
        ucidef_set_led_netdev "wan" "wan" "white:net" "wan"
        ;;
+dlink,dir-3040-a1|\
 dlink,dir-3060-a1)
        ucidef_set_led_netdev "net_white" "WAN Link" "white:net" "wan" "link"
        ucidef_set_led_netdev "net_orange" "WAN Activity" "orange:net" "wan" "tx rx"
index 962e1f7019776d7760806c6615d05be77ef3c80a..0ec46bb0eab8b76fb59cb86a9cd9f8f30f048f72 100644 (file)
@@ -60,6 +60,11 @@ case "$board" in
                [ "$PHYNBR" = "1" ] && \
                        macaddr_add $hw_mac_addr 4 > /sys${DEVPATH}/macaddress
                ;;
+       dlink,dir-3040-a1)
+               lan_mac_addr="$(mtd_get_mac_binary factory 0xe000)"
+               [ "$PHYNBR" = "0" ] && \
+                       macaddr_add $lan_mac_addr 2 > /sys${DEVPATH}/macaddress
+               ;;
        dlink,dir-853-a3)
                [ "$PHYNBR" = "0" ] && \
                        macaddr_setbit_la "$(mtd_get_mac_binary factory 0xe000)" \
index eba02e6599860ada08d02fd336cf23e9f80a6408..93fbc470ad58e02187c79b82c5e1aae81d46e5f2 100755 (executable)
@@ -73,6 +73,7 @@ platform_do_upgrade() {
        dlink,dir-1960-a1|\
        dlink,dir-2640-a1|\
        dlink,dir-2660-a1|\
+       dlink,dir-3040-a1|\
        dlink,dir-3060-a1|\
        dlink,dir-853-a3|\
        etisalat,s3|\