This is a backport to add support for D-Link's DIR-825 rev. C1 to the
Attitude Adjustment branch.

Signed-off-by: Sebastian Kemper <sebastian...@gmx.net>

---

I don't know with certainty how open the OpenWrt project is towards
backporting a router from trunk to the stable branch. This backport is
tested by myself and works well.

If it's just about the format of the patch, e.g. one big patch versus
multiple smaller patches, I'm willing to put in the extra work to divide
the patch into a series.


Index: package/base-files/files/lib/functions.sh
===================================================================
--- package/base-files/files/lib/functions.sh   (revision 36088)
+++ package/base-files/files/lib/functions.sh   (working copy)
@@ -229,6 +229,25 @@
        echo "${PART:+$PREFIX$PART}"
 }
 
+mtd_get_mac_ascii() {
+       local mtdname="$1"
+       local key="$2"
+       local part
+       local mac_dirty
+
+       . /lib/functions.sh
+
+       part=$(find_mtd_part "$mtdname")
+       if [ -z "$part" ]; then
+               echo "mtd_get_mac_ascii: partition $mtdname not found!" >&2
+               return
+       fi
+
+       mac_dirty=$(strings "$part" | sed -n 's/'"$key"'=//p')
+       # "canonicalize" mac
+       printf "%02x:%02x:%02x:%02x:%02x:%02x" 0x${mac_dirty//:/ 0x}
+}
+
 strtok() { # <string> { <variable> [<separator>] ... }
        local tmp
        local val="$1"
Index: target/linux/ar71xx/base-files/etc/diag.sh
===================================================================
--- target/linux/ar71xx/base-files/etc/diag.sh  (revision 36088)
+++ target/linux/ar71xx/base-files/etc/diag.sh  (working copy)
@@ -70,6 +70,9 @@
        dir-825-b1)
                status_led="d-link:orange:power"
                ;;
+       dir-825-c1)
+               status_led="d-link:amber:power"
+               ;;
        eap7660d)
                status_led="eap7660d:green:ds4"
                ;;
Index: target/linux/ar71xx/base-files/etc/uci-defaults/leds
===================================================================
--- target/linux/ar71xx/base-files/etc/uci-defaults/leds        (revision 36088)
+++ target/linux/ar71xx/base-files/etc/uci-defaults/leds        (working copy)
@@ -63,6 +63,10 @@
 dir-825-b1)
        ucidef_set_led_usbdev "usb" "USB" "d-link:blue:usb" "1-1"
        ;;
+dir-825-c1)
+       ucidef_set_led_usbdev "usb" "USB" "d-link:blue:usb" "1-1"
+       ucidef_set_led_wlan "wlan2g" "WLAN 2.4 GHz" "d-link:blue:wlan2g" 
"phy0tpt"
+       ;;
 
 hornet-ub)
        ucidef_set_led_netdev "lan" "LAN" "alfa:blue:lan" "eth0"
Index: target/linux/ar71xx/base-files/etc/uci-defaults/network
===================================================================
--- target/linux/ar71xx/base-files/etc/uci-defaults/network     (revision 36088)
+++ target/linux/ar71xx/base-files/etc/uci-defaults/network     (working copy)
@@ -146,6 +146,16 @@
        ucidef_add_switch_vlan "switch0" "1" "0 1 2 3 5t"
        ;;
 
+dir-825-c1)
+       local mac
+       ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
+       ucidef_add_switch "eth0" "1" "1"
+       ucidef_add_switch_vlan "eth0" "1" "0t 1 2 3 4"
+       ucidef_add_switch_vlan "eth0" "2" "0t 5"
+       mac=$(mtd_get_mac_ascii nvram "^wan_mac")
+       [ -n "$mac" ] && ucidef_set_interface_macaddr "wan" "$mac"
+       ;;
+
 all0305 |\
 aw-nr580 |\
 bullet-m |\
Index: target/linux/ar71xx/base-files/lib/ar71xx.sh
===================================================================
--- target/linux/ar71xx/base-files/lib/ar71xx.sh        (revision 36088)
+++ target/linux/ar71xx/base-files/lib/ar71xx.sh        (working copy)
@@ -204,6 +204,9 @@
        *"DIR-825 rev. B1")
                name="dir-825-b1"
                ;;
