X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=target%2Flinux%2Far71xx%2Ffiles%2Farch%2Fmips%2Far71xx%2Fmach-ubnt.c;h=5b1c504f39b2d49443766d630962ebd784718542;hb=3dc1073b53fada9ec07144902122481ab96692d1;hp=177b264632da674dca0d596122b7cf334a60fbce;hpb=399aeeed70bc2b11147a3a2dfdae212e2239192b;p=librecmc%2Flibrecmc.git diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/mach-ubnt.c b/target/linux/ar71xx/files/arch/mips/ar71xx/mach-ubnt.c index 177b264632..5b1c504f39 100644 --- a/target/linux/ar71xx/files/arch/mips/ar71xx/mach-ubnt.c +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/mach-ubnt.c @@ -10,16 +10,16 @@ * by the Free Software Foundation. */ -#include -#include -#include -#include - -#include #include -#include +#include "machtype.h" #include "devices.h" +#include "dev-m25p80.h" +#include "dev-ap91-pci.h" +#include "dev-gpio-buttons.h" +#include "dev-pb42-pci.h" +#include "dev-leds-gpio.h" +#include "dev-usb.h" #define UBNT_RS_GPIO_LED_RF 2 #define UBNT_RS_GPIO_SW4 8 @@ -32,39 +32,14 @@ #define UBNT_LS_SR71_GPIO_LED_D27 6 #define UBNT_LS_SR71_GPIO_LED_D28 7 -#define UBNT_BULLET_M_GPIO_LED_L1 0 -#define UBNT_BULLET_M_GPIO_LED_L2 1 -#define UBNT_BULLET_M_GPIO_LED_L3 11 -#define UBNT_BULLET_M_GPIO_LED_L4 7 -#define UBNT_BULLET_M_GPIO_BTN_RESET 12 +#define UBNT_M_GPIO_LED_L1 0 +#define UBNT_M_GPIO_LED_L2 1 +#define UBNT_M_GPIO_LED_L3 11 +#define UBNT_M_GPIO_LED_L4 7 +#define UBNT_M_GPIO_BTN_RESET 12 #define UBNT_BUTTONS_POLL_INTERVAL 20 -static struct spi_board_info ubnt_spi_info[] = { - { - .bus_num = 0, - .chip_select = 0, - .max_speed_hz = 25000000, - .modalias = "m25p80", - } -}; - -static struct ar71xx_pci_irq ubnt_pci_irqs[] __initdata = { - { - .slot = 0, - .pin = 1, - .irq = AR71XX_PCI_IRQ_DEV0, - }, { - .slot = 1, - .pin = 1, - .irq = AR71XX_PCI_IRQ_DEV1, - }, { - .slot = 2, - .pin = 1, - .irq = AR71XX_PCI_IRQ_DEV2, - } -}; - static struct gpio_led ubnt_rs_leds_gpio[] __initdata = { { .name = "ubnt:green:rf", @@ -105,22 +80,22 @@ static struct gpio_led ubnt_ls_sr71_leds_gpio[] __initdata = { } }; -static struct gpio_led ubnt_bullet_m_leds_gpio[] __initdata = { +static struct gpio_led ubnt_m_leds_gpio[] __initdata = { { .name = "ubnt:red:link1", - .gpio = UBNT_BULLET_M_GPIO_LED_L1, + .gpio = UBNT_M_GPIO_LED_L1, .active_low = 0, }, { .name = "ubnt:orange:link2", - .gpio = UBNT_BULLET_M_GPIO_LED_L2, + .gpio = UBNT_M_GPIO_LED_L2, .active_low = 0, }, { .name = "ubnt:green:link3", - .gpio = UBNT_BULLET_M_GPIO_LED_L3, + .gpio = UBNT_M_GPIO_LED_L3, .active_low = 0, }, { .name = "ubnt:green:link4", - .gpio = UBNT_BULLET_M_GPIO_LED_L4, + .gpio = UBNT_M_GPIO_LED_L4, .active_low = 0, } }; @@ -130,33 +105,32 @@ static struct gpio_button ubnt_gpio_buttons[] __initdata = { .desc = "sw4", .type = EV_KEY, .code = BTN_0, - .threshold = 5, + .threshold = 3, .gpio = UBNT_RS_GPIO_SW4, .active_low = 1, } }; -static struct gpio_button ubnt_bullet_m_gpio_buttons[] __initdata = { +static struct gpio_button ubnt_m_gpio_buttons[] __initdata = { { .desc = "reset", .type = EV_KEY, .code = BTN_0, - .threshold = 5, - .gpio = UBNT_BULLET_M_GPIO_BTN_RESET, + .threshold = 3, + .gpio = UBNT_M_GPIO_BTN_RESET, .active_low = 1, } }; static void __init ubnt_generic_setup(void) { - ar71xx_add_device_spi(NULL, ubnt_spi_info, - ARRAY_SIZE(ubnt_spi_info)); + ar71xx_add_device_m25p80(NULL); ar71xx_add_device_gpio_buttons(-1, UBNT_BUTTONS_POLL_INTERVAL, ARRAY_SIZE(ubnt_gpio_buttons), ubnt_gpio_buttons); - ar71xx_pci_init(ARRAY_SIZE(ubnt_pci_irqs), ubnt_pci_irqs); + pb42_pci_init(); } #define UBNT_RS_WAN_PHYMASK (1 << 20) @@ -189,7 +163,11 @@ static void __init ubnt_rs_setup(void) ubnt_rs_leds_gpio); } -MIPS_MACHINE(AR71XX_MACH_UBNT_RS, "Ubiquiti RouterStation", ubnt_rs_setup); +MIPS_MACHINE(AR71XX_MACH_UBNT_RS, "UBNT-RS", "Ubiquiti RouterStation", + ubnt_rs_setup); + +MIPS_MACHINE(AR71XX_MACH_UBNT_AR71XX, "Ubiquiti AR71xx-based board", + "Ubiquiti RouterStation", ubnt_rs_setup); static void __init ubnt_rspro_setup(void) { @@ -215,7 +193,7 @@ static void __init ubnt_rspro_setup(void) ubnt_rs_leds_gpio); } -MIPS_MACHINE(AR71XX_MACH_UBNT_RSPRO, "Ubiquiti RouterStation Pro", +MIPS_MACHINE(AR71XX_MACH_UBNT_RSPRO, "UBNT-RSPRO", "Ubiquiti RouterStation Pro", ubnt_rspro_setup); static void __init ubnt_lsx_setup(void) @@ -223,7 +201,7 @@ static void __init ubnt_lsx_setup(void) ubnt_generic_setup(); } -MIPS_MACHINE(AR71XX_MACH_UBNT_LSX, "Ubiquiti LSX", ubnt_lsx_setup); +MIPS_MACHINE(AR71XX_MACH_UBNT_LSX, "UBNT-LSX", "Ubiquiti LSX", ubnt_lsx_setup); #define UBNT_LSSR71_PHY_MASK (1 << 1) @@ -242,43 +220,67 @@ static void __init ubnt_lssr71_setup(void) ubnt_ls_sr71_leds_gpio); } -MIPS_MACHINE(AR71XX_MACH_UBNT_LSSR71, "Ubiquiti LS-SR71", ubnt_lssr71_setup); - -static struct ar71xx_pci_irq ubnt_bullet_m_pci_irqs[] __initdata = { - { - .slot = 0, - .pin = 1, - .irq = AR71XX_PCI_IRQ_DEV0, - } -}; +MIPS_MACHINE(AR71XX_MACH_UBNT_LSSR71, "UBNT-LS-SR71", "Ubiquiti LS-SR71", + ubnt_lssr71_setup); -static void __init ubnt_bullet_m_setup(void) +static void __init ubnt_m_setup(void) { u8 *mac = (u8 *) KSEG1ADDR(0x1fff0000); + u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000); ar71xx_set_mac_base(mac); - ar71xx_add_device_spi(NULL, ubnt_spi_info, - ARRAY_SIZE(ubnt_spi_info)); + + ar71xx_add_device_m25p80(NULL); ar71xx_add_device_mdio(~0); ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII; ar71xx_eth0_data.phy_mask = 0; - ar71xx_eth0_data.speed = SPEED_100; ar71xx_eth0_data.duplex = DUPLEX_FULL; + ar71xx_eth0_data.fifo_cfg1 = 0x0010ffff; + ar71xx_eth0_data.fifo_cfg2 = 0x015500aa; + ar71xx_eth0_data.fifo_cfg3 = 0x01f00140; ar71xx_add_device_eth(0); - ar71xx_add_device_leds_gpio(-1, ARRAY_SIZE(ubnt_bullet_m_leds_gpio), - ubnt_bullet_m_leds_gpio); + ap91_pci_init(ee, NULL); + + ar71xx_add_device_leds_gpio(-1, ARRAY_SIZE(ubnt_m_leds_gpio), + ubnt_m_leds_gpio); ar71xx_add_device_gpio_buttons(-1, UBNT_BUTTONS_POLL_INTERVAL, - ARRAY_SIZE(ubnt_bullet_m_gpio_buttons), - ubnt_bullet_m_gpio_buttons); + ARRAY_SIZE(ubnt_m_gpio_buttons), + ubnt_m_gpio_buttons); +} + +static void __init ubnt_rocket_m_setup(void) +{ + ubnt_m_setup(); + ar71xx_add_device_usb(); +} - ar71xx_pci_init(ARRAY_SIZE(ubnt_bullet_m_pci_irqs), - ubnt_bullet_m_pci_irqs); +MIPS_MACHINE(AR71XX_MACH_UBNT_BULLET_M, "UBNT-BM", "Ubiquiti Bullet M", + ubnt_m_setup); +MIPS_MACHINE(AR71XX_MACH_UBNT_ROCKET_M, "UBNT-RM", "Ubiquiti Rocket M", + ubnt_rocket_m_setup); + +/* TODO detect the second ethernet port and use one + init function for all Ubiquiti MIMO series products */ +static void __init ubnt_nano_m_setup(void) +{ + ubnt_m_setup(); + + ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII; + ar71xx_eth1_data.phy_mask = 0; + ar71xx_eth1_data.speed = SPEED_1000; + ar71xx_eth1_data.duplex = DUPLEX_FULL; + ar71xx_eth1_data.fifo_cfg1 = 0x0010ffff; + ar71xx_eth1_data.fifo_cfg2 = 0x015500aa; + ar71xx_eth1_data.fifo_cfg3 = 0x01f00140; + + ar71xx_add_device_eth(1); } -MIPS_MACHINE(AR71XX_MACH_UBNT_BULLET_M, "Ubiquiti Bullet M", ubnt_bullet_m_setup); +MIPS_MACHINE(AR71XX_MACH_UBNT_NANO_M, "UBNT-NM", "Ubiquiti Nanostation M", + ubnt_nano_m_setup);