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