+       *"DIR-825 rev. C1")
+               name="dir-825-c1"
+               ;;
        *EAP7660D)
                name="eap7660d"
                ;;
Index: target/linux/ar71xx/base-files/lib/upgrade/platform.sh
===================================================================
--- target/linux/ar71xx/base-files/lib/upgrade/platform.sh      (revision 36088)
+++ target/linux/ar71xx/base-files/lib/upgrade/platform.sh      (working copy)
@@ -105,6 +105,7 @@
        dir-600-a1 | \
        dir-615-c1 | \
        dir-615-e4 | \
+       dir-825-c1 | \
        ew-dorin | \
        ew-dorin-router | \
        mzk-w04nu | \
Index: target/linux/ar71xx/config-3.3
===================================================================
--- target/linux/ar71xx/config-3.3      (revision 36088)
+++ target/linux/ar71xx/config-3.3      (working copy)
@@ -35,6 +35,7 @@
 CONFIG_ATH79_MACH_DIR_600_A1=y
 CONFIG_ATH79_MACH_DIR_615_C1=y
 CONFIG_ATH79_MACH_DIR_825_B1=y
+CONFIG_ATH79_MACH_DIR_825_C1=y
 CONFIG_ATH79_MACH_EAP7660D=y
 CONFIG_ATH79_MACH_EW_DORIN=y
 CONFIG_ATH79_MACH_HORNET_UB=y
