1/* 2 * ALFA NETWORKS Hornet-UB board support 3 * 4 * Copyright (C) 2011-2012 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/gpio.h> 12 13#include <asm/mach-ath79/ath79.h> 14#include <asm/mach-ath79/ar71xx_regs.h> 15 16#include "common.h" 17#include "dev-eth.h" 18#include "dev-gpio-buttons.h" 19#include "dev-leds-gpio.h" 20#include "dev-m25p80.h" 21#include "dev-usb.h" 22#include "dev-wmac.h" 23#include "machtypes.h" 24 25#define HORNET_UB_GPIO_LED_WLAN 0 26#define HORNET_UB_GPIO_LED_USB 1 27#define HORNET_UB_GPIO_LED_LAN 13 28#define HORNET_UB_GPIO_LED_WAN 17 29#define HORNET_UB_GPIO_LED_WPS 27 30 31#define HORNET_UB_GPIO_BTN_RESET 11 32#define HORNET_UB_GPIO_BTN_WPS 12 33 34#define HORNET_UB_GPIO_USB_POWER 26 35 36#define HORNET_UB_KEYS_POLL_INTERVAL 20 /* msecs */ 37#define HORNET_UB_KEYS_DEBOUNCE_INTERVAL (3 * HORNET_UB_KEYS_POLL_INTERVAL) 38 39#define HORNET_UB_MAC0_OFFSET 0x0000 40#define HORNET_UB_MAC1_OFFSET 0x0006 41#define HORNET_UB_CALDATA_OFFSET 0x1000 42 43static struct gpio_led hornet_ub_leds_gpio[] __initdata = { 44 { 45 .name = "alfa:blue:lan", 46 .gpio = HORNET_UB_GPIO_LED_LAN, 47 .active_low = 0, 48 }, 49 { 50 .name = "alfa:blue:usb", 51 .gpio = HORNET_UB_GPIO_LED_USB, 52 .active_low = 0, 53 }, 54 { 55 .name = "alfa:blue:wan", 56 .gpio = HORNET_UB_GPIO_LED_WAN, 57 .active_low = 1, 58 }, 59 { 60 .name = "alfa:blue:wlan", 61 .gpio = HORNET_UB_GPIO_LED_WLAN, 62 .active_low = 0, 63 }, 64 { 65 .name = "alfa:blue:wps", 66 .gpio = HORNET_UB_GPIO_LED_WPS, 67 .active_low = 1, 68 }, 69}; 70 71static struct gpio_keys_button hornet_ub_gpio_keys[] __initdata = { 72 { 73 .desc = "WPS button", 74 .type = EV_KEY, 75 .code = KEY_WPS_BUTTON, 76 .debounce_interval = HORNET_UB_KEYS_DEBOUNCE_INTERVAL, 77 .gpio = HORNET_UB_GPIO_BTN_WPS, 78 .active_low = 1, 79 }, 80 { 81 .desc = "Reset button", 82 .type = EV_KEY, 83 .code = KEY_RESTART, 84 .debounce_interval = HORNET_UB_KEYS_DEBOUNCE_INTERVAL, 85 .gpio = HORNET_UB_GPIO_BTN_RESET, 86 .active_low = 0, 87 } 88}; 89 90static void __init hornet_ub_gpio_setup(void) 91{ 92 u32 t; 93 94 ath79_gpio_function_disable(AR933X_GPIO_FUNC_ETH_SWITCH_LED0_EN | 95 AR933X_GPIO_FUNC_ETH_SWITCH_LED1_EN | 96 AR933X_GPIO_FUNC_ETH_SWITCH_LED2_EN | 97 AR933X_GPIO_FUNC_ETH_SWITCH_LED3_EN | 98 AR933X_GPIO_FUNC_ETH_SWITCH_LED4_EN); 99 100 t = ath79_reset_rr(AR933X_RESET_REG_BOOTSTRAP); 101 t |= AR933X_BOOTSTRAP_MDIO_GPIO_EN; 102 ath79_reset_wr(AR933X_RESET_REG_BOOTSTRAP, t); 103 104 gpio_request_one(HORNET_UB_GPIO_USB_POWER, 105 GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED, 106 "USB power"); 107} 108 109static void __init hornet_ub_setup(void) 110{ 111 u8 *art = (u8 *) KSEG1ADDR(0x1fff0000); 112 113 hornet_ub_gpio_setup(); 114 115 ath79_register_m25p80(NULL); 116 ath79_register_leds_gpio(-1, ARRAY_SIZE(hornet_ub_leds_gpio), 117 hornet_ub_leds_gpio); 118 ath79_register_gpio_keys_polled(-1, HORNET_UB_KEYS_POLL_INTERVAL, 119 ARRAY_SIZE(hornet_ub_gpio_keys), 120 hornet_ub_gpio_keys); 121 122 ath79_init_mac(ath79_eth1_data.mac_addr, 123 art + HORNET_UB_MAC0_OFFSET, 0); 124 ath79_init_mac(ath79_eth0_data.mac_addr, 125 art + HORNET_UB_MAC1_OFFSET, 0); 126 127 ath79_register_mdio(0, 0x0); 128 129 ath79_register_eth(1); 130 ath79_register_eth(0); 131 132 ath79_register_wmac(art + HORNET_UB_CALDATA_OFFSET, NULL); 133 ath79_register_usb(); 134} 135 136MIPS_MACHINE(ATH79_MACH_HORNET_UB, "HORNET-UB", "ALFA NETWORKS Hornet-UB", 137 hornet_ub_setup); 138