ramips/rt305x: add initial support for Rt5350 SoC
[openwrt.git] / 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
14 #include <asm/mach-ralink/machine.h>
15 #include <asm/mach-ralink/dev-gpio-buttons.h>
16 #include <asm/mach-ralink/dev-gpio-leds.h>
17 #include <asm/mach-ralink/rt305x.h>
18 #include <asm/mach-ralink/rt305x_regs.h>
19
20 #include "devices.h"
21
22 #define WHR_G300N_GPIO_LED_DIAG         7
23 #define WHR_G300N_GPIO_LED_ROUTER       9
24 #define WHR_G300N_GPIO_LED_SECURITY     14
25
26 #define WHR_G300N_GPIO_BUTTON_AOSS              0       /* active low */
27 #define WHR_G300N_GPIO_BUTTON_RESET             10      /* active low */
28 #define WHR_G300N_GPIO_BUTTON_ROUTER_ON         8       /* active low */
29 #define WHR_G300N_GPIO_BUTTON_ROUTER_OFF        11      /* active low */
30
31 #define WHR_G300N_KEYS_POLL_INTERVAL            20
32 #define WHR_G300N_KEYS_DEBOUNCE_INTERVAL        (3 * WHR_G300N_KEYS_POLL_INTERVAL)
33
34 static struct gpio_led whr_g300n_leds_gpio[] __initdata = {
35         {
36                 .name           = "whr-g300n:red:diag",
37                 .gpio           = WHR_G300N_GPIO_LED_DIAG,
38                 .active_low     = 1,
39         }, {
40                 .name           = "whr-g300n:green:router",
41                 .gpio           = WHR_G300N_GPIO_LED_ROUTER,
42                 .active_low     = 1,
43         }, {
44                 .name           = "whr-g300n:amber:security",
45                 .gpio           = WHR_G300N_GPIO_LED_SECURITY,
46                 .active_low     = 1,
47         }
48 };
49
50 static struct gpio_keys_button whr_g300n_gpio_buttons[] __initdata = {
51         {
52                 .desc           = "reset",
53                 .type           = EV_KEY,
54                 .code           = KEY_RESTART,
55                 .debounce_interval = WHR_G300N_KEYS_DEBOUNCE_INTERVAL,
56                 .gpio           = WHR_G300N_GPIO_BUTTON_RESET,
57                 .active_low     = 1,
58         }, {
59                 .desc           = "aoss",
60                 .type           = EV_KEY,
61                 .code           = KEY_WPS_BUTTON,
62                 .debounce_interval = WHR_G300N_KEYS_DEBOUNCE_INTERVAL,
63                 .gpio           = WHR_G300N_GPIO_BUTTON_AOSS,
64                 .active_low     = 1,
65         }, {
66                 .desc           = "router-off",
67                 .type           = EV_KEY,
68                 .code           = BTN_2,
69                 .debounce_interval = WHR_G300N_KEYS_DEBOUNCE_INTERVAL,
70                 .gpio           = WHR_G300N_GPIO_BUTTON_ROUTER_OFF,
71                 .active_low     = 1,
72         }, {
73                 .desc           = "router-on",
74                 .type           = EV_KEY,
75                 .code           = BTN_3,
76                 .debounce_interval = WHR_G300N_KEYS_DEBOUNCE_INTERVAL,
77                 .gpio           = WHR_G300N_GPIO_BUTTON_ROUTER_ON,
78                 .active_low     = 1,
79         }
80 };
81
82 static void __init whr_g300n_init(void)
83 {
84         rt305x_gpio_init(RT305X_GPIO_MODE_GPIO << RT305X_GPIO_MODE_UART0_SHIFT);
85
86         rt305x_register_flash(0);
87
88         rt305x_esw_data.vlan_config = RT305X_ESW_VLAN_CONFIG_LLLLW;
89         rt305x_register_ethernet();
90         ramips_register_gpio_leds(-1, ARRAY_SIZE(whr_g300n_leds_gpio),
91                                   whr_g300n_leds_gpio);
92         ramips_register_gpio_buttons(-1, WHR_G300N_KEYS_POLL_INTERVAL,
93                                      ARRAY_SIZE(whr_g300n_gpio_buttons),
94                                      whr_g300n_gpio_buttons);
95         rt305x_register_wifi();
96         rt305x_register_wdt();
97 }
98
99 MIPS_MACHINE(RAMIPS_MACH_WHR_G300N, "WHR-G300N", "Buffalo WHR-G300N",
100              whr_g300n_init);