Index: target/linux/ar71xx/files/arch/mips/ath79/mach-dir-825-c1.c
===================================================================
--- target/linux/ar71xx/files/arch/mips/ath79/mach-dir-825-c1.c (revision 0)
+++ target/linux/ar71xx/files/arch/mips/ath79/mach-dir-825-c1.c (working copy)
@@ -0,0 +1,211 @@
+/*
+ *  D-Link DIR-825 rev. C1 board support
+ *
+ *  Copyright (C) 2013 Alexander Stadler
+ *
+ *  This program is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License version 2 as published
+ *  by the Free Software Foundation.
+ */
+
+#include <linux/pci.h>
+#include <linux/phy.h>
+#include <linux/gpio.h>
+#include <linux/platform_device.h>
+#include <linux/ath9k_platform.h>
+#include <linux/ar8216_platform.h>
+
+#include <asm/mach-ath79/ar71xx_regs.h>
+
+#include "common.h"
+#include "dev-ap9x-pci.h"
+#include "dev-eth.h"
+#include "dev-gpio-buttons.h"
+#include "dev-leds-gpio.h"
+#include "dev-m25p80.h"
+#include "dev-spi.h"
+#include "dev-usb.h"
+#include "dev-wmac.h"
+#include "machtypes.h"
+
+#define DIR825C1_GPIO_LED_BLUE_USB             11
+#define DIR825C1_GPIO_LED_AMBER_POWER          14
+#define DIR825C1_GPIO_LED_BLUE_POWER           22
+#define DIR825C1_GPIO_LED_BLUE_WPS             15
+#define DIR825C1_GPIO_LED_AMBER_PLANET         19
+#define DIR825C1_GPIO_LED_BLUE_PLANET          18
+#define DIR825C1_GPIO_LED_WLAN_2G              13
+
+#define DIR825C1_GPIO_WAN_LED_ENABLE           20
+
+#define DIR825C1_GPIO_BTN_RESET                        17
+#define DIR825C1_GPIO_BTN_WPS                  16
+
+#define DIR825C1_KEYS_POLL_INTERVAL            20      /* msecs */
+#define DIR825C1_KEYS_DEBOUNCE_INTERVAL                (3 * 
DIR825C1_KEYS_POLL_INTERVAL)
+
+#define DIR825C1_MAC0_OFFSET                   0x4
+#define DIR825C1_MAC1_OFFSET                   0x18
+#define DIR825C1_WMAC_CALDATA_OFFSET           0x1000
+#define DIR825C1_PCIE_CALDATA_OFFSET           0x5000
+
+static struct gpio_led dir825c1_leds_gpio[] __initdata = {
+       {
+               .name           = "d-link:blue:usb",
+               .gpio           = DIR825C1_GPIO_LED_BLUE_USB,
+               .active_low     = 1,
+       },
+       {
+               .name           = "d-link:amber:power",
+               .gpio           = DIR825C1_GPIO_LED_AMBER_POWER,
+               .active_low     = 1,
+       },
+       {
+               .name           = "d-link:blue:power",
+               .gpio           = DIR825C1_GPIO_LED_BLUE_POWER,
+               .active_low     = 1,
+       },
+       {
+               .name           = "d-link:blue:wps",
+               .gpio           = DIR825C1_GPIO_LED_BLUE_WPS,
+               .active_low     = 1,
+       },
+       {
+               .name           = "d-link:amber:planet",
+               .gpio           = DIR825C1_GPIO_LED_AMBER_PLANET,
+               .active_low     = 1,
+       },
+       {
+               .name           = "d-link:blue:wlan2g",
+               .gpio           = DIR825C1_GPIO_LED_WLAN_2G,
+               .active_low     = 1,
+       },
+};
+
+static struct gpio_keys_button dir825c1_gpio_keys[] __initdata = {
+       {
+               .desc           = "Soft reset",
+               .type           = EV_KEY,
+               .code           = KEY_RESTART,
+               .debounce_interval = DIR825C1_KEYS_DEBOUNCE_INTERVAL,
+               .gpio           = DIR825C1_GPIO_BTN_RESET,
+               .active_low     = 1,
+       },
+       {
+               .desc           = "WPS button",
+               .type           = EV_KEY,
+               .code           = KEY_WPS_BUTTON,
+               .debounce_interval = DIR825C1_KEYS_DEBOUNCE_INTERVAL,
+               .gpio           = DIR825C1_GPIO_BTN_WPS,
+               .active_low     = 1,
+       },
+};
+
+static struct ar8327_pad_cfg dir825c1_ar8327_pad0_cfg = {
+       .mode = AR8327_PAD_MAC_RGMII,
+       .txclk_delay_en = true,
+       .rxclk_delay_en = true,
+       .txclk_delay_sel = AR8327_CLK_DELAY_SEL1,
+       .rxclk_delay_sel = AR8327_CLK_DELAY_SEL2,
+};
+
+static struct ar8327_led_cfg dir825c1_ar8327_led_cfg = {
+       .led_ctrl0 = 0x00000000,
+       .led_ctrl1 = 0xc737c737,
+       .led_ctrl2 = 0x00000000,
+       .led_ctrl3 = 0x00c30c00,
+       .open_drain = true,
+};
+
+static struct ar8327_platform_data dir825c1_ar8327_data = {
+       .pad0_cfg = &dir825c1_ar8327_pad0_cfg,
+       .cpuport_cfg = {
+               .force_link = 1,
+               .speed = AR8327_PORT_SPEED_1000,
+               .duplex = 1,
+               .txpause = 1,
+               .rxpause = 1,
+       },
+       .led_cfg = &dir825c1_ar8327_led_cfg,
+};
+
+static struct mdio_board_info dir825c1_mdio0_info[] = {
+       {
+               .bus_id = "ag71xx-mdio.0",
+               .phy_addr = 0,
+               .platform_data = &dir825c1_ar8327_data,
+       },
+};
+
+static void dir825c1_read_ascii_mac(u8 *dest, u8 *src)
+{
+       int ret;
+
+       ret = sscanf(src, "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx",
+                    &dest[0], &dest[1], &dest[2],
+                    &dest[3], &dest[4], &dest[5]);
+
+       if (ret != ETH_ALEN)
+               memset(dest, 0, ETH_ALEN);
+}
+
+static void __init dir825c1_generic_setup(void)
+{
+       u8 *mac = (u8 *) KSEG1ADDR(0x1ffe0000);
+       u8 *art = (u8 *) KSEG1ADDR(0x1fff0000);
+       u8 mac0[ETH_ALEN], mac1[ETH_ALEN];
+       u8 wmac0[ETH_ALEN], wmac1[ETH_ALEN];
+
+       dir825c1_read_ascii_mac(mac0, mac + DIR825C1_MAC0_OFFSET);
+       dir825c1_read_ascii_mac(mac1, mac + DIR825C1_MAC1_OFFSET);
+
+       ath79_register_m25p80(NULL);
+
+       ath79_register_gpio_keys_polled(-1, DIR825C1_KEYS_POLL_INTERVAL,
+                                       ARRAY_SIZE(dir825c1_gpio_keys),
+                                       dir825c1_gpio_keys);
+
+       ath79_init_mac(wmac0, mac0, 0);
+       ath79_register_wmac(art + DIR825C1_WMAC_CALDATA_OFFSET, wmac0);
+
+       ath79_init_mac(wmac1, mac1, 1);
+       ap91_pci_init(art + DIR825C1_PCIE_CALDATA_OFFSET, wmac1);
+
+       ath79_setup_ar934x_eth_cfg(AR934X_ETH_CFG_RGMII_GMAC0);
+
+       mdiobus_register_board_info(dir825c1_mdio0_info,
+                                   ARRAY_SIZE(dir825c1_mdio0_info));
+
+       ath79_register_mdio(0, 0x0);
+
+       ath79_init_mac(ath79_eth0_data.mac_addr, mac0, 0);
+
+       /* GMAC0 is connected to an AR8327N switch */
+       ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
+       ath79_eth0_data.phy_mask = BIT(0);
+       ath79_eth0_data.mii_bus_dev = &ath79_mdio0_device.dev;
+       ath79_eth0_pll_data.pll_1000 = 0x06000000;
+       ath79_register_eth(0);
+
+       ath79_register_usb();
+}
+
+static void __init dir825c1_setup(void)
+{
+       ath79_gpio_output_select(DIR825C1_GPIO_LED_BLUE_USB,
+                                AR934X_GPIO_OUT_GPIO);
+
+       gpio_request_one(DIR825C1_GPIO_WAN_LED_ENABLE,
+                        GPIOF_OUT_INIT_LOW, "WAN LED enable");
+
+       ath79_register_leds_gpio(-1, ARRAY_SIZE(dir825c1_leds_gpio),
+                                dir825c1_leds_gpio);
+
+       ap9x_pci_setup_wmac_led_pin(0, 0);
+
+       dir825c1_generic_setup();
+}
+
+MIPS_MACHINE(ATH79_MACH_DIR_825_C1, "DIR-825-C1",
+            "D-Link DIR-825 rev. C1",
+            dir825c1_setup);
Index: target/linux/ar71xx/generic/profiles/d-link.mk
===================================================================
--- target/linux/ar71xx/generic/profiles/d-link.mk      (revision 36088)
+++ target/linux/ar71xx/generic/profiles/d-link.mk      (working copy)
@@ -61,3 +61,15 @@
 endef
 
 $(eval $(call Profile,DIR825B1))
