mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-27 09:12:39 +00:00
b49dc036e8
Looks like trunk@37090 has changed the logic that determines if router's button was pressed. This resulted in TEW632BRP always booting into failsafe mode because it detected pressed button (which was not pressed). Measure with voltmeter has shown that buttons on this router are actually active-low. This patch reflects this fact in board configuration and fixes 'load info failsafe mode' issue. Note: it looks like Trendnet TEW632BRP and a close relative to TEW-652BRP V1.0 and D-Link DIR-615C1, so same problem may exist on those routers as well. This patch doesn't affect routers other than 632BRP and unfortunately I do not have hardware to test this issue with other routers. This patch fixes #13893 and is tested on actuall Trendnet TEW632BRP. Signed-off-by: Nikolay Martynov <mar.kolya@gmail.com> Signed-off-by: Gabor Juhos <juhosg@openwrt.org> SVN-Revision: 37569
112 lines
3.0 KiB
C
112 lines
3.0 KiB
C
/*
|
|
* TrendNET TEW-632BRP board support
|
|
*
|
|
* Copyright (C) 2008-2012 Gabor Juhos <juhosg@openwrt.org>
|
|
* Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License version 2 as published
|
|
* by the Free Software Foundation.
|
|
*/
|
|
|
|
#include <asm/mach-ath79/ath79.h>
|
|
|
|
#include "dev-eth.h"
|
|
#include "dev-gpio-buttons.h"
|
|
#include "dev-leds-gpio.h"
|
|
#include "dev-m25p80.h"
|
|
#include "dev-wmac.h"
|
|
#include "machtypes.h"
|
|
#include "nvram.h"
|
|
|
|
#define TEW_632BRP_GPIO_LED_STATUS 1
|
|
#define TEW_632BRP_GPIO_LED_WPS 3
|
|
#define TEW_632BRP_GPIO_LED_WLAN 6
|
|
#define TEW_632BRP_GPIO_BTN_WPS 12
|
|
#define TEW_632BRP_GPIO_BTN_RESET 21
|
|
|
|
#define TEW_632BRP_KEYS_POLL_INTERVAL 20 /* msecs */
|
|
#define TEW_632BRP_KEYS_DEBOUNCE_INTERVAL (3 * TEW_632BRP_KEYS_POLL_INTERVAL)
|
|
|
|
#define TEW_632BRP_CONFIG_ADDR 0x1f020000
|
|
#define TEW_632BRP_CONFIG_SIZE 0x10000
|
|
|
|
static struct gpio_led tew_632brp_leds_gpio[] __initdata = {
|
|
{
|
|
.name = "tew-632brp:green:status",
|
|
.gpio = TEW_632BRP_GPIO_LED_STATUS,
|
|
.active_low = 1,
|
|
}, {
|
|
.name = "tew-632brp:blue:wps",
|
|
.gpio = TEW_632BRP_GPIO_LED_WPS,
|
|
.active_low = 1,
|
|
}, {
|
|
.name = "tew-632brp:green:wlan",
|
|
.gpio = TEW_632BRP_GPIO_LED_WLAN,
|
|
.active_low = 1,
|
|
}
|
|
};
|
|
|
|
static struct gpio_keys_button tew_632brp_gpio_keys[] __initdata = {
|
|
{
|
|
.desc = "reset",
|
|
.type = EV_KEY,
|
|
.code = KEY_RESTART,
|
|
.debounce_interval = TEW_632BRP_KEYS_DEBOUNCE_INTERVAL,
|
|
.gpio = TEW_632BRP_GPIO_BTN_RESET,
|
|
.active_low = 1,
|
|
}, {
|
|
.desc = "wps",
|
|
.type = EV_KEY,
|
|
.code = KEY_WPS_BUTTON,
|
|
.debounce_interval = TEW_632BRP_KEYS_DEBOUNCE_INTERVAL,
|
|
.gpio = TEW_632BRP_GPIO_BTN_WPS,
|
|
.active_low = 1,
|
|
}
|
|
};
|
|
|
|
#define TEW_632BRP_LAN_PHYMASK BIT(0)
|
|
#define TEW_632BRP_WAN_PHYMASK BIT(4)
|
|
#define TEW_632BRP_MDIO_MASK (~(TEW_632BRP_LAN_PHYMASK | \
|
|
TEW_632BRP_WAN_PHYMASK))
|
|
|
|
static void __init tew_632brp_setup(void)
|
|
{
|
|
const char *config = (char *) KSEG1ADDR(TEW_632BRP_CONFIG_ADDR);
|
|
u8 *eeprom = (u8 *) KSEG1ADDR(0x1fff1000);
|
|
u8 mac[6];
|
|
u8 *wlan_mac = NULL;
|
|
|
|
if (ath79_nvram_parse_mac_addr(config, TEW_632BRP_CONFIG_SIZE,
|
|
"lan_mac=", mac) == 0) {
|
|
ath79_init_mac(ath79_eth0_data.mac_addr, mac, 0);
|
|
ath79_init_mac(ath79_eth1_data.mac_addr, mac, 1);
|
|
wlan_mac = mac;
|
|
}
|
|
|
|
ath79_register_mdio(0, TEW_632BRP_MDIO_MASK);
|
|
|
|
ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
|
|
ath79_eth0_data.phy_mask = TEW_632BRP_LAN_PHYMASK;
|
|
|
|
ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
|
|
ath79_eth1_data.phy_mask = TEW_632BRP_WAN_PHYMASK;
|
|
|
|
ath79_register_eth(0);
|
|
ath79_register_eth(1);
|
|
|
|
ath79_register_m25p80(NULL);
|
|
|
|
ath79_register_leds_gpio(-1, ARRAY_SIZE(tew_632brp_leds_gpio),
|
|
tew_632brp_leds_gpio);
|
|
|
|
ath79_register_gpio_keys_polled(-1, TEW_632BRP_KEYS_POLL_INTERVAL,
|
|
ARRAY_SIZE(tew_632brp_gpio_keys),
|
|
tew_632brp_gpio_keys);
|
|
|
|
ath79_register_wmac(eeprom, wlan_mac);
|
|
}
|
|
|
|
MIPS_MACHINE(ATH79_MACH_TEW_632BRP, "TEW-632BRP", "TRENDnet TEW-632BRP",
|
|
tew_632brp_setup);
|