[openwrt/openwrt] ath79: add support for D-Link DCH-G020 Rev. A1

LEDE Commits lede-commits at lists.infradead.org
Wed Jul 8 16:55:20 EDT 2020


ynezz pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/14599c59457f04b425603a08dde6aefbc515ff3b

commit 14599c59457f04b425603a08dde6aefbc515ff3b
Author: Sebastian Schaper <openwrt at sebastianschaper.net>
AuthorDate: Wed May 13 17:37:31 2020 +0200

    ath79: add support for D-Link DCH-G020 Rev. A1
    
    The DCH-G020 is a Smart Home Gateway for Z-Wave devices.
    
    Specifications:
    
     * QCA9531, 16 MiB Flash, 64 MiB RAM
     * On-Board USB SD3503A Z-Wave dongle
     * GL850 USB 2.0 Hub (one rear port, internal Z-Wave)
     * Two Ethernet Ports (10/100)
    
    Installation:
    
     * Web UI: http://192.168.0.60 (or different address obtained via DHCP)
       Login with 'admin' and the 6-digit PIN Code from the bottom label
     * Recovery Web UI: Keep reset button pressed during power-on
       until LED starts flashing red, upgrade via http://192.168.0.60
     * Some modern browsers may have problems flashing via the Web UI,
       if this occurs consider booting to recovery mode and flashing via:
       curl -F \
         files=@openwrt-ath79-generic-dlink_dch-g020-a1-squashfs-factory.bin \
         http://192.168.0.60/cgi/index
    
    Known issues:
    
     * Real-Time-Clock is not working as there is currently no matching driver
       It is still included in the dts as compatible = "pericom,pt7c43390";
     * openzwave was tested on v19.07 (running MinOZW as a proof-of-concept),
       but the package grew too big as lots of device pictures were included,
       thus any use of Z-Wave is up to the user (e.g. extroot and domoticz)
    
    The device will use the same MAC address for both wired and wireless
    interfaces, however it is stored at two different locations in the flash.
    
    Signed-off-by: Sebastian Schaper <openwrt at sebastianschaper.net>
---
 .../linux/ath79/dts/qca9531_dlink_dch-g020-a1.dts  | 171 +++++++++++++++++++++
 .../generic/base-files/etc/board.d/02_network      |   8 +
 .../etc/hotplug.d/ieee80211/10_fix_wifi_mac        |   3 +
 target/linux/ath79/image/generic.mk                |  25 +++
 4 files changed, 207 insertions(+)

diff --git a/target/linux/ath79/dts/qca9531_dlink_dch-g020-a1.dts b/target/linux/ath79/dts/qca9531_dlink_dch-g020-a1.dts
new file mode 100644
index 0000000000..5d6aebf92f
--- /dev/null
+++ b/target/linux/ath79/dts/qca9531_dlink_dch-g020-a1.dts
@@ -0,0 +1,171 @@
+// 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 "qca953x.dtsi"
+
+/ {
+	compatible = "dlink,dch-g020-a1", "qca,qca9531";
+	model = "D-Link DCH-G020 A1";
+
+	aliases {
+		led-boot = &led_power;
+		led-failsafe = &led_power;
+		led-running = &led_power;
+		led-upgrade = &led_power;
+	};
+
+	i2c {
+		compatible = "i2c-gpio";
+		#address-cells = <1>;
+		#size-cells = <1>;
+
+		sda-gpios = <&gpio 0 GPIO_ACTIVE_HIGH>;
+		scl-gpios = <&gpio 1 GPIO_ACTIVE_HIGH>;
+
+		gpio_ext: gpio_ext at 38 {
+			compatible = "nxp,pca9554";
+			reg = <0x38 0x1>;
+
+			gpio-controller;
+			#gpio-cells = <2>;
+		};
+
+		rtc at 30 {
+			compatible = "pericom,pt7c43390";
+			reg = <0x30 0x8>;
+		};
+	};
+
+	gpio-export {
+		compatible = "gpio-export";
+
+		usb_power {
+			label = "d-link:power:usb";
+			gpio-export,name = "d-link:power:usb";
+			gpio-export,output = <0>;
+			gpios = <&gpio_ext 3 GPIO_ACTIVE_LOW>;
+		};
+
+		zwave_power {
+			label = "d-link:power:zwave";
+			gpio-export,name = "d-link:power:zwave";
+			gpio-export,output = <0>;
+			gpios = <&gpio_ext 1 GPIO_ACTIVE_LOW>;
+		};
+	};
+
+	keys {
+		compatible = "gpio-keys";
+
+		wps {
+			label = "wps";
+			linux,code = <KEY_WPS_BUTTON>;
+			gpios = <&gpio 3 GPIO_ACTIVE_LOW>;
+		};
+
+		reset {
+			label = "reset";
+			linux,code = <KEY_RESTART>;
+			gpios = <&gpio 17 GPIO_ACTIVE_LOW>;
+		};
+	};
+
+	leds {
+		compatible = "gpio-leds";
+
+		led_power: power {
+			label = "d-link:green:power";
+			gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
+		};
+
+		status {
+			label = "d-link:red:status";
+			gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
+		};
+	};
+};
+
+&spi {
+	status = "okay";
+
+	num-cs = <1>;
+
+	flash at 0 {
+		compatible = "jedec,spi-nor";
+		reg = <0>;
+		spi-max-frequency = <50000000>;
+
+		partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			partition at 0 {
+				label = "u-boot";
+				reg = <0x0 0x10000>;
+				read-only;
+			};
+
+			art: partition at 10000 {
+				label = "art";
+				reg = <0x10000 0x10000>;
+				read-only;
+			};
+
+			partition at 20000 {
+				label = "mp";
+				reg = <0x20000 0x10000>;
+				read-only;
+			};
+
+			partition at 30000 {
+				label = "config";
+				reg = <0x30000 0x10000>;
+				read-only;
+			};
+
+			partition at 40000 {
+				label = "bootarg";
+				reg = <0x40000 0x10000>;
+				read-only;
+			};
+
+			partition at 50000 {
+				label = "firmware";
+				reg = <0x50000 0xe70000>;
+				compatible = "denx,uimage";
+			};
+
+			partition at ec0000 {
+				label = "dlink";
+				reg = <0xec0000 0x140000>;
+				read-only;
+			};
+		};
+	};
+};
+
+&uart {
+	status = "okay";
+};
+
+&usb0 {
+	status = "okay";
+};
+
+&usb_phy {
+	status = "okay";
+};
+
+&eth0 {
+	status = "okay";
+};
+
+&wmac {
+	status = "okay";
+
+	mtd-cal-data = <&art 0x1000>;
+};
diff --git a/target/linux/ath79/generic/base-files/etc/board.d/02_network b/target/linux/ath79/generic/base-files/etc/board.d/02_network
index f2b6ef0aed..4580f3ab4e 100755
--- a/target/linux/ath79/generic/base-files/etc/board.d/02_network
+++ b/target/linux/ath79/generic/base-files/etc/board.d/02_network
@@ -147,6 +147,10 @@ ath79_setup_interfaces()
 	dlink,dap-2695-a1)
 		ucidef_add_switch "switch0" "0 at eth0" "2:lan" "3:wan" "6 at eth1"
 		;;