+
+
+define Profile/DIR825C1
+       NAME:=D-Link DIR-825 rev. C1
+       PACKAGES:=kmod-usb-core kmod-usb2 kmod-ledtrig-usbdev
+endef
+
+define Profile/DIR825C1/Description
+       Package set optimized for the D-Link DIR-825 rev. C1.
+endef
+
+$(eval $(call Profile,DIR825C1))
Index: target/linux/ar71xx/image/Makefile
===================================================================
--- target/linux/ar71xx/image/Makefile  (revision 36088)
+++ target/linux/ar71xx/image/Makefile  (working copy)
@@ -169,6 +169,7 @@
 
cameo7240_mtdlayout=mtdparts=spi0.0:192k(u-boot)ro,64k(nvram)ro,960k(kernel),2752k(rootfs),64k(mac)ro,64k(art)ro,3712k@0x40000(firmware)
 
cameo913x_mtdlayout=mtdparts=spi0.0:128k(u-boot)ro,64k(config)ro,960k(kernel),2880k(rootfs),64k(art)ro,3840k@0x30000(firmware)
 
cameo933x_mtdlayout=mtdparts=spi0.0:64k(u-boot)ro,64k(art)ro,64k(mac)ro,64k(nvram)ro,192k(language)ro,896k(kernel),2752k(rootfs),3648k@0x70000(firmware)
+cameo934x_mtdlayout=mtdparts=spi0.0:64k(uboot)ro,64k(nvram)ro,1280k(kernel),14656k(rootfs),192k(lang)ro,64k(mac)ro,64k(art)ro,15936k@0x20000(firmware)
 
