1/*
2 *  Asus RT-N15 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/rtl8366.h>
14#include <linux/ethtool.h>
15
16#include <asm/mach-ralink/machine.h>
17#include <asm/mach-ralink/dev-gpio-buttons.h>
18#include <asm/mach-ralink/dev-gpio-leds.h>
19#include <asm/mach-ralink/rt288x.h>
20#include <asm/mach-ralink/rt288x_regs.h>
21#include <asm/mach-ralink/ramips_eth_platform.h>
22
23#include "devices.h"
24
25#define RT_N15_GPIO_LED_POWER		11
26#define RT_N15_GPIO_BUTTON_WPS		0
27#define RT_N15_GPIO_BUTTON_RESET	12
28
29#define RT_N15_GPIO_RTL8366_SCK		2
30#define RT_N15_GPIO_RTL8366_SDA		1
31
32#define RT_N15_KEYS_POLL_INTERVAL	20
33#define RT_N15_KEYS_DEBOUNCE_INTERVAL	(3 * RT_N15_KEYS_POLL_INTERVAL)
34
35static struct gpio_led rt_n15_leds_gpio[] __initdata = {
36	{
37		.name		= "rt-n15:blue:power",
38		.gpio		= RT_N15_GPIO_LED_POWER,
39		.active_low	= 1,
40	}
41};
42
43static struct gpio_keys_button rt_n15_gpio_buttons[] __initdata = {
44	{
45		.desc		= "reset",
46		.type		= EV_KEY,
47		.code		= KEY_RESTART,
48		.debounce_interval = RT_N15_KEYS_DEBOUNCE_INTERVAL,
49		.gpio		= RT_N15_GPIO_BUTTON_RESET,
50		.active_low	= 1,
51	}, {
52		.desc		= "wps",
53		.type		= EV_KEY,
54		.code		= KEY_WPS_BUTTON,
55		.debounce_interval = RT_N15_KEYS_DEBOUNCE_INTERVAL,
56		.gpio		= RT_N15_GPIO_BUTTON_WPS,
57		.active_low	= 1,
58	}
59};
60
61static struct rtl8366_platform_data rt_n15_rtl8366s_data = {
62	.gpio_sda        = RT_N15_GPIO_RTL8366_SDA,
63	.gpio_sck        = RT_N15_GPIO_RTL8366_SCK,
64};
65
66static struct platform_device rt_n15_rtl8366s_device = {
67	.name		= RTL8366S_DRIVER_NAME,
68	.id		= -1,
69	.dev = {
70		.platform_data	= &rt_n15_rtl8366s_data,
71	}
72};
73
74static void __init rt_n15_init(void)
75{
76	rt288x_gpio_init(RT2880_GPIO_MODE_UART0 | RT2880_GPIO_MODE_I2C);
77
78	rt288x_register_flash(0);
79
80	ramips_register_gpio_leds(-1, ARRAY_SIZE(rt_n15_leds_gpio),
81				  rt_n15_leds_gpio);
82
83	ramips_register_gpio_buttons(-1, RT_N15_KEYS_POLL_INTERVAL,
84				     ARRAY_SIZE(rt_n15_gpio_buttons),
85				     rt_n15_gpio_buttons);
86
87	platform_device_register(&rt_n15_rtl8366s_device);
88
89	rt288x_register_wifi();
90
91	rt288x_eth_data.speed = SPEED_1000;
92	rt288x_eth_data.duplex = DUPLEX_FULL;
93	rt288x_eth_data.tx_fc = 1;
94	rt288x_eth_data.rx_fc = 1;
95	rt288x_register_ethernet();
96	rt288x_register_wdt();
97}
98
99MIPS_MACHINE(RAMIPS_MACH_RT_N15, "RT-N15", "Asus RT-N15", rt_n15_init);
100