1/* 2 * TrendNET TEW-632BRP board support 3 * 4 * Copyright (C) 2008-2012 Gabor Juhos <juhosg@openwrt.org> 5 * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> 6 * 7 * This program is free software; you can redistribute it and/or modify it 8 * under the terms of the GNU General Public License version 2 as published 9 * by the Free Software Foundation. 10 */ 11 12#include <asm/mach-ath79/ath79.h> 13 14#include "dev-eth.h" 15#include "dev-gpio-buttons.h" 16#include "dev-leds-gpio.h" 17#include "dev-m25p80.h" 18#include "dev-wmac.h" 19#include "machtypes.h" 20#include "nvram.h" 21 22#define TEW_632BRP_GPIO_LED_STATUS 1 23#define TEW_632BRP_GPIO_LED_WPS 3 24#define TEW_632BRP_GPIO_LED_WLAN 6 25#define TEW_632BRP_GPIO_BTN_WPS 12 26#define TEW_632BRP_GPIO_BTN_RESET 21 27 28#define TEW_632BRP_KEYS_POLL_INTERVAL 20 /* msecs */ 29#define TEW_632BRP_KEYS_DEBOUNCE_INTERVAL (3 * TEW_632BRP_KEYS_POLL_INTERVAL) 30 31#define TEW_632BRP_CONFIG_ADDR 0x1f020000 32#define TEW_632BRP_CONFIG_SIZE 0x10000 33 34static struct gpio_led tew_632brp_leds_gpio[] __initdata = { 35 { 36 .name = "tew-632brp:green:status", 37 .gpio = TEW_632BRP_GPIO_LED_STATUS, 38 .active_low = 1, 39 }, { 40 .name = "tew-632brp:blue:wps", 41 .gpio = TEW_632BRP_GPIO_LED_WPS, 42 .active_low = 1, 43 }, { 44 .name = "tew-632brp:green:wlan", 45 .gpio = TEW_632BRP_GPIO_LED_WLAN, 46 .active_low = 1, 47 } 48}; 49 50static struct gpio_keys_button tew_632brp_gpio_keys[] __initdata = { 51 { 52 .desc = "reset", 53 .type = EV_KEY, 54 .code = KEY_RESTART, 55 .debounce_interval = TEW_632BRP_KEYS_DEBOUNCE_INTERVAL, 56 .gpio = TEW_632BRP_GPIO_BTN_RESET, 57 }, { 58 .desc = "wps", 59 .type = EV_KEY, 60 .code = KEY_WPS_BUTTON, 61 .debounce_interval = TEW_632BRP_KEYS_DEBOUNCE_INTERVAL, 62 .gpio = TEW_632BRP_GPIO_BTN_WPS, 63 } 64}; 65 66#define TEW_632BRP_LAN_PHYMASK BIT(0) 67#define TEW_632BRP_WAN_PHYMASK BIT(4) 68#define TEW_632BRP_MDIO_MASK (~(TEW_632BRP_LAN_PHYMASK | \ 69 TEW_632BRP_WAN_PHYMASK)) 70 71static void __init tew_632brp_setup(void) 72{ 73 const char *config = (char *) KSEG1ADDR(TEW_632BRP_CONFIG_ADDR); 74 u8 *eeprom = (u8 *) KSEG1ADDR(0x1fff1000); 75 u8 mac[6]; 76 u8 *wlan_mac = NULL; 77 78 if (ath79_nvram_parse_mac_addr(config, TEW_632BRP_CONFIG_SIZE, 79 "lan_mac=", mac) == 0) { 80 ath79_init_mac(ath79_eth0_data.mac_addr, mac, 0); 81 ath79_init_mac(ath79_eth1_data.mac_addr, mac, 1); 82 wlan_mac = mac; 83 } 84 85 ath79_register_mdio(0, TEW_632BRP_MDIO_MASK); 86 87 ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RMII; 88 ath79_eth0_data.phy_mask = TEW_632BRP_LAN_PHYMASK; 89 90 ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII; 91 ath79_eth1_data.phy_mask = TEW_632BRP_WAN_PHYMASK; 92 93 ath79_register_eth(0); 94 ath79_register_eth(1); 95 96 ath79_register_m25p80(NULL); 97 98 ath79_register_leds_gpio(-1, ARRAY_SIZE(tew_632brp_leds_gpio), 99 tew_632brp_leds_gpio); 100 101 ath79_register_gpio_keys_polled(-1, TEW_632BRP_KEYS_POLL_INTERVAL, 102 ARRAY_SIZE(tew_632brp_gpio_keys), 103 tew_632brp_gpio_keys); 104 105 ath79_register_wmac(eeprom, wlan_mac); 106} 107 108MIPS_MACHINE(ATH79_MACH_TEW_632BRP, "TEW-632BRP", "TRENDnet TEW-632BRP", 109 tew_632brp_setup); 110