1/* 2 * MERCURY MAC1200R board support 3 * 4 * Copyright (C) 2012 Gabor Juhos <juhosg@openwrt.org> 5 * Copyright (C) 2013 Gui Iribarren <gui@altermundi.net> 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 <linux/pci.h> 13#include <linux/phy.h> 14#include <linux/gpio.h> 15#include <linux/platform_device.h> 16#include <linux/ath9k_platform.h> 17#include <linux/ar8216_platform.h> 18 19#include <asm/mach-ath79/ar71xx_regs.h> 20 21#include "common.h" 22#include "dev-ap9x-pci.h" 23#include "dev-eth.h" 24#include "dev-gpio-buttons.h" 25#include "dev-leds-gpio.h" 26#include "dev-m25p80.h" 27#include "dev-spi.h" 28#include "dev-wmac.h" 29#include "machtypes.h" 30 31#define MAC1200R_GPIO_LED_WLAN2G 13 32#define MAC1200R_GPIO_LED_WLAN5G 17 33#define MAC1200R_GPIO_LED_SYSTEM 14 34#define MAC1200R_GPIO_LED_WPS 11 35#define MAC1200R_GPIO_LED_WAN 12 36#define MAC1200R_GPIO_LED_LAN1 15 37#define MAC1200R_GPIO_LED_LAN2 21 38#define MAC1200R_GPIO_LED_LAN3 22 39#define MAC1200R_GPIO_LED_LAN4 20 40 41#define MAC1200R_GPIO_BTN_WPS 16 42 43#define MAC1200R_KEYS_POLL_INTERVAL 20 /* msecs */ 44#define MAC1200R_KEYS_DEBOUNCE_INTERVAL (3 * MAC1200R_KEYS_POLL_INTERVAL) 45 46#define MAC1200R_MAC0_OFFSET 0 47#define MAC1200R_MAC1_OFFSET 6 48#define MAC1200R_WMAC_CALDATA_OFFSET 0x1000 49#define MAC1200R_PCIE_CALDATA_OFFSET 0x5000 50 51static const char *mac1200r_part_probes[] = { 52 "tp-link", 53 NULL, 54}; 55 56static struct flash_platform_data mac1200r_flash_data = { 57 .part_probes = mac1200r_part_probes, 58}; 59 60static struct gpio_led mac1200r_leds_gpio[] __initdata = { 61 { 62 .name = "mercury:green:wps", 63 .gpio = MAC1200R_GPIO_LED_WPS, 64 .active_low = 1, 65 }, 66 { 67 .name = "mercury:green:system", 68 .gpio = MAC1200R_GPIO_LED_SYSTEM, 69 .active_low = 1, 70 }, 71 { 72 .name = "mercury:green:wlan2g", 73 .gpio = MAC1200R_GPIO_LED_WLAN2G, 74 .active_low = 1, 75 }, 76 { 77 .name = "mercury:green:wlan5g", 78 .gpio = MAC1200R_GPIO_LED_WLAN5G, 79 .active_low = 1, 80 }, 81}; 82 83static struct gpio_keys_button mac1200r_gpio_keys[] __initdata = { 84 { 85 .desc = "Reset button", 86 .type = EV_KEY, 87 .code = KEY_RESTART, 88 .debounce_interval = MAC1200R_KEYS_DEBOUNCE_INTERVAL, 89 .gpio = MAC1200R_GPIO_BTN_WPS, 90 .active_low = 1, 91 }, 92}; 93 94 95static void __init mac1200r_setup(void) 96{ 97 u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00); 98 u8 *art = (u8 *) KSEG1ADDR(0x1fff0000); 99 u8 tmpmac[ETH_ALEN]; 100 101 ath79_register_m25p80(&mac1200r_flash_data); 102 103 ath79_register_leds_gpio(-1, ARRAY_SIZE(mac1200r_leds_gpio), 104 mac1200r_leds_gpio); 105 106 ath79_register_gpio_keys_polled(-1, MAC1200R_KEYS_POLL_INTERVAL, 107 ARRAY_SIZE(mac1200r_gpio_keys), 108 mac1200r_gpio_keys); 109 110 ath79_init_mac(tmpmac, mac, 0); 111 ath79_wmac_disable_5ghz(); 112 ath79_register_wmac(art + MAC1200R_WMAC_CALDATA_OFFSET, tmpmac); 113 114 ath79_init_mac(tmpmac, mac, 1); 115 ap91_pci_init(art + MAC1200R_PCIE_CALDATA_OFFSET, tmpmac); 116 117 ath79_setup_ar934x_eth_cfg(AR934X_ETH_CFG_SW_ONLY_MODE); 118 119 ath79_register_mdio(1, 0x0); 120 121 /* LAN */ 122 ath79_init_mac(ath79_eth1_data.mac_addr, mac, -1); 123 124 /* GMAC1 is connected to the internal switch */ 125 ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII; 126 127 ath79_register_eth(1); 128 129 /* WAN */ 130 ath79_init_mac(ath79_eth0_data.mac_addr, mac, 2); 131 132 /* GMAC0 is connected to the PHY4 of the internal switch */ 133 ath79_switch_data.phy4_mii_en = 1; 134 ath79_switch_data.phy_poll_mask = BIT(4); 135 ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII; 136 ath79_eth0_data.phy_mask = BIT(4); 137 ath79_eth0_data.mii_bus_dev = &ath79_mdio1_device.dev; 138 139 ath79_register_eth(0); 140 141 ath79_gpio_output_select(MAC1200R_GPIO_LED_LAN1, 142 AR934X_GPIO_OUT_LED_LINK3); 143 ath79_gpio_output_select(MAC1200R_GPIO_LED_LAN2, 144 AR934X_GPIO_OUT_LED_LINK2); 145 ath79_gpio_output_select(MAC1200R_GPIO_LED_LAN3, 146 AR934X_GPIO_OUT_LED_LINK1); 147 ath79_gpio_output_select(MAC1200R_GPIO_LED_LAN4, 148 AR934X_GPIO_OUT_LED_LINK0); 149 ath79_gpio_output_select(MAC1200R_GPIO_LED_WAN, 150 AR934X_GPIO_OUT_LED_LINK4); 151} 152 153MIPS_MACHINE(ATH79_MACH_MC_MAC1200R, "MC-MAC1200R", 154 "MERCURY MAC1200R", 155 mac1200r_setup); 156