source: trunk/target/linux/ar71xx/files/arch/mips/ar71xx/mach-ubnt.c @ 20722

Last change on this file since 20722 was 20722, checked in by jow, 7 years ago

[PATCH 1/2] Add support for the ar8316 switch.
This patch enhances the ar8216 driver with ar8316 support and fixes some minor
issues with the ar8216 driver itself. It should not break anything, but isn't
tested on ar8216 devices.

[PATCH 2/2] ar71xx: Add the ar8316 driver to rs pro/rb-450g.
Add the ar8216 driver to the ar71xx target, and add network
configurations for the RouterStation Pro and the RouterBoard RB-450G.

  • Property svn:eol-style set to native
File size: 6.8 KB
Line 
1/*
2 *  Ubiquiti RouterStation support
3 *
4 *  Copyright (C) 2008-2009 Gabor Juhos <juhosg@openwrt.org>
5 *  Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org>
6 *  Copyright (C) 2008 Ubiquiti <support@ubnt.com>
7 *
8 *  This program is free software; you can redistribute it and/or modify it
9 *  under the terms of the GNU General Public License version 2 as published
10 *  by the Free Software Foundation.
11 */
12
13#include <asm/mach-ar71xx/ar71xx.h>
14
15#include "machtype.h"
16#include "devices.h"
17#include "dev-m25p80.h"
18#include "dev-ap91-pci.h"
19#include "dev-gpio-buttons.h"
20#include "dev-pb42-pci.h"
21#include "dev-leds-gpio.h"
22#include "dev-usb.h"
23
24#define UBNT_RS_GPIO_LED_RF     2
25#define UBNT_RS_GPIO_SW4        8
26
27#define UBNT_LS_SR71_GPIO_LED_D25       0
28#define UBNT_LS_SR71_GPIO_LED_D26       1
29#define UBNT_LS_SR71_GPIO_LED_D24       2
30#define UBNT_LS_SR71_GPIO_LED_D23       4
31#define UBNT_LS_SR71_GPIO_LED_D22       5
32#define UBNT_LS_SR71_GPIO_LED_D27       6
33#define UBNT_LS_SR71_GPIO_LED_D28       7
34
35#define UBNT_M_GPIO_LED_L1      0
36#define UBNT_M_GPIO_LED_L2      1
37#define UBNT_M_GPIO_LED_L3      11
38#define UBNT_M_GPIO_LED_L4      7
39#define UBNT_M_GPIO_BTN_RESET   12
40
41#define UBNT_BUTTONS_POLL_INTERVAL      20
42
43static struct gpio_led ubnt_rs_leds_gpio[] __initdata = {
44        {
45                .name           = "ubnt:green:rf",
46                .gpio           = UBNT_RS_GPIO_LED_RF,
47                .active_low     = 0,
48        }
49};
50
51static struct gpio_led ubnt_ls_sr71_leds_gpio[] __initdata = {
52        {
53                .name           = "ubnt:green:d22",
54                .gpio           = UBNT_LS_SR71_GPIO_LED_D22,
55                .active_low     = 0,
56        }, {
57                .name           = "ubnt:green:d23",
58                .gpio           = UBNT_LS_SR71_GPIO_LED_D23,
59                .active_low     = 0,
60        }, {
61                .name           = "ubnt:green:d24",
62                .gpio           = UBNT_LS_SR71_GPIO_LED_D24,
63                .active_low     = 0,
64        }, {
65                .name           = "ubnt:red:d25",
66                .gpio           = UBNT_LS_SR71_GPIO_LED_D25,
67                .active_low     = 0,
68        }, {
69                .name           = "ubnt:red:d26",
70                .gpio           = UBNT_LS_SR71_GPIO_LED_D26,
71                .active_low     = 0,
72        }, {
73                .name           = "ubnt:green:d27",
74                .gpio           = UBNT_LS_SR71_GPIO_LED_D27,
75                .active_low     = 0,
76        }, {
77                .name           = "ubnt:green:d28",
78                .gpio           = UBNT_LS_SR71_GPIO_LED_D28,
79                .active_low     = 0,
80        }
81};
82
83static struct gpio_led ubnt_m_leds_gpio[] __initdata = {
84        {
85                .name           = "ubnt:red:link1",
86                .gpio           = UBNT_M_GPIO_LED_L1,
87                .active_low     = 0,
88        }, {
89                .name           = "ubnt:orange:link2",
90                .gpio           = UBNT_M_GPIO_LED_L2,
91                .active_low     = 0,
92        }, {
93                .name           = "ubnt:green:link3",
94                .gpio           = UBNT_M_GPIO_LED_L3,
95                .active_low     = 0,
96        }, {
97                .name           = "ubnt:green:link4",
98                .gpio           = UBNT_M_GPIO_LED_L4,
99                .active_low     = 0,
100        }
101};
102
103static struct gpio_button ubnt_gpio_buttons[] __initdata = {
104        {
105                .desc           = "sw4",
106                .type           = EV_KEY,
107                .code           = BTN_0,
108                .threshold      = 3,
109                .gpio           = UBNT_RS_GPIO_SW4,
110                .active_low     = 1,
111        }
112};
113
114static struct gpio_button ubnt_m_gpio_buttons[] __initdata = {
115        {
116                .desc           = "reset",
117                .type           = EV_KEY,
118                .code           = BTN_0,
119                .threshold      = 3,
120                .gpio           = UBNT_M_GPIO_BTN_RESET,
121                .active_low     = 1,
122        }
123};
124
125static void __init ubnt_generic_setup(void)
126{
127        ar71xx_add_device_m25p80(NULL);
128
129        ar71xx_add_device_gpio_buttons(-1, UBNT_BUTTONS_POLL_INTERVAL,
130                                        ARRAY_SIZE(ubnt_gpio_buttons),
131                                        ubnt_gpio_buttons);
132
133        pb42_pci_init();
134}
135
136#define UBNT_RS_WAN_PHYMASK     (1 << 20)
137#define UBNT_RS_LAN_PHYMASK     ((1 << 16) | (1 << 17) | (1 << 18) | (1 << 19))
138
139static void __init ubnt_rs_setup(void)
140{
141        ubnt_generic_setup();
142
143        ar71xx_add_device_mdio(~(UBNT_RS_WAN_PHYMASK | UBNT_RS_LAN_PHYMASK));
144
145        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;
146        ar71xx_eth0_data.phy_mask = UBNT_RS_WAN_PHYMASK;
147
148        ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
149        ar71xx_eth1_data.speed = SPEED_100;
150        ar71xx_eth1_data.duplex = DUPLEX_FULL;
151
152        ar71xx_add_device_eth(0);
153        ar71xx_add_device_eth(1);
154
155        ar71xx_add_device_usb();
156
157        ar71xx_add_device_leds_gpio(-1, ARRAY_SIZE(ubnt_rs_leds_gpio),
158                                        ubnt_rs_leds_gpio);
159}
160
161MIPS_MACHINE(AR71XX_MACH_UBNT_RS, "UBNT-RS", "Ubiquiti RouterStation",
162             ubnt_rs_setup);
163
164MIPS_MACHINE(AR71XX_MACH_UBNT_AR71XX, "Ubiquiti AR71xx-based board",
165             "Ubiquiti RouterStation", ubnt_rs_setup);
166
167#define UBNT_RSPRO_WAN_PHYMASK  (1 << 4)
168#define UBNT_RSPRO_LAN_PHYMASK  ((1 << 0) | (1 << 1) | (1 << 2) | (1 << 3))
169
170static void __init ubnt_rspro_setup(void)
171{
172        ubnt_generic_setup();
173
174        ar71xx_add_device_mdio(~(UBNT_RSPRO_WAN_PHYMASK | UBNT_RSPRO_LAN_PHYMASK));
175
176        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
177        ar71xx_eth0_data.phy_mask = UBNT_RSPRO_WAN_PHYMASK;
178
179        ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
180        ar71xx_eth1_data.phy_mask = UBNT_RSPRO_LAN_PHYMASK;
181        ar71xx_eth1_data.speed = SPEED_1000;
182        ar71xx_eth1_data.duplex = DUPLEX_FULL;
183
184        ar71xx_add_device_eth(0);
185        ar71xx_add_device_eth(1);
186
187        ar71xx_add_device_usb();
188
189        ar71xx_add_device_leds_gpio(-1, ARRAY_SIZE(ubnt_rs_leds_gpio),
190                                        ubnt_rs_leds_gpio);
191}
192
193MIPS_MACHINE(AR71XX_MACH_UBNT_RSPRO, "UBNT-RSPRO", "Ubiquiti RouterStation Pro",
194             ubnt_rspro_setup);
195
196static void __init ubnt_lsx_setup(void)
197{
198        ubnt_generic_setup();
199}
200
201MIPS_MACHINE(AR71XX_MACH_UBNT_LSX, "UBNT-LSX", "Ubiquiti LSX", ubnt_lsx_setup);
202
203#define UBNT_LSSR71_PHY_MASK    (1 << 1)
204
205static void __init ubnt_lssr71_setup(void)
206{
207        ubnt_generic_setup();
208
209        ar71xx_add_device_mdio(~UBNT_LSSR71_PHY_MASK);
210
211        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;
212        ar71xx_eth0_data.phy_mask = UBNT_LSSR71_PHY_MASK;
213
214        ar71xx_add_device_eth(0);
215
216        ar71xx_add_device_leds_gpio(-1, ARRAY_SIZE(ubnt_ls_sr71_leds_gpio),
217                                        ubnt_ls_sr71_leds_gpio);
218}
219
220MIPS_MACHINE(AR71XX_MACH_UBNT_LSSR71, "UBNT-LS-SR71", "Ubiquiti LS-SR71",
221             ubnt_lssr71_setup);
222
223static void __init ubnt_m_setup(void)
224{
225        u8 *mac = (u8 *) KSEG1ADDR(0x1fff0000);
226        u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);
227
228        ar71xx_set_mac_base(mac);
229
230        ar71xx_add_device_m25p80(NULL);
231
232        ar71xx_add_device_mdio(~0);
233
234        ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;
235        ar71xx_eth0_data.speed = SPEED_100;
236        ar71xx_eth0_data.duplex = DUPLEX_FULL;
237        ar71xx_eth0_data.fifo_cfg1 = 0x0010ffff;
238        ar71xx_eth0_data.fifo_cfg2 = 0x015500aa;
239        ar71xx_eth0_data.fifo_cfg3 = 0x01f00140;
240
241        ar71xx_add_device_eth(0);
242
243        ap91_pci_init(ee, NULL);
244
245        ar71xx_add_device_leds_gpio(-1, ARRAY_SIZE(ubnt_m_leds_gpio),
246                                        ubnt_m_leds_gpio);
247
248        ar71xx_add_device_gpio_buttons(-1, UBNT_BUTTONS_POLL_INTERVAL,
249                                        ARRAY_SIZE(ubnt_m_gpio_buttons),
250                                        ubnt_m_gpio_buttons);
251}
252
253static void __init ubnt_rocket_m_setup(void)
254{
255        ubnt_m_setup();
256        ar71xx_add_device_usb();
257}
258
259MIPS_MACHINE(AR71XX_MACH_UBNT_BULLET_M, "UBNT-BM", "Ubiquiti Bullet M",
260             ubnt_m_setup);
261MIPS_MACHINE(AR71XX_MACH_UBNT_ROCKET_M, "UBNT-RM", "Ubiquiti Rocket M",
262             ubnt_rocket_m_setup);
263
264/* TODO detect the second ethernet port and use one
265   init function for all Ubiquiti MIMO series products */
266static void __init ubnt_nano_m_setup(void)
267{
268        ubnt_m_setup();
269
270        ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
271        ar71xx_eth1_data.speed = SPEED_1000;
272        ar71xx_eth1_data.duplex = DUPLEX_FULL;
273        ar71xx_eth1_data.fifo_cfg1 = 0x0010ffff;
274        ar71xx_eth1_data.fifo_cfg2 = 0x015500aa;
275        ar71xx_eth1_data.fifo_cfg3 = 0x01f00140;
276
277        ar71xx_add_device_eth(1);
278}
279
280MIPS_MACHINE(AR71XX_MACH_UBNT_NANO_M, "UBNT-NM", "Ubiquiti Nanostation M",
281             ubnt_nano_m_setup);
Note: See TracBrowser for help on using the repository browser.