1/* 2 * Planex MZK-W300NH 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 21#define MZK_W300NH_GPIO_LED_STATUS 1 22#define MZK_W300NH_GPIO_LED_WPS 3 23#define MZK_W300NH_GPIO_LED_WLAN 6 24#define MZK_W300NH_GPIO_LED_AP_GREEN 15 25#define MZK_W300NH_GPIO_LED_AP_AMBER 16 26 27#define MZK_W300NH_GPIO_BTN_APROUTER 5 28#define MZK_W300NH_GPIO_BTN_WPS 12 29#define MZK_W300NH_GPIO_BTN_RESET 21 30 31#define MZK_W300NH_KEYS_POLL_INTERVAL 20 /* msecs */ 32#define MZK_W300NH_KEYS_DEBOUNCE_INTERVAL (3 * MZK_W300NH_KEYS_POLL_INTERVAL) 33 34static struct gpio_led mzk_w300nh_leds_gpio[] __initdata = { 35 { 36 .name = "planex:green:status", 37 .gpio = MZK_W300NH_GPIO_LED_STATUS, 38 .active_low = 1, 39 }, { 40 .name = "planex:blue:wps", 41 .gpio = MZK_W300NH_GPIO_LED_WPS, 42 .active_low = 1, 43 }, { 44 .name = "planex:green:wlan", 45 .gpio = MZK_W300NH_GPIO_LED_WLAN, 46 .active_low = 1, 47 }, { 48 .name = "planex:green:aprouter", 49 .gpio = MZK_W300NH_GPIO_LED_AP_GREEN, 50 }, { 51 .name = "planex:amber:aprouter", 52 .gpio = MZK_W300NH_GPIO_LED_AP_AMBER, 53 } 54}; 55 56static struct gpio_keys_button mzk_w300nh_gpio_keys[] __initdata = { 57 { 58 .desc = "reset", 59 .type = EV_KEY, 60 .code = KEY_RESTART, 61 .debounce_interval = MZK_W300NH_KEYS_DEBOUNCE_INTERVAL, 62 .gpio = MZK_W300NH_GPIO_BTN_RESET, 63 .active_low = 1, 64 }, { 65 .desc = "wps", 66 .type = EV_KEY, 67 .code = KEY_WPS_BUTTON, 68 .debounce_interval = MZK_W300NH_KEYS_DEBOUNCE_INTERVAL, 69 .gpio = MZK_W300NH_GPIO_BTN_WPS, 70 .active_low = 1, 71 }, { 72 .desc = "aprouter", 73 .type = EV_KEY, 74 .code = BTN_2, 75 .debounce_interval = MZK_W300NH_KEYS_DEBOUNCE_INTERVAL, 76 .gpio = MZK_W300NH_GPIO_BTN_APROUTER, 77 .active_low = 0, 78 } 79}; 80 81#define MZK_W300NH_WAN_PHYMASK BIT(4) 82#define MZK_W300NH_MDIO_MASK (~MZK_W300NH_WAN_PHYMASK) 83 84static void __init mzk_w300nh_setup(void) 85{ 86 u8 *eeprom = (u8 *) KSEG1ADDR(0x1fff1000); 87 88 ath79_register_mdio(0, MZK_W300NH_MDIO_MASK); 89 90 ath79_init_mac(ath79_eth0_data.mac_addr, eeprom, 0); 91 ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RMII; 92 ath79_eth0_data.speed = SPEED_100; 93 ath79_eth0_data.duplex = DUPLEX_FULL; 94 ath79_eth0_data.has_ar8216 = 1; 95 96 ath79_init_mac(ath79_eth1_data.mac_addr, eeprom, 1); 97 ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII; 98 ath79_eth1_data.phy_mask = MZK_W300NH_WAN_PHYMASK; 99 100 ath79_register_eth(0); 101 ath79_register_eth(1); 102 103 ath79_register_m25p80(NULL); 104 105 ath79_register_leds_gpio(-1, ARRAY_SIZE(mzk_w300nh_leds_gpio), 106 mzk_w300nh_leds_gpio); 107 108 ath79_register_gpio_keys_polled(-1, MZK_W300NH_KEYS_POLL_INTERVAL, 109 ARRAY_SIZE(mzk_w300nh_gpio_keys), 110 mzk_w300nh_gpio_keys); 111 ath79_register_wmac(eeprom, NULL); 112} 113 114MIPS_MACHINE(ATH79_MACH_MZK_W300NH, "MZK-W300NH", "Planex MZK-W300NH", 115 mzk_w300nh_setup); 116