cap4200ag_mtdlayout=mtdparts=spi0.0:256k(u-boot),64k(u-boot-env),320k(custom)ro,1536k(kernel),12096k(rootfs),2048k(failsafe),64k(art),13632k@0xa0000(firmware)
 
db120_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,6336k(rootfs),1408k(kernel),64k(nvram),64k(art)ro,7744k@0x50000(firmware)
 
dir825b1_mtdlayout=mtdparts=spi0.0:256k(uboot)ro,64k(config)ro,1024k(kernel),5184k(rootfs),64k(caldata)ro,1600k(unknown)ro,6208k@0x50000(firmware),64k@0x7f0000(caldata_copy)
@@ -353,6 +354,14 @@
        $(call MkuImageLzma/initramfs,$(2),$(3) $(cameo933x_mtdlayout))
 endef
 
+define Image/Build/Cameo934x
+       $(call 
Image/Build/Cameo,$(1),$(2),$(3),$(cameo934x_mtdlayout),1310720,15007718,$(4))
+endef
+
+define Image/Build/Cameo934x/initramfs
+       $(call Image/Build/Cameo,$(1),$(2),$(3),$(cameo934x_mtdlayout))
+endef
+
 define Image/Build/Ath
        $(call Sysupgrade/$(7),$(1),$(2),$(5),$(6))
        if [ -e "$(call sysupname,$(1),$(2))" ]; then \
@@ -815,6 +824,8 @@
 
 $(eval $(call 
SingleProfile,Cameo933x,$(fs_squash),TEW712BR,tew-712br,TEW-712BR,ttyATH0,115200,"HORNET-RT-TEW712BR-3"))
 
+$(eval $(call 
SingleProfile,Cameo934x,$(fs_64k),DIR825C1,dir-825-c1,DIR-825-C1,ttyS0,115200,"00DB120AR9344-RT-101214-00"))
+
 $(eval $(call 
SingleProfile,CyberTAN,$(fs_64k),WRT160NL,wrt160nl,WRT160NL,ttyS0,115200,1.00.01))
 
 $(eval $(call 
SingleProfile,DIR825B1,$(fs_64k),DIR825B1,dir-825-b1,DIR-825-B1,ttyS0,115200,01AP94-AR7161-RT-080619-00,00AP94-AR7161-RT-080619-00))
Index: target/linux/ar71xx/patches-3.3/610-MIPS-ath79-openwrt-machines.patch
===================================================================
--- target/linux/ar71xx/patches-3.3/610-MIPS-ath79-openwrt-machines.patch       
(revision 36088)
+++ target/linux/ar71xx/patches-3.3/610-MIPS-ath79-openwrt-machines.patch       
(working copy)
@@ -1,6 +1,6 @@
 --- a/arch/mips/ath79/machtypes.h
 +++ b/arch/mips/ath79/machtypes.h
