1/* 2 * TP-LINK TL-WR720N board support 3 * 4 * Copyright (C) 2011 dongyuqi <729650915@qq.com> 5 * Copyright (C) 2011-2012 Gabor Juhos <juhosg@openwrt.org> 6 * Copyright (C) 2013 yousong <yszhou4tech@gmail.com> 7 * 8 * This program is free software; you can redistribute it and/or modify it 9 * under the terms of the GNU General Public License version 2 as published 10 * by the Free Software Foundation. 11 */ 12 13#include <linux/gpio.h> 14 15#include <asm/mach-ath79/ath79.h> 16 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 TL_WR720N_GPIO_LED_SYSTEM 27 26#define TL_WR720N_GPIO_BTN_RESET 11 27#define TL_WR720N_GPIO_BTN_SW1 18 28#define TL_WR720N_GPIO_BTN_SW2 20 29 30#define TL_WR720N_GPIO_USB_POWER 8 31 32#define TL_WR720N_KEYS_POLL_INTERVAL 20 /* msecs */ 33#define TL_WR720N_KEYS_DEBOUNCE_INTERVAL (3 * TL_WR720N_KEYS_POLL_INTERVAL) 34 35static const char *tl_wr720n_part_probes[] = { 36 "tp-link", 37 NULL, 38}; 39 40static struct flash_platform_data tl_wr720n_flash_data = { 41 .part_probes = tl_wr720n_part_probes, 42}; 43 44static struct gpio_led tl_wr720n_leds_gpio[] __initdata = { 45 { 46 .name = "tp-link:blue:system", 47 .gpio = TL_WR720N_GPIO_LED_SYSTEM, 48 .active_low = 1, 49 }, 50}; 51 52static struct gpio_keys_button tl_wr720n_gpio_keys[] __initdata = { 53 { 54 .desc = "reset", 55 .type = EV_KEY, 56 .code = KEY_RESTART, 57 .debounce_interval = TL_WR720N_KEYS_DEBOUNCE_INTERVAL, 58 .gpio = TL_WR720N_GPIO_BTN_RESET, 59 .active_low = 0, 60 }, { 61 .desc = "sw1", 62 .type = EV_KEY, 63 .code = BTN_0, 64 .debounce_interval = TL_WR720N_KEYS_DEBOUNCE_INTERVAL, 65 .gpio = TL_WR720N_GPIO_BTN_SW1, 66 .active_low = 0, 67 }, { 68 .desc = "sw2", 69 .type = EV_KEY, 70 .code = BTN_1, 71 .debounce_interval = TL_WR720N_KEYS_DEBOUNCE_INTERVAL, 72 .gpio = TL_WR720N_GPIO_BTN_SW2, 73 .active_low = 0, 74 } 75}; 76 77static void __init tl_wr720n_v3_setup(void) 78{ 79 u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00); 80 u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000); 81 82 /* disable PHY_SWAP and PHY_ADDR_SWAP bits */ 83 ath79_setup_ar933x_phy4_switch(false, false); 84 85 ath79_register_m25p80(&tl_wr720n_flash_data); 86 ath79_register_leds_gpio(-1, ARRAY_SIZE(tl_wr720n_leds_gpio), 87 tl_wr720n_leds_gpio); 88 ath79_register_gpio_keys_polled(-1, TL_WR720N_KEYS_POLL_INTERVAL, 89 ARRAY_SIZE(tl_wr720n_gpio_keys), 90 tl_wr720n_gpio_keys); 91 92 gpio_request_one(TL_WR720N_GPIO_USB_POWER, 93 GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED, 94 "USB power"); 95 ath79_register_usb(); 96 97 ath79_init_mac(ath79_eth0_data.mac_addr, mac, 1); 98 ath79_init_mac(ath79_eth1_data.mac_addr, mac, 2); 99 100 ath79_register_mdio(0, 0x0); 101 ath79_register_eth(0); 102 ath79_register_eth(1); 103 104 ath79_register_wmac(ee, mac); 105} 106 107MIPS_MACHINE(ATH79_MACH_TL_WR720N_V3, "TL-WR720N-v3", "TP-LINK TL-WR720N v3/v4", 108 tl_wr720n_v3_setup); 109