1/* 2 * arch/arm/mach-kirkwood/mv88f6281gtw_ge-setup.c 3 * 4 * Marvell 88F6281 GTW GE Board Setup 5 * 6 * This file is licensed under the terms of the GNU General Public 7 * License version 2. This program is licensed "as is" without any 8 * warranty of any kind, whether express or implied. 9 */ 10 11#include <linux/kernel.h> 12#include <linux/init.h> 13#include <linux/platform_device.h> 14#include <linux/pci.h> 15#include <linux/irq.h> 16#include <linux/mtd/physmap.h> 17#include <linux/timer.h> 18#include <linux/mv643xx_eth.h> 19#include <linux/ethtool.h> 20#include <linux/gpio.h> 21#include <linux/leds.h> 22#include <linux/input.h> 23#include <linux/gpio_keys.h> 24#include <linux/spi/flash.h> 25#include <linux/spi/spi.h> 26#include <linux/spi/orion_spi.h> 27#include <net/dsa.h> 28#include <asm/mach-types.h> 29#include <asm/mach/arch.h> 30#include <asm/mach/pci.h> 31#include <mach/kirkwood.h> 32#include "common.h" 33#include "mpp.h" 34 35static struct mv643xx_eth_platform_data mv88f6281gtw_ge_ge00_data = { 36 .phy_addr = MV643XX_ETH_PHY_NONE, 37 .speed = SPEED_1000, 38 .duplex = DUPLEX_FULL, 39}; 40 41static struct dsa_chip_data mv88f6281gtw_ge_switch_chip_data = { 42 .port_names[0] = "lan1", 43 .port_names[1] = "lan2", 44 .port_names[2] = "lan3", 45 .port_names[3] = "lan4", 46 .port_names[4] = "wan", 47 .port_names[5] = "cpu", 48}; 49 50static struct dsa_platform_data mv88f6281gtw_ge_switch_plat_data = { 51 .nr_chips = 1, 52 .chip = &mv88f6281gtw_ge_switch_chip_data, 53}; 54 55static const struct flash_platform_data mv88f6281gtw_ge_spi_slave_data = { 56 .type = "mx25l12805d", 57}; 58 59static struct spi_board_info __initdata mv88f6281gtw_ge_spi_slave_info[] = { 60 { 61 .modalias = "m25p80", 62 .platform_data = &mv88f6281gtw_ge_spi_slave_data, 63 .irq = -1, 64 .max_speed_hz = 50000000, 65 .bus_num = 0, 66 .chip_select = 0, 67 }, 68}; 69 70static struct gpio_keys_button mv88f6281gtw_ge_button_pins[] = { 71 { 72 .code = KEY_RESTART, 73 .gpio = 47, 74 .desc = "SWR Button", 75 .active_low = 1, 76 }, { 77 .code = KEY_WPS_BUTTON, 78 .gpio = 46, 79 .desc = "WPS Button", 80 .active_low = 1, 81 }, 82}; 83 84static struct gpio_keys_platform_data mv88f6281gtw_ge_button_data = { 85 .buttons = mv88f6281gtw_ge_button_pins, 86 .nbuttons = ARRAY_SIZE(mv88f6281gtw_ge_button_pins), 87}; 88 89static struct platform_device mv88f6281gtw_ge_buttons = { 90 .name = "gpio-keys", 91 .id = -1, 92 .num_resources = 0, 93 .dev = { 94 .platform_data = &mv88f6281gtw_ge_button_data, 95 }, 96}; 97 98static struct gpio_led mv88f6281gtw_ge_led_pins[] = { 99 { 100 .name = "gtw:green:Status", 101 .gpio = 20, 102 .active_low = 0, 103 }, { 104 .name = "gtw:red:Status", 105 .gpio = 21, 106 .active_low = 0, 107 }, { 108 .name = "gtw:green:USB", 109 .gpio = 12, 110 .active_low = 0, 111 }, 112}; 113 114static struct gpio_led_platform_data mv88f6281gtw_ge_led_data = { 115 .leds = mv88f6281gtw_ge_led_pins, 116 .num_leds = ARRAY_SIZE(mv88f6281gtw_ge_led_pins), 117}; 118 119static struct platform_device mv88f6281gtw_ge_leds = { 120 .name = "leds-gpio", 121 .id = -1, 122 .dev = { 123 .platform_data = &mv88f6281gtw_ge_led_data, 124 }, 125}; 126 127static unsigned int mv88f6281gtw_ge_mpp_config[] __initdata = { 128 MPP12_GPO, /* Status#_USB pin */ 129 MPP20_GPIO, /* Status#_GLED pin */ 130 MPP21_GPIO, /* Status#_RLED pin */ 131 MPP46_GPIO, /* WPS_Switch pin */ 132 MPP47_GPIO, /* SW_Init pin */ 133 0 134}; 135 136static void __init mv88f6281gtw_ge_init(void) 137{ 138 /* 139 * Basic setup. Needs to be called early. 140 */ 141 kirkwood_init(); 142 kirkwood_mpp_conf(mv88f6281gtw_ge_mpp_config); 143 144 kirkwood_ehci_init(); 145 kirkwood_ge00_init(&mv88f6281gtw_ge_ge00_data); 146 kirkwood_ge00_switch_init(&mv88f6281gtw_ge_switch_plat_data, NO_IRQ); 147 spi_register_board_info(mv88f6281gtw_ge_spi_slave_info, 148 ARRAY_SIZE(mv88f6281gtw_ge_spi_slave_info)); 149 kirkwood_spi_init(); 150 kirkwood_uart0_init(); 151 platform_device_register(&mv88f6281gtw_ge_leds); 152 platform_device_register(&mv88f6281gtw_ge_buttons); 153} 154 155static int __init mv88f6281gtw_ge_pci_init(void) 156{ 157 if (machine_is_mv88f6281gtw_ge()) 158 kirkwood_pcie_init(KW_PCIE0); 159 160 return 0; 161} 162subsys_initcall(mv88f6281gtw_ge_pci_init); 163 164MACHINE_START(MV88F6281GTW_GE, "Marvell 88F6281 GTW GE Board") 165 /* Maintainer: Lennert Buytenhek <buytenh@marvell.com> */ 166 .phys_io = KIRKWOOD_REGS_PHYS_BASE, 167 .io_pg_offst = ((KIRKWOOD_REGS_VIRT_BASE) >> 18) & 0xfffc, 168 .boot_params = 0x00000100, 169 .init_machine = mv88f6281gtw_ge_init, 170 .map_io = kirkwood_map_io, 171 .init_irq = kirkwood_init_irq, 172 .timer = &kirkwood_timer, 173MACHINE_END 174