diff options
| author | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2011-10-27 07:54:51 +0000 | 
|---|---|---|
| committer | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2011-10-27 07:54:51 +0000 | 
| commit | 85713e36cb1b74c0b6598d67eff916a7bab41209 (patch) | |
| tree | b18e84d1f890e19d2ab0b4b515df90fdc78764a5 | |
| parent | 708b461947715669a071faac5350be0f11ec2312 (diff) | |
ar71xx: add initial support for the OpenMesh OM2P board
Based on a patch by Marek Lindner <marek@open-mesh.com>
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@28617 3c298f89-4303-0410-b956-a3cf2f4a3e73
| -rwxr-xr-x | target/linux/ar71xx/base-files/etc/diag.sh | 3 | ||||
| -rwxr-xr-x | target/linux/ar71xx/base-files/lib/ar71xx.sh | 3 | ||||
| -rw-r--r-- | target/linux/ar71xx/config-2.6.39 | 1 | ||||
| -rw-r--r-- | target/linux/ar71xx/files/arch/mips/ar71xx/Kconfig | 8 | ||||
| -rw-r--r-- | target/linux/ar71xx/files/arch/mips/ar71xx/Makefile | 1 | ||||
| -rw-r--r-- | target/linux/ar71xx/files/arch/mips/ar71xx/mach-om2p.c | 124 | ||||
| -rw-r--r-- | target/linux/ar71xx/files/arch/mips/ar71xx/machtype.h | 1 | 
7 files changed, 141 insertions, 0 deletions
diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh index 873cdfe99..ad4fc28b7 100755 --- a/target/linux/ar71xx/base-files/etc/diag.sh +++ b/target/linux/ar71xx/base-files/etc/diag.sh @@ -72,6 +72,9 @@ get_status_led() {  	nbg460n_550n_550nh)  		status_led="nbg460n:green:power"  		;; +	om2p) +		status_led="om2p:blue:power" +		;;  	pb44)  		status_led="pb44:amber:jump1"  		;; diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh index ea8334f27..cba0da0aa 100755 --- a/target/linux/ar71xx/base-files/lib/ar71xx.sh +++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh @@ -64,6 +64,9 @@ ar71xx_board_name() {  	*"NBG460N/550N/550NH")  		name="nbg460n_550n_550nh"  		;; +	*OM2P) +		name="om2p" +		;;  	*PB42)  		name="pb42"  		;; diff --git a/target/linux/ar71xx/config-2.6.39 b/target/linux/ar71xx/config-2.6.39 index de7071a10..4371a5a65 100644 --- a/target/linux/ar71xx/config-2.6.39 +++ b/target/linux/ar71xx/config-2.6.39 @@ -29,6 +29,7 @@ CONFIG_AR71XX_MACH_JWAP003=y  CONFIG_AR71XX_MACH_MZK_W04NU=y  CONFIG_AR71XX_MACH_MZK_W300NH=y  CONFIG_AR71XX_MACH_NBG460N=y +CONFIG_AR71XX_MACH_OM2P=y  CONFIG_AR71XX_MACH_PB42=y  CONFIG_AR71XX_MACH_PB44=y  CONFIG_AR71XX_MACH_PB92=y diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/Kconfig b/target/linux/ar71xx/files/arch/mips/ar71xx/Kconfig index 021c1c7dc..71da43e4d 100644 --- a/target/linux/ar71xx/files/arch/mips/ar71xx/Kconfig +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/Kconfig @@ -209,6 +209,14 @@ config AR71XX_MACH_WNR2000  	select AR71XX_DEV_GPIO_BUTTONS  	select AR71XX_DEV_LEDS_GPIO +config AR71XX_MACH_OM2P +	bool "OpenMesh OM2P board support" +	select SOC_AR724X +	select AR71XX_DEV_M25P80 +	select AR71XX_DEV_AP91_PCI if PCI +	select AR71XX_DEV_GPIO_BUTTONS +	select AR71XX_DEV_LEDS_GPIO +  config AR71XX_MACH_MZK_W04NU  	bool "Planex MZK-W04NU board support"  	select SOC_AR913X diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/Makefile b/target/linux/ar71xx/files/arch/mips/ar71xx/Makefile index 5b89ffb15..f22d38864 100644 --- a/target/linux/ar71xx/files/arch/mips/ar71xx/Makefile +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/Makefile @@ -44,6 +44,7 @@ obj-$(CONFIG_AR71XX_MACH_JWAP003)	+= mach-jwap003.o  obj-$(CONFIG_AR71XX_MACH_MZK_W04NU)	+= mach-mzk-w04nu.o  obj-$(CONFIG_AR71XX_MACH_MZK_W300NH)	+= mach-mzk-w300nh.o  obj-$(CONFIG_AR71XX_MACH_NBG460N)	+= mach-nbg460n.o +obj-$(CONFIG_AR71XX_MACH_OM2P)		+= mach-om2p.o  obj-$(CONFIG_AR71XX_MACH_PB42)		+= mach-pb42.o  obj-$(CONFIG_AR71XX_MACH_PB44)		+= mach-pb44.o  obj-$(CONFIG_AR71XX_MACH_PB92)		+= mach-pb92.o diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/mach-om2p.c b/target/linux/ar71xx/files/arch/mips/ar71xx/mach-om2p.c new file mode 100644 index 000000000..926e01041 --- /dev/null +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/mach-om2p.c @@ -0,0 +1,124 @@ +/* + *  OpenMesh OM2P support + * + *  Copyright (C) 2011 Marek Lindner <marek@open-mesh.com> + * + *  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/mtd/mtd.h> +#include <linux/mtd/partitions.h> +#include <linux/platform_device.h> + +#include <asm/mach-ar71xx/ar71xx.h> +#include <asm/mach-ar71xx/gpio.h> + +#include "machtype.h" +#include "devices.h" +#include "dev-ap91-pci.h" +#include "dev-m25p80.h" +#include "dev-leds-gpio.h" +#include "dev-gpio-buttons.h" + +#define OM2P_GPIO_LED_POWER	0 +#define OM2P_GPIO_LED_GREEN	13 +#define OM2P_GPIO_LED_RED	14 +#define OM2P_GPIO_LED_YELLOW	15 +#define OM2P_GPIO_LED_LAN	16 +#define OM2P_GPIO_LED_WAN	17 +#define OM2P_GPIO_BTN_RESET	11 + +#define OM2P_KEYS_POLL_INTERVAL		20	/* msecs */ +#define OM2P_KEYS_DEBOUNCE_INTERVAL	(3 * OM2P_KEYS_POLL_INTERVAL) + +#define OM2P_WAN_PHYMASK	BIT(4) + +static struct flash_platform_data om2p_flash_data = { +	.type = "s25sl12800", +	.name = "ar7240-nor0", +}; + +static struct gpio_led om2p_leds_gpio[] __initdata = { +	{ +		.name		= "om2p:blue:power", +		.gpio		= OM2P_GPIO_LED_POWER, +		.active_low	= 1, +	}, { +		.name		= "om2p:red:wifi", +		.gpio		= OM2P_GPIO_LED_RED, +		.active_low	= 1, +	}, { +		.name		= "om2p:yellow:wifi", +		.gpio		= OM2P_GPIO_LED_YELLOW, +		.active_low	= 1, +	}, { +		.name		= "om2p:green:wifi", +		.gpio		= OM2P_GPIO_LED_GREEN, +		.active_low	= 1, +	}, { +		.name		= "om2p:blue:lan", +		.gpio		= OM2P_GPIO_LED_LAN, +		.active_low	= 1, +	}, { +		.name		= "om2p:blue:wan", +		.gpio		= OM2P_GPIO_LED_WAN, +		.active_low	= 1, +	} +}; + +static struct gpio_keys_button om2p_gpio_keys[] __initdata = { +	{ +		.desc		= "reset", +		.type		= EV_KEY, +		.code		= KEY_RESTART, +		.debounce_interval = OM2P_KEYS_DEBOUNCE_INTERVAL, +		.gpio		= OM2P_GPIO_BTN_RESET, +		.active_low	= 1, +	} +}; + +static void __init om2p_setup(void) +{ +	u8 *mac1 = (u8 *)KSEG1ADDR(0x1ffc0000); +	u8 *mac2 = (u8 *)KSEG1ADDR(0x1ffc0000 + ETH_ALEN); +	u8 *ee = (u8 *)KSEG1ADDR(0x1ffc1000); + +	ar71xx_gpio_function_disable(AR724X_GPIO_FUNC_ETH_SWITCH_LED0_EN | +				     AR724X_GPIO_FUNC_ETH_SWITCH_LED1_EN | +				     AR724X_GPIO_FUNC_ETH_SWITCH_LED2_EN | +				     AR724X_GPIO_FUNC_ETH_SWITCH_LED3_EN | +				     AR724X_GPIO_FUNC_ETH_SWITCH_LED4_EN); + +	ar71xx_add_device_m25p80(&om2p_flash_data); + +	ar71xx_add_device_mdio(~OM2P_WAN_PHYMASK); + +	ar71xx_init_mac(ar71xx_eth0_data.mac_addr, mac1, 0); +	ar71xx_init_mac(ar71xx_eth1_data.mac_addr, mac2, 0); + +	ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII; +	ar71xx_eth0_data.speed = SPEED_100; +	ar71xx_eth0_data.duplex = DUPLEX_FULL; +	ar71xx_eth0_data.phy_mask = OM2P_WAN_PHYMASK; + +	ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII; +	ar71xx_eth1_data.speed = SPEED_1000; +	ar71xx_eth1_data.duplex = DUPLEX_FULL; +	ar71xx_eth1_data.has_ar7240_switch = 1; + +	ar71xx_add_device_eth(0); +	ar71xx_add_device_eth(1); + +	ap91_pci_init(ee, NULL); + +	ar71xx_add_device_leds_gpio(-1, ARRAY_SIZE(om2p_leds_gpio), +					om2p_leds_gpio); + +	ar71xx_register_gpio_keys_polled(-1, OM2P_KEYS_POLL_INTERVAL, +					 ARRAY_SIZE(om2p_gpio_keys), +					 om2p_gpio_keys); +} + +MIPS_MACHINE(AR71XX_MACH_OM2P, "OM2P", "OpenMesh OM2P", om2p_setup); diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/machtype.h b/target/linux/ar71xx/files/arch/mips/ar71xx/machtype.h index 91d833a12..cd95da96b 100644 --- a/target/linux/ar71xx/files/arch/mips/ar71xx/machtype.h +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/machtype.h @@ -33,6 +33,7 @@ enum ar71xx_mach_type {  	AR71XX_MACH_MZK_W04NU,	/* Planex MZK-W04NU */  	AR71XX_MACH_MZK_W300NH,	/* Planex MZK-W300NH */  	AR71XX_MACH_NBG460N,	/* Zyxel NBG460N/550N/550NH */ +	AR71XX_MACH_OM2P,       /* OpenMesh OM2P */  	AR71XX_MACH_PB42,	/* Atheros PB42 */  	AR71XX_MACH_PB44,	/* Atheros PB44 */  	AR71XX_MACH_PB92,	/* Atheros PB92 */  | 