-@@ -16,18 +16,102 @@
+@@ -16,18 +16,103 @@
  
  enum ath79_mach_type {
        ATH79_MACH_GENERIC = 0,
@@ -23,6 +23,7 @@
 +      ATH79_MACH_DIR_615_C1,          /* D-Link DIR-615 rev. C1 */
 +      ATH79_MACH_DIR_615_E4,          /* D-Link DIR-615 rev. E4 */
 +      ATH79_MACH_DIR_825_B1,          /* D-Link DIR-825 rev. B1 */
++      ATH79_MACH_DIR_825_C1,          /* D-Link DIR-825 rev. C1 */
 +      ATH79_MACH_EW_DORIN,            /* embedded wireless Dorin Platform */
 +      ATH79_MACH_EW_DORIN_ROUTER,     /* embedded wireless Dorin Router 
Platform */
 +      ATH79_MACH_EAP7660D,            /* Senao EAP7660D */
@@ -206,7 +207,7 @@
  config ATH79_MACH_PB44
        bool "Atheros PB44 reference board"
        select SOC_AR71XX
-@@ -67,6 +147,456 @@ config ATH79_MACH_PB44
+@@ -67,6 +147,467 @@ config ATH79_MACH_PB44
          Say 'Y' here if you want your kernel to support the
          Atheros PB44 reference board.
  
@@ -333,6 +334,17 @@
 +      select ATH79_DEV_M25P80
 +      select ATH79_DEV_USB
 +
++config ATH79_MACH_DIR_825_C1
++      bool "D-Link DIR-825 rev. C1 board support"
++      select SOC_AR934X
++      select ATH79_DEV_AP9X_PCI if PCI
++      select ATH79_DEV_ETH
++      select ATH79_DEV_GPIO_BUTTONS
++      select ATH79_DEV_LEDS_GPIO
++      select ATH79_DEV_M25P80
++      select ATH79_DEV_USB
++      select ATH79_DEV_WMAC
++
 +config ATH79_MACH_EW_DORIN
 +      bool "embedded wireless Dorin Platform support"
 +      select SOC_AR933X
@@ -663,7 +675,7 @@
  config ATH79_MACH_UBNT_XM
        bool "Ubiquiti Networks XM (rev 1.0) board"
        select SOC_AR724X
-@@ -80,6 +610,24 @@ config ATH79_MACH_UBNT_XM
+@@ -80,6 +621,24 @@ config ATH79_MACH_UBNT_XM
          Say 'Y' here if you want your kernel to support the
          Ubiquiti Networks XM (rev 1.0) board.
  
@@ -688,7 +700,7 @@
  endmenu
  
  config SOC_AR71XX
-@@ -115,10 +663,6 @@ config SOC_QCA955X
+@@ -115,10 +674,6 @@ config SOC_QCA955X
        select PCI_AR724X if PCI
        def_bool n
  
@@ -699,7 +711,7 @@
  config ATH79_DEV_AP9X_PCI
        select ATH79_PCI_ATH9K_FIXUP
        def_bool n
-@@ -129,7 +673,14 @@ config ATH79_DEV_DSA
+@@ -129,7 +684,14 @@ config ATH79_DEV_DSA
  config ATH79_DEV_ETH
        def_bool n
  
@@ -715,7 +727,7 @@
        def_bool n
  
  config ATH79_DEV_GPIO_BUTTONS
-@@ -161,4 +712,7 @@ config ATH79_PCI_ATH9K_FIXUP
+@@ -161,4 +723,7 @@ config ATH79_PCI_ATH9K_FIXUP
  config ATH79_ROUTERBOOT
        def_bool n
  
@@ -725,7 +737,7 @@
  endif
 --- a/arch/mips/ath79/Makefile
 +++ b/arch/mips/ath79/Makefile
-@@ -38,9 +38,68 @@ obj-$(CONFIG_ATH79_ROUTERBOOT)              += route
+@@ -38,9 +38,69 @@ obj-$(CONFIG_ATH79_ROUTERBOOT)              += route
  #
  # Machines
  #
@@ -744,6 +756,7 @@
 +obj-$(CONFIG_ATH79_MACH_DIR_600_A1)   += mach-dir-600-a1.o
 +obj-$(CONFIG_ATH79_MACH_DIR_615_C1)   += mach-dir-615-c1.o
 +obj-$(CONFIG_ATH79_MACH_DIR_825_B1)   += mach-dir-825-b1.o
++obj-$(CONFIG_ATH79_MACH_DIR_825_C1)   += mach-dir-825-c1.o
 +obj-$(CONFIG_ATH79_MACH_EW_DORIN)     += mach-ew-dorin.o
 +obj-$(CONFIG_ATH79_MACH_EAP7660D)     += mach-eap7660d.o
 +obj-$(CONFIG_ATH79_MACH_JA76PF)               += mach-ja76pf.o
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to