+	dlink,dch-g020-a1)
+		ucidef_add_switch "switch0" \
+			"0 at eth0" "1:lan:2" "2:lan:1"
+		;;
 	dlink,dir-825-b1)
 		ucidef_set_interface_wan "eth1"
 		ucidef_add_switch "switch0" \
@@ -379,6 +383,10 @@ ath79_setup_macs()
 	dlink,dap-2695-a1)
 		label_mac=$(mtd_get_mac_ascii bdcfg "wlanmac")
 		;;
+	dlink,dch-g020-a1)
+		lan_mac=$(mtd_get_mac_text "mp" 0x1)
+		label_mac=$lan_mac
+		;;
 	dlink,dir-825-b1)
 		lan_mac=$(mtd_get_mac_text "caldata" 0xffa0)
 		wan_mac=$(mtd_get_mac_text "caldata" 0xffb4)
diff --git a/target/linux/ath79/generic/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac b/target/linux/ath79/generic/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
index f814bd46ad..cf582b8465 100644
--- a/target/linux/ath79/generic/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
+++ b/target/linux/ath79/generic/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
@@ -17,6 +17,9 @@ case "$board" in
 	adtran,bsap1840)
 		macaddr_add "$(mtd_get_mac_binary 'Board data' 2)" $(($PHYNBR * 8 + 1)) > /sys${DEVPATH}/macaddress
 		;;
+	dlink,dch-g020-a1)
+		mtd_get_mac_text "mp" 0x13 > /sys${DEVPATH}/macaddress
+		;;
 	iodata,wn-ac1600dgr)
 		# There is no eeprom data for 5 GHz wlan in "art" partition
 		# which would allow to patch the macaddress
diff --git a/target/linux/ath79/image/generic.mk b/target/linux/ath79/image/generic.mk
index d8cac425e8..14e72140dc 100644
--- a/target/linux/ath79/image/generic.mk
+++ b/target/linux/ath79/image/generic.mk
@@ -50,6 +50,17 @@ define Build/cybertan-trx
 	-rm $@-empty.bin
 endef
 
+define Build/mkdapimg2
+	$(STAGING_DIR_HOST)/bin/mkdapimg2 \
+		-i $@ -o $@.new \
+		-s $(DAP_SIGNATURE) \
+		-v $(VERSION_DIST)-$(firstword $(subst +, , \
+			$(firstword $(subst -, ,$(REVISION))))) \
+		-r Default \
+		$(if $(1),-k $(1))
+	mv $@.new $@
+endef
+
 define Build/mkmylofw_16m
 	$(eval device_id=$(word 1,$(1)))
 	$(eval revision=$(word 2,$(1)))
@@ -563,6 +574,20 @@ define Device/dlink_dap-2695-a1
 endef
 TARGET_DEVICES += dlink_dap-2695-a1
 
+define Device/dlink_dch-g020-a1
+  SOC := qca9531
+  DEVICE_VENDOR := D-Link
+  DEVICE_MODEL := DCH-G020
+  DEVICE_VARIANT := A1
+  DEVICE_PACKAGES := kmod-gpio-pca953x kmod-i2c-gpio kmod-usb2 kmod-usb-acm
+  IMAGES += factory.bin
+  IMAGE_SIZE := 14784k
+  IMAGE/factory.bin := append-kernel | pad-to $$$$(BLOCKSIZE) | \
+	append-rootfs | pad-rootfs | check-size | mkdapimg2 0x20000
+  DAP_SIGNATURE := HONEYBEE-FIRMWARE-DCH-G020
+endef
+TARGET_DEVICES += dlink_dch-g020-a1
+
 define Device/dlink_dir-505
   SOC := ar9330
   DEVICE_VENDOR := D-Link



More information about the lede-commits mailing list