Root/target/linux/ramips/files/arch/mips/ralink/rt305x/mach-whr-g300n.c

1/*
2 * Buffalo WHR-G300N board support
3 *
4 * Copyright (C) 2009-2010 Gabor Juhos <juhosg@openwrt.org>
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License version 2 as published
8 * by the Free Software Foundation.
9 */
10
11#include <linux/init.h>
12#include <linux/platform_device.h>
13#include <linux/mtd/mtd.h>
14#include <linux/mtd/partitions.h>
15#include <linux/mtd/physmap.h>
16
17#include <asm/mach-ralink/machine.h>
18#include <asm/mach-ralink/dev-gpio-buttons.h>
19#include <asm/mach-ralink/dev-gpio-leds.h>
20#include <asm/mach-ralink/rt305x.h>
21#include <asm/mach-ralink/rt305x_regs.h>
22
23#include "devices.h"
24
25#define WHR_G300N_GPIO_LED_DIAG 7
26#define WHR_G300N_GPIO_LED_ROUTER 9
27#define WHR_G300N_GPIO_LED_SECURITY 14
28
29#define WHR_G300N_GPIO_BUTTON_AOSS 0 /* active low */
30#define WHR_G300N_GPIO_BUTTON_RESET 10 /* active low */
31#define WHR_G300N_GPIO_BUTTON_ROUTER_ON 8 /* active low */
32#define WHR_G300N_GPIO_BUTTON_ROUTER_OFF 11 /* active low */
33
34#define WHR_G300N_BUTTONS_POLL_INTERVAL 20
35
36#ifdef CONFIG_MTD_PARTITIONS
37static struct mtd_partition whr_g300n_partitions[] = {
38    {
39        .name = "u-boot",
40        .offset = 0,
41        .size = 0x030000,
42        .mask_flags = MTD_WRITEABLE,
43    }, {
44        .name = "u-boot-env",
45        .offset = 0x030000,
46        .size = 0x010000,
47        .mask_flags = MTD_WRITEABLE,
48    }, {
49        .name = "factory",
50        .offset = 0x040000,
51        .size = 0x010000,
52        .mask_flags = MTD_WRITEABLE,
53    }, {
54        .name = "kernel",
55        .offset = 0x050000,
56        .size = 0x090000,
57    }, {
58        .name = "rootfs",
59        .offset = 0x140000,
60        .size = 0x2B0000,
61    }, {
62        .name = "user",
63        .offset = 0x3f0000,
64        .size = 0x010000,
65    }, {
66        .name = "openwrt",
67        .offset = 0x050000,
68        .size = 0x3a0000,
69    }
70};
71#endif /* CONFIG_MTD_PARTITIONS */
72
73static struct physmap_flash_data whr_g300n_flash_data = {
74#ifdef CONFIG_MTD_PARTITIONS
75    .nr_parts = ARRAY_SIZE(whr_g300n_partitions),
76    .parts = whr_g300n_partitions,
77#endif
78};
79
80static struct gpio_led whr_g300n_leds_gpio[] __initdata = {
81    {
82        .name = "whr-g300n:red:diag",
83        .gpio = WHR_G300N_GPIO_LED_DIAG,
84        .active_low = 1,
85    }, {
86        .name = "whr-g300n:green:router",
87        .gpio = WHR_G300N_GPIO_LED_ROUTER,
88        .active_low = 1,
89    }, {
90        .name = "whr-g300n:amber:security",
91        .gpio = WHR_G300N_GPIO_LED_SECURITY,
92        .active_low = 1,
93    }
94};
95
96static struct gpio_button whr_g300n_gpio_buttons[] __initdata = {
97    {
98        .desc = "reset",
99        .type = EV_KEY,
100        .code = KEY_RESTART,
101        .threshold = 3,
102        .gpio = WHR_G300N_GPIO_BUTTON_RESET,
103        .active_low = 1,
104    }, {
105        .desc = "aoss",
106        .type = EV_KEY,
107        .code = KEY_WPS_BUTTON,
108        .threshold = 3,
109        .gpio = WHR_G300N_GPIO_BUTTON_AOSS,
110        .active_low = 1,
111    }, {
112        .desc = "router-off",
113        .type = EV_KEY,
114        .code = BTN_2,
115        .threshold = 3,
116        .gpio = WHR_G300N_GPIO_BUTTON_ROUTER_OFF,
117        .active_low = 1,
118    }, {
119        .desc = "router-on",
120        .type = EV_KEY,
121        .code = BTN_3,
122        .threshold = 3,
123        .gpio = WHR_G300N_GPIO_BUTTON_ROUTER_ON,
124        .active_low = 1,
125    }
126};
127
128static void __init whr_g300n_init(void)
129{
130    rt305x_gpio_init(RT305X_GPIO_MODE_GPIO << RT305X_GPIO_MODE_UART0_SHIFT);
131
132    rt305x_register_flash(0, &whr_g300n_flash_data);
133    rt305x_register_ethernet();
134    ramips_register_gpio_leds(-1, ARRAY_SIZE(whr_g300n_leds_gpio),
135                  whr_g300n_leds_gpio);
136    ramips_register_gpio_buttons(-1, WHR_G300N_BUTTONS_POLL_INTERVAL,
137                     ARRAY_SIZE(whr_g300n_gpio_buttons),
138                     whr_g300n_gpio_buttons);
139    rt305x_register_wifi();
140    rt305x_register_wdt();
141}
142
143MIPS_MACHINE(RAMIPS_MACH_WHR_G300N, "WHR-G300N", "Buffalo WHR-G300N",
144         whr_g300n_init);
145

Archive Download this file



interactive