From 428888faec378bb1dfe263d469c66bccfdcebdfb Mon Sep 17 00:00:00 2001 From: Gabor Juhos Date: Thu, 7 Apr 2011 20:53:34 +0000 Subject: [PATCH] ar71xx: add support for the built-in WMAC of the AR934x Signed-off-by: Jaiganesh Narayanan SVN-Revision: 26521 --- .../ar71xx/files/arch/mips/ar71xx/Kconfig | 3 + .../ar71xx/files/arch/mips/ar71xx/Makefile | 1 + .../files/arch/mips/ar71xx/dev-ar934x-wmac.c | 64 +++++++++++++++++++ .../files/arch/mips/ar71xx/dev-ar934x-wmac.h | 18 ++++++ .../mips/include/asm/mach-ar71xx/ar71xx.h | 3 + 5 files changed, 89 insertions(+) create mode 100644 target/linux/ar71xx/files/arch/mips/ar71xx/dev-ar934x-wmac.c create mode 100644 target/linux/ar71xx/files/arch/mips/ar71xx/dev-ar934x-wmac.h diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/Kconfig b/target/linux/ar71xx/files/arch/mips/ar71xx/Kconfig index 79f308b13e..051df4cb76 100644 --- a/target/linux/ar71xx/files/arch/mips/ar71xx/Kconfig +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/Kconfig @@ -309,6 +309,9 @@ config AR71XX_DEV_AP94_PCI config AR71XX_DEV_AR913X_WMAC def_bool n +config AR71XX_DEV_AR934X_WMAC + def_bool n + config AR71XX_DEV_DSA def_bool n diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/Makefile b/target/linux/ar71xx/files/arch/mips/ar71xx/Makefile index b0747b4397..988e521a1a 100644 --- a/target/linux/ar71xx/files/arch/mips/ar71xx/Makefile +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/Makefile @@ -16,6 +16,7 @@ obj-$(CONFIG_PCI) += pci.o obj-$(CONFIG_AR71XX_DEV_AP91_PCI) += dev-ap91-pci.o obj-$(CONFIG_AR71XX_DEV_AP94_PCI) += dev-ap94-pci.o obj-$(CONFIG_AR71XX_DEV_AR913X_WMAC) += dev-ar913x-wmac.o +obj-$(CONFIG_AR71XX_DEV_AR934X_WMAC) += dev-ar934x-wmac.o obj-$(CONFIG_AR71XX_DEV_DSA) += dev-dsa.o obj-$(CONFIG_AR71XX_DEV_GPIO_BUTTONS) += dev-gpio-buttons.o obj-$(CONFIG_AR71XX_DEV_LEDS_GPIO) += dev-leds-gpio.o diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/dev-ar934x-wmac.c b/target/linux/ar71xx/files/arch/mips/ar71xx/dev-ar934x-wmac.c new file mode 100644 index 0000000000..e7d550f4a9 --- /dev/null +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/dev-ar934x-wmac.c @@ -0,0 +1,64 @@ +/* + * Atheros AR934x SoC built-in WMAC device support + * + * Copyright (C) 2010-2011 Jaiganesh Narayanan + * + * Parts of this file are based on Atheros 2.6.31 BSP + * + * 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 +#include +#include +#include +#include +#include + +#include + +#include "dev-ar934x-wmac.h" + +static struct ath9k_platform_data ar934x_wmac_data = { + .led_pin = -1, +}; + +static u8 ar934x_wmac_mac[6]; + +static struct resource ar934x_wmac_resources[] = { + { + .start = AR934X_WMAC_BASE, + .end = AR934X_WMAC_BASE + AR934X_WMAC_SIZE - 1, + .flags = IORESOURCE_MEM, + }, { + .start = AR71XX_CPU_IRQ_IP2, + .end = AR71XX_CPU_IRQ_IP2, + .flags = IORESOURCE_IRQ, + }, +}; + +static struct platform_device ar934x_wmac_device = { + .name = "ath9k", + .id = -1, + .resource = ar934x_wmac_resources, + .num_resources = ARRAY_SIZE(ar934x_wmac_resources), + .dev = { + .platform_data = &ar934x_wmac_data, + }, +}; + +void __init ar934x_add_device_wmac(u8 *cal_data, u8 *mac_addr) +{ + if (cal_data) + memcpy(ar934x_wmac_data.eeprom_data, cal_data, + sizeof(ar934x_wmac_data.eeprom_data)); + + if (mac_addr) { + memcpy(ar934x_wmac_mac, mac_addr, sizeof(ar934x_wmac_mac)); + ar934x_wmac_data.macaddr = ar934x_wmac_mac; + } + + platform_device_register(&ar934x_wmac_device); +} diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/dev-ar934x-wmac.h b/target/linux/ar71xx/files/arch/mips/ar71xx/dev-ar934x-wmac.h new file mode 100644 index 0000000000..36230006a4 --- /dev/null +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/dev-ar934x-wmac.h @@ -0,0 +1,18 @@ +/* + * Atheros AR934x SoC built-in WMAC device support + * + * Copyright (C) 2010-2011 Jaiganesh Narayanan + * + * Parts of this file are based on Atheros linux 2.6.31 BSP + * + * 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. + */ + +#ifndef _AR71XX_DEV_AR934X_WMAC_H +#define _AR71XX_DEV_AR934X_WMAC_H + +void ar934x_add_device_wmac(u8 *cal_data, u8 *mac_addr) __init; + +#endif /* _AR71XX_DEV_AR934X_WMAC_H */ diff --git a/target/linux/ar71xx/files/arch/mips/include/asm/mach-ar71xx/ar71xx.h b/target/linux/ar71xx/files/arch/mips/include/asm/mach-ar71xx/ar71xx.h index e671f58ed7..2a540a83e4 100644 --- a/target/linux/ar71xx/files/arch/mips/include/asm/mach-ar71xx/ar71xx.h +++ b/target/linux/ar71xx/files/arch/mips/include/asm/mach-ar71xx/ar71xx.h @@ -70,6 +70,9 @@ #define AR91XX_WMAC_BASE (AR71XX_APB_BASE + 0x000C0000) #define AR91XX_WMAC_SIZE 0x30000 +#define AR934X_WMAC_BASE (AR71XX_APB_BASE + 0x00100000) +#define AR934X_WMAC_SIZE 0x1ffff + #define AR71XX_MEM_SIZE_MIN 0x0200000 #define AR71XX_MEM_SIZE_MAX 0x10000000 -- 2.30.2