Hi!
Nobody responded to my last patchset, but in the meantime I made some
additions and added whats unclear to me as comments in the mach*.c .
I think some of them are just inconsistencies between the different db120
configs which were made. Propably some of them could be brought in line
(db120, wdr4300, wndr4300 and now dir825c1).
(only additional one I found currently not in the .c file is that
db120_ar8327_led_cfg has .open_drain = true only for db120, can this be
really different there?)
And a question about something I run into while doing this:
Why do I have to do a make distclean (or find the responsable file) so
that the new profile is avalaible in make menuconfig (or for make
defconfig). Should it be that way after a fresh checkout?
It compiles well after the provided .patch files are applied. (I added the
mach-dir-825-c1.c additionally just for direct/easier viewing.)
Please review the patch because I would be glad if the new hardware gets
supported by trunk! (And I will not be suprised when d-link creates more
models on this platform soon (like the dir835..).)
Alex
/*
* D-Link DIR-825 rev. C1 board support
*
* Copyright (C) 2012 Alexander Stadler
* Copyright (C) 2012 Gabor Juhos <juh...@openwrt.org>
*
* 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"
//my: still needed? (see ath79_register_m25p80 below in _setup) (not here in
wndr4300) (in tl-wdr4300 with additional wdr4300_flash_data..)
#include "dev-m25p80.h"
//my: why here in tl-wdr4300?
#include "dev-spi.h"
//my: why not here in tl-wdr4300 (here in wndr4300 and rb2011)
//#include "dev-nfc.h"
#include "dev-usb.h"
#include "dev-wmac.h"
#include "machtypes.h"
#define DIR825C1_GPIO_LED_BLUE_USB 11 //usb
#define DIR825C1_GPIO_LED_ORANGE_POWER 15 //diag
#define DIR825C1_GPIO_LED_BLUE_POWER 14 //power
//my: todo (also see below)
//#define DIR825C1_GPIO_LED_BLUE_WPS 27 //ses
#define DIR825C1_GPIO_LED_ORANGE_PLANET 19 //disconnected
#define DIR825C1_GPIO_LED_BLUE_PLANET 18 //connected
/*my: don't know (also see below)
#define DIR825B1_GPIO_BTN_RESET 3
#define DIR825B1_GPIO_BTN_WPS 8
*/
//my: todo (also see _setup) (=OPTION1)
//#define DIR825C1_GPIO_USB_POWER 26
/*my: don't know (also see _setup) (=OPTION2)
#define WDR4300_GPIO_USB1_POWER 22
#define WDR4300_GPIO_USB2_POWER 21
*/
#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:orange:power",
.gpio = DIR825C1_GPIO_LED_ORANGE_POWER,
.active_low = 1,
}, {
.name = "d-link:blue:power",
.gpio = DIR825C1_GPIO_LED_BLUE_POWER,
.active_low = 1,
//my: todo (also see above)
// }, {
// .name = "d-link:blue:wps",
// .gpio = DIR825C1_GPIO_LED_BLUE_WPS,
// .active_low = 1,
}, {
.name = "d-link:orange:planet",
.gpio = DIR825C1_GPIO_LED_ORANGE_PLANET,
.active_low = 1,
}, {
.name = "d-link:blue:planet",
.gpio = DIR825C1_GPIO_LED_BLUE_PLANET,
.active_low = 1,
}
};
static struct gpio_keys_button dir825c1_gpio_keys[] __initdata = {
/*my: to find (also see above)
{
.desc = "reset",
.type = EV_KEY,
.code = KEY_RESTART,
.debounce_interval = DIR825C1_KEYS_DEBOUNCE_INTERVAL,
.gpio = DIR825C1_GPIO_BTN_RESET,
.active_low = 1,
}, {
.desc = "wps",
.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 = 0xc737c737,
.led_ctrl1 = 0x00000000,
.led_ctrl2 = 0x00000000,
.led_ctrl3 = 0x0030c300,
.open_drain = false,
};
static struct ar8327_platform_data dir825c1_ar8327_data = {
.pad0_cfg = &dir825c1_ar8327_pad0_cfg,
.port0_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_setup(void)
{
u8 *mac = (u8 *) KSEG1ADDR(0x1ffe0000);
u8 *art = (u8 *) KSEG1ADDR(0x1fff0000);
u8 tmpmac[ETH_ALEN];
u8 mac1[ETH_ALEN], mac2[ETH_ALEN];
dir825c1_read_ascii_mac(mac1, mac + DIR825C1_MAC0_OFFSET);
dir825c1_read_ascii_mac(mac2, mac + DIR825C1_MAC1_OFFSET);
// my: still needed? (see #include "dev-m25p80.h" above at begin) (not
here in wndr4300)
ath79_register_m25p80(NULL);
ath79_register_leds_gpio(-1, ARRAY_SIZE(dir825c1_leds_gpio),
dir825c1_leds_gpio);
ath79_register_gpio_keys_polled(-1, DIR825C1_KEYS_POLL_INTERVAL,
ARRAY_SIZE(dir825c1_gpio_keys),
dir825c1_gpio_keys);
// ath79_init_mac(tmpmac, mac, -1);
ath79_init_mac(tmpmac, mac1, 0);
ath79_register_wmac(art + DIR825C1_WMAC_CALDATA_OFFSET, tmpmac);
// ath79_init_mac(tmpmac, mac, 0);
ath79_init_mac(tmpmac, mac2, 0);
// my: from tl-wdr4300 (in dd-wrt its setWirelessLed(0,13) and
setWirelessLed(1,32) (before setWirelessLedPhy1(0) instead the 1,32))
// ap9x_pci_setup_wmac_led_pin(0, 0);
// my: AR9382 (AR9380) not AR9582 (AR9580) - so still right?
ap91_pci_init(art + DIR825C1_PCIE_CALDATA_OFFSET, tmpmac);
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);
/* my: additionally in rb2011, instead in wr841n-v8
ath79_register_mdio(1, 0x0);
*/
// ath79_init_mac(ath79_eth0_data.mac_addr, mac, -2);
ath79_init_mac(ath79_eth0_data.mac_addr, mac1, 0);
// my: on wr841n-v8 or rb2011 also that, but not in tl-wdr4300 or wndr4300
(see also below at GMAC1) (but propably better mac1, 1) (, 0 in the sample is
because eth0 was -1 on the other platform)
/*
ath79_init_mac(ath79_eth1_data.mac_addr, mac, 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);
/* my: on wr841n-v8 or rb2011 also that eth1 section, but not in
tl-wdr4300 or wndr4300
*/
/* GMAC1 is connected to the internal switch */
/* in dd-wrt ath79_mac_base "is" art + DB120_MAC1_OFFSET (which is 6,
DB120_MAC0_OFFSET = 0 (which is not used on DIR825C1 because mac1 is for
eth0..)) and , 0
and on rb2011 its: (but see above, because we can do the ath79_init_mac
(only) there instead of in the next line)
ath79_init_mac(ath79_eth1_data.mac_addr, ath79_mac_base, 5);
*/
/* continued
ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII;
ath79_eth1_data.speed = SPEED_1000;
ath79_eth1_data.duplex = DUPLEX_FULL;
ath79_register_eth(1);
*/
//my: why not here in tl-wdr4300 (here in wndr4300 and rb2011)
//ath79_register_nfc();
// my: here in tl-wdr4300 not in wndr4300 (rb2011 and tl-wr841n-v8 have no
usb sections at all)
// my: todo (also see top) (=OPTION1) (1 GPIO_USB as seen on all except
tl-wdr4300)
// gpio_request_one(DIR825C1_GPIO_USB_POWER,
// GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED,
// "USB power");
/* my: to find (also see top) (=OPTION2) (2 GPIO_USBs as seen on
tl-wdr4300)
gpio_request_one(DIR825C1_GPIO_USB1_POWER,
GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED,
"USB1 power");
gpio_request_one(DIR825C1_GPIO_USB2_POWER,
GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED,
"USB2 power");
*/
ath79_register_usb();
}
MIPS_MACHINE(ATH79_MACH_DIR_825_C1, "DIR-825-C1",
"D-Link DIR-825 rev. C1",
dir825c1_setup);
diff -urN a/trunk/target/linux/ar71xx/generic/profiles/d-link.mk
b/trunk/target/linux/ar71xx/generic/profiles/d-link.mk
--- a/trunk/target/linux/ar71xx/generic/profiles/d-link.mk 2012-12-31
19:36:34.000000000 +0100
+++ b/trunk/target/linux/ar71xx/generic/profiles/d-link.mk 2013-01-07
20:29:43.000000000 +0100
@@ -61,3 +61,14 @@
endef
$(eval $(call Profile,DIR825B1))
+
+define Profile/DIR825C1
+ NAME:=D-Link DIR-825 rev. C1
+ PACKAGES:=kmod-usb-core mod-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))
diff -urN a/trunk/target/linux/ar71xx/image/Makefile
b/trunk/target/linux/ar71xx/image/Makefile
--- a/trunk/target/linux/ar71xx/image/Makefile 2012-12-31 19:36:34.000000000
+0100
+++ b/trunk/target/linux/ar71xx/image/Makefile 2013-01-07 20:33:23.000000000
+0100
@@ -170,6 +170,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)
@@ -352,6 +353,14 @@
$(call MkuImageLzma/initramfs,$(2),$(3) $(cameo933x_mtdlayout))
endef
+define Image/Build/Cameo934x
+ $(call
Image/Build/Cameo,$(1),$(2),$(3),$(cameo934x_mtdlayout),1310720,15007744,$(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 \
@@ -843,6 +852,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))
diff -urN a/trunk/target/linux/ar71xx/base-files/etc/diag.sh
b/trunk/target/linux/ar71xx/base-files/etc/diag.sh
--- a/trunk/target/linux/ar71xx/base-files/etc/diag.sh 2012-12-31
19:36:34.000000000 +0100
+++ b/trunk/target/linux/ar71xx/base-files/etc/diag.sh 2013-01-07
20:14:38.000000000 +0100
@@ -74,6 +74,9 @@
dir-825-b1)
status_led="d-link:orange:power"
;;
+ dir-825-c1)
+ status_led="d-link:orange:power"
+ ;;
eap7660d)
status_led="eap7660d:green:ds4"
;;
diff -urN a/trunk/target/linux/ar71xx/base-files/etc/uci-defaults/leds
b/trunk/target/linux/ar71xx/base-files/etc/uci-defaults/leds
--- a/trunk/target/linux/ar71xx/base-files/etc/uci-defaults/leds
2012-12-31 19:36:34.000000000 +0100
+++ b/trunk/target/linux/ar71xx/base-files/etc/uci-defaults/leds
2013-01-07 20:16:32.000000000 +0100
@@ -64,6 +64,10 @@
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"
+ ;;
+
hornet-ub)
ucidef_set_led_netdev "lan" "LAN" "alfa:blue:lan" "eth0"
ucidef_set_led_netdev "wan" "WAN" "alfa:blue:wan" "eth1"
diff -urN a/trunk/target/linux/ar71xx/base-files/etc/uci-defaults/network
b/trunk/target/linux/ar71xx/base-files/etc/uci-defaults/network
--- a/trunk/target/linux/ar71xx/base-files/etc/uci-defaults/network
2012-12-31 19:36:34.000000000 +0100
+++ b/trunk/target/linux/ar71xx/base-files/etc/uci-defaults/network
2013-01-07 20:18:26.000000000 +0100
@@ -55,6 +55,13 @@
ucidef_add_switch_vlan "rtl8366s" "1" "0 1 2 3 5t"
;;
+dir-825-c1)
+ ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
+ ucidef_add_switch "eth0" "1" "1"
+ ucidef_add_switch_vlan "eth0" "1" "0t 2 3 4 5"
+ ucidef_add_switch_vlan "eth0" "2" "0t 1"
+ ;;
+
nbg460n_550n_550nh)
ucidef_set_interfaces_lan_wan "eth0" "eth1"
ucidef_add_switch "rtl8366s" "1" "1"
diff -urN a/trunk/target/linux/ar71xx/base-files/lib/ar71xx.sh
b/trunk/target/linux/ar71xx/base-files/lib/ar71xx.sh
--- a/trunk/target/linux/ar71xx/base-files/lib/ar71xx.sh 2012-12-31
19:36:34.000000000 +0100
+++ b/trunk/target/linux/ar71xx/base-files/lib/ar71xx.sh 2013-01-07
20:20:02.000000000 +0100
@@ -210,6 +210,9 @@
*"DIR-825 rev. B1")
name="dir-825-b1"
;;
+ *"DIR-825 rev. C1")
+ name="dir-825-c1"
+ ;;
*EAP7660D)
name="eap7660d"
;;
diff -urN a/trunk/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
b/trunk/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
--- a/trunk/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
2012-12-31 19:36:34.000000000 +0100
+++ b/trunk/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
2013-01-07 20:21:33.000000000 +0100
@@ -107,6 +107,7 @@
dir-600-a1 | \
dir-615-c1 | \
dir-615-e4 | \
+ dir-825-c1 | \
ew-dorin | \
ew-dorin-router | \
mzk-w04nu | \
diff -urN a/trunk/target/linux/ar71xx/config-3.6
b/trunk/target/linux/ar71xx/config-3.6
--- a/trunk/target/linux/ar71xx/config-3.6 2012-12-31 19:36:34.000000000
+0100
+++ b/trunk/target/linux/ar71xx/config-3.6 2013-01-07 19:53:08.000000000
+0100
@@ -38,6 +38,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
diff -urN a/trunk/target/linux/ar71xx/config-3.7
b/trunk/target/linux/ar71xx/config-3.7
--- a/trunk/target/linux/ar71xx/config-3.7 2012-12-31 19:36:34.000000000
+0100
+++ b/trunk/target/linux/ar71xx/config-3.7 2013-01-07 19:53:10.000000000
+0100
@@ -38,6 +38,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
diff -urN
a/trunk/target/linux/ar71xx/patches-3.6/610-MIPS-ath79-openwrt-machines.patch
b/trunk/target/linux/ar71xx/patches-3.6/610-MIPS-ath79-openwrt-machines.patch
---
a/trunk/target/linux/ar71xx/patches-3.6/610-MIPS-ath79-openwrt-machines.patch
2012-12-31 19:36:34.000000000 +0100
+++
b/trunk/target/linux/ar71xx/patches-3.6/610-MIPS-ath79-openwrt-machines.patch
2013-01-07 20:04:30.000000000 +0100
@@ -1,6 +1,6 @@
--- a/arch/mips/ath79/machtypes.h
+++ b/arch/mips/ath79/machtypes.h
-@@ -16,22 +16,112 @@
+@@ -16,22 +16,113 @@
enum ath79_mach_type {
ATH79_MACH_GENERIC = 0,
@@ -25,6 +25,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 */
@@ -215,7 +216,7 @@
config ATH79_MACH_PB44
bool "Atheros PB44 reference board"
select SOC_AR71XX
-@@ -68,6 +148,488 @@ config ATH79_MACH_PB44
+@@ -68,6 +148,499 @@ config ATH79_MACH_PB44
Say 'Y' here if you want your kernel to support the
Atheros PB44 reference board.
@@ -342,6 +343,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
@@ -766,7 +778,7 @@
endif
--- a/arch/mips/ath79/Makefile
+++ b/arch/mips/ath79/Makefile
-@@ -38,9 +38,71 @@ obj-$(CONFIG_ATH79_ROUTERBOOT) += route
+@@ -38,9 +38,72 @@ obj-$(CONFIG_ATH79_ROUTERBOOT) += route
#
# Machines
#
@@ -786,6 +798,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
diff -urN
a/trunk/target/linux/ar71xx/patches-3.7/610-MIPS-ath79-openwrt-machines.patch
b/trunk/target/linux/ar71xx/patches-3.7/610-MIPS-ath79-openwrt-machines.patch
---
a/trunk/target/linux/ar71xx/patches-3.7/610-MIPS-ath79-openwrt-machines.patch
2012-12-31 19:36:34.000000000 +0100
+++
b/trunk/target/linux/ar71xx/patches-3.7/610-MIPS-ath79-openwrt-machines.patch
2013-01-07 20:04:27.000000000 +0100
@@ -1,6 +1,6 @@
--- a/arch/mips/ath79/machtypes.h
+++ b/arch/mips/ath79/machtypes.h
-@@ -16,22 +16,112 @@
+@@ -16,22 +16,113 @@
enum ath79_mach_type {
ATH79_MACH_GENERIC = 0,
@@ -25,6 +25,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 */
@@ -215,7 +216,7 @@
config ATH79_MACH_PB44
bool "Atheros PB44 reference board"
select SOC_AR71XX
-@@ -68,6 +148,488 @@ config ATH79_MACH_PB44
+@@ -68,6 +148,499 @@ config ATH79_MACH_PB44
Say 'Y' here if you want your kernel to support the
Atheros PB44 reference board.
@@ -342,6 +343,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
@@ -766,7 +778,7 @@
endif
--- a/arch/mips/ath79/Makefile
+++ b/arch/mips/ath79/Makefile
-@@ -38,9 +38,71 @@ obj-$(CONFIG_ATH79_ROUTERBOOT) += route
+@@ -38,9 +38,72 @@ obj-$(CONFIG_ATH79_ROUTERBOOT) += route
#
# Machines
#
@@ -786,6 +798,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
diff -urN a/trunk/target/linux/ar71xx/files/arch/mips/ath79/mach-dir-825-c1.c
b/trunk/target/linux/ar71xx/files/arch/mips/ath79/mach-dir-825-c1.c
--- a/trunk/target/linux/ar71xx/files/arch/mips/ath79/mach-dir-825-c1.c
1970-01-01 01:00:00.000000000 +0100
+++ b/trunk/target/linux/ar71xx/files/arch/mips/ath79/mach-dir-825-c1.c
2013-01-13 02:55:26.000000000 +0100
@@ -0,0 +1,250 @@
+/*
+ * D-Link DIR-825 rev. C1 board support
+ *
+ * Copyright (C) 2012 Alexander Stadler
+ * Copyright (C) 2012 Gabor Juhos <juh...@openwrt.org>
+ *
+ * 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"
+//my: still needed? (see ath79_register_m25p80 below in _setup) (not here in
wndr4300) (in tl-wdr4300 with additional wdr4300_flash_data..)
+#include "dev-m25p80.h"
+//my: why here in tl-wdr4300?
+#include "dev-spi.h"
+//my: why not here in tl-wdr4300 (here in wndr4300 and rb2011)
+//#include "dev-nfc.h"
+#include "dev-usb.h"
+#include "dev-wmac.h"
+#include "machtypes.h"
+
+#define DIR825C1_GPIO_LED_BLUE_USB 11 //usb
+#define DIR825C1_GPIO_LED_ORANGE_POWER 15 //diag
+#define DIR825C1_GPIO_LED_BLUE_POWER 14 //power
+//my: todo (also see below)
+//#define DIR825C1_GPIO_LED_BLUE_WPS 27 //ses
+#define DIR825C1_GPIO_LED_ORANGE_PLANET 19 //disconnected
+#define DIR825C1_GPIO_LED_BLUE_PLANET 18 //connected
+
+/*my: don't know (also see below)
+#define DIR825B1_GPIO_BTN_RESET 3
+#define DIR825B1_GPIO_BTN_WPS 8
+*/
+
+//my: todo (also see _setup) (=OPTION1)
+//#define DIR825C1_GPIO_USB_POWER 26
+/*my: don't know (also see _setup) (=OPTION2)
+#define WDR4300_GPIO_USB1_POWER 22
+#define WDR4300_GPIO_USB2_POWER 21
+*/
+
+#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:orange:power",
+ .gpio = DIR825C1_GPIO_LED_ORANGE_POWER,
+ .active_low = 1,
+ }, {
+ .name = "d-link:blue:power",
+ .gpio = DIR825C1_GPIO_LED_BLUE_POWER,
+ .active_low = 1,
+//my: todo (also see above)
+// }, {
+// .name = "d-link:blue:wps",
+// .gpio = DIR825C1_GPIO_LED_BLUE_WPS,
+// .active_low = 1,
+ }, {
+ .name = "d-link:orange:planet",
+ .gpio = DIR825C1_GPIO_LED_ORANGE_PLANET,
+ .active_low = 1,
+ }, {
+ .name = "d-link:blue:planet",
+ .gpio = DIR825C1_GPIO_LED_BLUE_PLANET,
+ .active_low = 1,
+ }
+};
+
+static struct gpio_keys_button dir825c1_gpio_keys[] __initdata = {
+/*my: to find (also see above)
+ {
+ .desc = "reset",
+ .type = EV_KEY,
+ .code = KEY_RESTART,
+ .debounce_interval = DIR825C1_KEYS_DEBOUNCE_INTERVAL,
+ .gpio = DIR825C1_GPIO_BTN_RESET,
+ .active_low = 1,
+ }, {
+ .desc = "wps",
+ .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 = 0xc737c737,
+ .led_ctrl1 = 0x00000000,
+ .led_ctrl2 = 0x00000000,
+ .led_ctrl3 = 0x0030c300,
+ .open_drain = false,
+};
+
+static struct ar8327_platform_data dir825c1_ar8327_data = {
+ .pad0_cfg = &dir825c1_ar8327_pad0_cfg,
+ .port0_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_setup(void)
+{
+ u8 *mac = (u8 *) KSEG1ADDR(0x1ffe0000);
+ u8 *art = (u8 *) KSEG1ADDR(0x1fff0000);
+ u8 tmpmac[ETH_ALEN];
+ u8 mac1[ETH_ALEN], mac2[ETH_ALEN];
+
+ dir825c1_read_ascii_mac(mac1, mac + DIR825C1_MAC0_OFFSET);
+ dir825c1_read_ascii_mac(mac2, mac + DIR825C1_MAC1_OFFSET);
+
+// my: still needed? (see #include "dev-m25p80.h" above at begin) (not
here in wndr4300)
+ ath79_register_m25p80(NULL);
+
+ ath79_register_leds_gpio(-1, ARRAY_SIZE(dir825c1_leds_gpio),
+ dir825c1_leds_gpio);
+ ath79_register_gpio_keys_polled(-1, DIR825C1_KEYS_POLL_INTERVAL,
+ ARRAY_SIZE(dir825c1_gpio_keys),
+ dir825c1_gpio_keys);
+
+// ath79_init_mac(tmpmac, mac, -1);
+ ath79_init_mac(tmpmac, mac1, 0);
+ ath79_register_wmac(art + DIR825C1_WMAC_CALDATA_OFFSET, tmpmac);
+
+// ath79_init_mac(tmpmac, mac, 0);
+ ath79_init_mac(tmpmac, mac2, 0);
+// my: from tl-wdr4300 (in dd-wrt its setWirelessLed(0,13) and
setWirelessLed(1,32) (before setWirelessLedPhy1(0) instead the 1,32))
+// ap9x_pci_setup_wmac_led_pin(0, 0);
+// my: AR9382 (AR9380) not AR9582 (AR9580) - so still right?
+ ap91_pci_init(art + DIR825C1_PCIE_CALDATA_OFFSET, tmpmac);
+
+ 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);
+/* my: additionally in rb2011, instead in wr841n-v8
+ ath79_register_mdio(1, 0x0);
+*/
+
+// ath79_init_mac(ath79_eth0_data.mac_addr, mac, -2);
+ ath79_init_mac(ath79_eth0_data.mac_addr, mac1, 0);
+// my: on wr841n-v8 or rb2011 also that, but not in tl-wdr4300 or wndr4300
(see also below at GMAC1) (but propably better mac1, 1) (, 0 in the sample is
because eth0 was -1 on the other platform)
+/*
+ ath79_init_mac(ath79_eth1_data.mac_addr, mac, 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);
+
+/* my: on wr841n-v8 or rb2011 also that eth1 section, but not in
tl-wdr4300 or wndr4300
+*/
+ /* GMAC1 is connected to the internal switch */
+/* in dd-wrt ath79_mac_base "is" art + DB120_MAC1_OFFSET (which is 6,
DB120_MAC0_OFFSET = 0 (which is not used on DIR825C1 because mac1 is for
eth0..)) and , 0
+ and on rb2011 its: (but see above, because we can do the ath79_init_mac
(only) there instead of in the next line)
+ ath79_init_mac(ath79_eth1_data.mac_addr, ath79_mac_base, 5);
+*/
+/* continued
+ ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII;
+ ath79_eth1_data.speed = SPEED_1000;
+ ath79_eth1_data.duplex = DUPLEX_FULL;
+
+ ath79_register_eth(1);
+*/
+
+ //my: why not here in tl-wdr4300 (here in wndr4300 and rb2011)
+ //ath79_register_nfc();
+// my: here in tl-wdr4300 not in wndr4300 (rb2011 and tl-wr841n-v8 have no
usb sections at all)
+// my: todo (also see top) (=OPTION1) (1 GPIO_USB as seen on all except
tl-wdr4300)
+// gpio_request_one(DIR825C1_GPIO_USB_POWER,
+// GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED,
+// "USB power");
+/* my: to find (also see top) (=OPTION2) (2 GPIO_USBs as seen on
tl-wdr4300)
+ gpio_request_one(DIR825C1_GPIO_USB1_POWER,
+ GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED,
+ "USB1 power");
+ gpio_request_one(DIR825C1_GPIO_USB2_POWER,
+ GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED,
+ "USB2 power");
+*/
+ ath79_register_usb();
+}
+
+MIPS_MACHINE(ATH79_MACH_DIR_825_C1, "DIR-825-C1",
+ "D-Link DIR-825 rev. C1",
+ dir825c1_setup);
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel