aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/ath79
diff options
context:
space:
mode:
Diffstat (limited to 'arch/mips/ath79')
-rw-r--r--arch/mips/ath79/Kconfig5
-rw-r--r--arch/mips/ath79/Makefile1
-rw-r--r--arch/mips/ath79/dev-ar913x-wmac.c60
-rw-r--r--arch/mips/ath79/dev-ar913x-wmac.h17
-rw-r--r--arch/mips/ath79/mach-ap81.c6
5 files changed, 89 insertions, 0 deletions
diff --git a/arch/mips/ath79/Kconfig b/arch/mips/ath79/Kconfig
index 2e397708e2f7..b05828260f7f 100644
--- a/arch/mips/ath79/Kconfig
+++ b/arch/mips/ath79/Kconfig
@@ -5,6 +5,7 @@ menu "Atheros AR71XX/AR724X/AR913X machine selection"
5config ATH79_MACH_AP81 5config ATH79_MACH_AP81
6 bool "Atheros AP81 reference board" 6 bool "Atheros AP81 reference board"
7 select SOC_AR913X 7 select SOC_AR913X
8 select ATH79_DEV_AR913X_WMAC
8 select ATH79_DEV_GPIO_BUTTONS 9 select ATH79_DEV_GPIO_BUTTONS
9 select ATH79_DEV_LEDS_GPIO 10 select ATH79_DEV_LEDS_GPIO
10 select ATH79_DEV_SPI 11 select ATH79_DEV_SPI
@@ -33,6 +34,10 @@ config SOC_AR724X
33config SOC_AR913X 34config SOC_AR913X
34 def_bool n 35 def_bool n
35 36
37config ATH79_DEV_AR913X_WMAC
38 depends on SOC_AR913X
39 def_bool n
40
36config ATH79_DEV_GPIO_BUTTONS 41config ATH79_DEV_GPIO_BUTTONS
37 def_bool n 42 def_bool n
38 43
diff --git a/arch/mips/ath79/Makefile b/arch/mips/ath79/Makefile
index a245e3645271..c33d4653007c 100644
--- a/arch/mips/ath79/Makefile
+++ b/arch/mips/ath79/Makefile
@@ -16,6 +16,7 @@ obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
16# Devices 16# Devices
17# 17#
18obj-y += dev-common.o 18obj-y += dev-common.o
19obj-$(CONFIG_ATH79_DEV_AR913X_WMAC) += dev-ar913x-wmac.o
19obj-$(CONFIG_ATH79_DEV_GPIO_BUTTONS) += dev-gpio-buttons.o 20obj-$(CONFIG_ATH79_DEV_GPIO_BUTTONS) += dev-gpio-buttons.o
20obj-$(CONFIG_ATH79_DEV_LEDS_GPIO) += dev-leds-gpio.o 21obj-$(CONFIG_ATH79_DEV_LEDS_GPIO) += dev-leds-gpio.o
21obj-$(CONFIG_ATH79_DEV_SPI) += dev-spi.o 22obj-$(CONFIG_ATH79_DEV_SPI) += dev-spi.o
diff --git a/arch/mips/ath79/dev-ar913x-wmac.c b/arch/mips/ath79/dev-ar913x-wmac.c
new file mode 100644
index 000000000000..48f425a5ba28
--- /dev/null
+++ b/arch/mips/ath79/dev-ar913x-wmac.c
@@ -0,0 +1,60 @@
1/*
2 * Atheros AR913X SoC built-in WMAC device support
3 *
4 * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org>
5 * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org>
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License version 2 as published
9 * by the Free Software Foundation.
10 */
11
12#include <linux/init.h>
13#include <linux/delay.h>
14#include <linux/irq.h>
15#include <linux/platform_device.h>
16#include <linux/ath9k_platform.h>
17
18#include <asm/mach-ath79/ath79.h>
19#include <asm/mach-ath79/ar71xx_regs.h>
20#include "dev-ar913x-wmac.h"
21
22static struct ath9k_platform_data ar913x_wmac_data;
23
24static struct resource ar913x_wmac_resources[] = {
25 {
26 .start = AR913X_WMAC_BASE,
27 .end = AR913X_WMAC_BASE + AR913X_WMAC_SIZE - 1,
28 .flags = IORESOURCE_MEM,
29 }, {
30 .start = ATH79_CPU_IRQ_IP2,
31 .end = ATH79_CPU_IRQ_IP2,
32 .flags = IORESOURCE_IRQ,
33 },
34};
35
36static struct platform_device ar913x_wmac_device = {
37 .name = "ath9k",
38 .id = -1,
39 .resource = ar913x_wmac_resources,
40 .num_resources = ARRAY_SIZE(ar913x_wmac_resources),
41 .dev = {
42 .platform_data = &ar913x_wmac_data,
43 },
44};
45
46void __init ath79_register_ar913x_wmac(u8 *cal_data)
47{
48 if (cal_data)
49 memcpy(ar913x_wmac_data.eeprom_data, cal_data,
50 sizeof(ar913x_wmac_data.eeprom_data));
51
52 /* reset the WMAC */
53 ath79_device_reset_set(AR913X_RESET_AMBA2WMAC);
54 mdelay(10);
55
56 ath79_device_reset_clear(AR913X_RESET_AMBA2WMAC);
57 mdelay(10);
58
59 platform_device_register(&ar913x_wmac_device);
60}
diff --git a/arch/mips/ath79/dev-ar913x-wmac.h b/arch/mips/ath79/dev-ar913x-wmac.h
new file mode 100644
index 000000000000..579d562bbda8
--- /dev/null
+++ b/arch/mips/ath79/dev-ar913x-wmac.h
@@ -0,0 +1,17 @@
1/*
2 * Atheros AR913X SoC built-in WMAC device support
3 *
4 * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org>
5 * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org>
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License version 2 as published
9 * by the Free Software Foundation.
10 */
11
12#ifndef _ATH79_DEV_AR913X_WMAC_H
13#define _ATH79_DEV_AR913X_WMAC_H
14
15void ath79_register_ar913x_wmac(u8 *cal_data);
16
17#endif /* _ATH79_DEV_AR913X_WMAC_H */
diff --git a/arch/mips/ath79/mach-ap81.c b/arch/mips/ath79/mach-ap81.c
index 4e4ccd4f80d9..eee4c121deb4 100644
--- a/arch/mips/ath79/mach-ap81.c
+++ b/arch/mips/ath79/mach-ap81.c
@@ -10,6 +10,7 @@
10 */ 10 */
11 11
12#include "machtypes.h" 12#include "machtypes.h"
13#include "dev-ar913x-wmac.h"
13#include "dev-gpio-buttons.h" 14#include "dev-gpio-buttons.h"
14#include "dev-leds-gpio.h" 15#include "dev-leds-gpio.h"
15#include "dev-spi.h" 16#include "dev-spi.h"
@@ -25,6 +26,8 @@
25#define AP81_KEYS_POLL_INTERVAL 20 /* msecs */ 26#define AP81_KEYS_POLL_INTERVAL 20 /* msecs */
26#define AP81_KEYS_DEBOUNCE_INTERVAL (3 * AP81_KEYS_POLL_INTERVAL) 27#define AP81_KEYS_DEBOUNCE_INTERVAL (3 * AP81_KEYS_POLL_INTERVAL)
27 28
29#define AP81_CAL_DATA_ADDR 0x1fff1000
30
28static struct gpio_led ap81_leds_gpio[] __initdata = { 31static struct gpio_led ap81_leds_gpio[] __initdata = {
29 { 32 {
30 .name = "ap81:green:status", 33 .name = "ap81:green:status",
@@ -79,6 +82,8 @@ static struct ath79_spi_platform_data ap81_spi_data = {
79 82
80static void __init ap81_setup(void) 83static void __init ap81_setup(void)
81{ 84{
85 u8 *cal_data = (u8 *) KSEG1ADDR(AP81_CAL_DATA_ADDR);
86
82 ath79_register_leds_gpio(-1, ARRAY_SIZE(ap81_leds_gpio), 87 ath79_register_leds_gpio(-1, ARRAY_SIZE(ap81_leds_gpio),
83 ap81_leds_gpio); 88 ap81_leds_gpio);
84 ath79_register_gpio_keys_polled(-1, AP81_KEYS_POLL_INTERVAL, 89 ath79_register_gpio_keys_polled(-1, AP81_KEYS_POLL_INTERVAL,
@@ -86,6 +91,7 @@ static void __init ap81_setup(void)
86 ap81_gpio_keys); 91 ap81_gpio_keys);
87 ath79_register_spi(&ap81_spi_data, ap81_spi_info, 92 ath79_register_spi(&ap81_spi_data, ap81_spi_info,
88 ARRAY_SIZE(ap81_spi_info)); 93 ARRAY_SIZE(ap81_spi_info));
94 ath79_register_ar913x_wmac(cal_data);
89} 95}
90 96
91MIPS_MACHINE(ATH79_MACH_AP81, "AP81", "Atheros AP81 reference board", 97MIPS_MACHINE(ATH79_MACH_AP81, "AP81", "Atheros AP81 reference board",