Merge git://1984.lsi.us.es/nf-next
[cascardo/linux.git] / arch / arm / mach-kirkwood / board-goflexnet.c
1 /*
2  * Copyright 2012 (C), Jason Cooper <jason@lakedaemon.net>
3  *
4  * arch/arm/mach-kirkwood/board-goflexnet.c
5  *
6  * Seagate GoFlext Net Board Init for drivers not converted to
7  * flattened device tree yet.
8  *
9  * This file is licensed under the terms of the GNU General Public
10  * License version 2.  This program is licensed "as is" without any
11  * warranty of any kind, whether express or implied.
12  *
13  * Copied and modified for Seagate GoFlex Net support by
14  * Joshua Coombs <josh.coombs@gmail.com> based on ArchLinux ARM's
15  * GoFlex kernel patches.
16  *
17  */
18
19 #include <linux/kernel.h>
20 #include <linux/init.h>
21 #include <linux/platform_device.h>
22 #include <linux/ata_platform.h>
23 #include <linux/mv643xx_eth.h>
24 #include <linux/of.h>
25 #include <linux/of_address.h>
26 #include <linux/of_fdt.h>
27 #include <linux/of_irq.h>
28 #include <linux/of_platform.h>
29 #include <linux/gpio.h>
30 #include <asm/mach-types.h>
31 #include <asm/mach/arch.h>
32 #include <asm/mach/map.h>
33 #include <mach/kirkwood.h>
34 #include <mach/bridge-regs.h>
35 #include <plat/mvsdio.h>
36 #include "common.h"
37 #include "mpp.h"
38
39 static struct mv643xx_eth_platform_data goflexnet_ge00_data = {
40         .phy_addr       = MV643XX_ETH_PHY_ADDR(0),
41 };
42
43 static unsigned int goflexnet_mpp_config[] __initdata = {
44         MPP29_GPIO,     /* USB Power Enable */
45         MPP47_GPIO,     /* LED Orange */
46         MPP46_GPIO,     /* LED Green */
47         MPP45_GPIO,     /* LED Left Capacity 3 */
48         MPP44_GPIO,     /* LED Left Capacity 2 */
49         MPP43_GPIO,     /* LED Left Capacity 1 */
50         MPP42_GPIO,     /* LED Left Capacity 0 */
51         MPP41_GPIO,     /* LED Right Capacity 3 */
52         MPP40_GPIO,     /* LED Right Capacity 2 */
53         MPP39_GPIO,     /* LED Right Capacity 1 */
54         MPP38_GPIO,     /* LED Right Capacity 0 */
55         0
56 };
57
58 void __init goflexnet_init(void)
59 {
60         /*
61          * Basic setup. Needs to be called early.
62          */
63         kirkwood_mpp_conf(goflexnet_mpp_config);
64
65         if (gpio_request(29, "USB Power Enable") != 0 ||
66             gpio_direction_output(29, 1) != 0)
67                 pr_err("can't setup GPIO 29 (USB Power Enable)\n");
68         kirkwood_ehci_init();
69
70         kirkwood_ge00_init(&goflexnet_ge00_data);
71 }