2 * arch/arm/mach-kirkwood/netspace_v2-setup.c
4 * LaCie Network Space v2 board setup
6 * Copyright (C) 2009 Simon Guinot <sguinot@lacie.com>
7 * Copyright (C) 2009 Benoît Canet <benoit.canet@gmail.com>
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 #include <linux/kernel.h>
25 #include <linux/init.h>
26 #include <linux/platform_device.h>
27 #include <linux/ata_platform.h>
28 #include <linux/mv643xx_eth.h>
29 #include <linux/input.h>
30 #include <linux/gpio.h>
31 #include <linux/gpio_keys.h>
32 #include <linux/leds.h>
33 #include <linux/gpio-fan.h>
34 #include <asm/mach-types.h>
35 #include <asm/mach/arch.h>
36 #include <mach/kirkwood.h>
37 #include <linux/platform_data/leds-kirkwood-ns2.h>
40 #include "lacie_v2-common.h"
42 /*****************************************************************************
44 ****************************************************************************/
46 static struct mv643xx_eth_platform_data netspace_v2_ge00_data
= {
47 .phy_addr
= MV643XX_ETH_PHY_ADDR(8),
50 /*****************************************************************************
52 ****************************************************************************/
54 static struct mv_sata_platform_data netspace_v2_sata_data
= {
58 /*****************************************************************************
60 ****************************************************************************/
62 #define NETSPACE_V2_PUSH_BUTTON 32
64 static struct gpio_keys_button netspace_v2_buttons
[] = {
67 .gpio
= NETSPACE_V2_PUSH_BUTTON
,
68 .desc
= "Power push button",
73 static struct gpio_keys_platform_data netspace_v2_button_data
= {
74 .buttons
= netspace_v2_buttons
,
75 .nbuttons
= ARRAY_SIZE(netspace_v2_buttons
),
78 static struct platform_device netspace_v2_gpio_buttons
= {
82 .platform_data
= &netspace_v2_button_data
,
86 /*****************************************************************************
88 ****************************************************************************/
90 #define NETSPACE_V2_GPIO_RED_LED 12
92 static struct gpio_led netspace_v2_gpio_led_pins
[] = {
94 .name
= "ns_v2:red:fail",
95 .gpio
= NETSPACE_V2_GPIO_RED_LED
,
99 static struct gpio_led_platform_data netspace_v2_gpio_leds_data
= {
100 .num_leds
= ARRAY_SIZE(netspace_v2_gpio_led_pins
),
101 .leds
= netspace_v2_gpio_led_pins
,
104 static struct platform_device netspace_v2_gpio_leds
= {
108 .platform_data
= &netspace_v2_gpio_leds_data
,
112 /*****************************************************************************
113 * Dual-GPIO CPLD LEDs
114 ****************************************************************************/
116 #define NETSPACE_V2_GPIO_BLUE_LED_SLOW 29
117 #define NETSPACE_V2_GPIO_BLUE_LED_CMD 30
119 static struct ns2_led netspace_v2_led_pins
[] = {
121 .name
= "ns_v2:blue:sata",
122 .cmd
= NETSPACE_V2_GPIO_BLUE_LED_CMD
,
123 .slow
= NETSPACE_V2_GPIO_BLUE_LED_SLOW
,
127 static struct ns2_led_platform_data netspace_v2_leds_data
= {
128 .num_leds
= ARRAY_SIZE(netspace_v2_led_pins
),
129 .leds
= netspace_v2_led_pins
,
132 static struct platform_device netspace_v2_leds
= {
136 .platform_data
= &netspace_v2_leds_data
,
140 /*****************************************************************************
142 ****************************************************************************/
144 /* Designed for fan 40x40x16: ADDA AD0412LB-D50 6000rpm@12v */
145 static struct gpio_fan_speed netspace_max_v2_fan_speed
[] = {
157 static unsigned netspace_max_v2_fan_ctrl
[] = { 22, 7, 33, 23 };
159 static struct gpio_fan_alarm netspace_max_v2_fan_alarm
= {
164 static struct gpio_fan_platform_data netspace_max_v2_fan_data
= {
165 .num_ctrl
= ARRAY_SIZE(netspace_max_v2_fan_ctrl
),
166 .ctrl
= netspace_max_v2_fan_ctrl
,
167 .alarm
= &netspace_max_v2_fan_alarm
,
168 .num_speed
= ARRAY_SIZE(netspace_max_v2_fan_speed
),
169 .speed
= netspace_max_v2_fan_speed
,
172 static struct platform_device netspace_max_v2_gpio_fan
= {
176 .platform_data
= &netspace_max_v2_fan_data
,
180 /*****************************************************************************
182 ****************************************************************************/
184 static unsigned int netspace_v2_mpp_config
[] __initdata
= {
192 MPP7_GPO
, /* Fan speed (bit 1) */
197 MPP12_GPO
, /* Red led */
198 MPP14_GPIO
, /* USB fuse */
199 MPP16_GPIO
, /* SATA 0 power */
200 MPP17_GPIO
, /* SATA 1 power */
205 MPP22_GPIO
, /* Fan speed (bit 0) */
206 MPP23_GPIO
, /* Fan power */
207 MPP24_GPIO
, /* USB mode select */
208 MPP25_GPIO
, /* Fan rotation fail */
209 MPP26_GPIO
, /* USB device vbus */
210 MPP28_GPIO
, /* USB enable host vbus */
211 MPP29_GPIO
, /* Blue led (slow register) */
212 MPP30_GPIO
, /* Blue led (command register) */
213 MPP31_GPIO
, /* Board power off */
214 MPP32_GPIO
, /* Power button (0 = Released, 1 = Pushed) */
215 MPP33_GPO
, /* Fan speed (bit 2) */
219 #define NETSPACE_V2_GPIO_POWER_OFF 31
221 static void netspace_v2_power_off(void)
223 gpio_set_value(NETSPACE_V2_GPIO_POWER_OFF
, 1);
226 static void __init
netspace_v2_init(void)
229 * Basic setup. Needs to be called early.
232 kirkwood_mpp_conf(netspace_v2_mpp_config
);
234 if (machine_is_netspace_max_v2())
235 lacie_v2_hdd_power_init(2);
237 lacie_v2_hdd_power_init(1);
239 kirkwood_ehci_init();
240 kirkwood_ge00_init(&netspace_v2_ge00_data
);
241 kirkwood_sata_init(&netspace_v2_sata_data
);
242 kirkwood_uart0_init();
243 lacie_v2_register_flash();
244 lacie_v2_register_i2c_devices();
246 platform_device_register(&netspace_v2_leds
);
247 platform_device_register(&netspace_v2_gpio_leds
);
248 platform_device_register(&netspace_v2_gpio_buttons
);
249 if (machine_is_netspace_max_v2())
250 platform_device_register(&netspace_max_v2_gpio_fan
);
252 if (gpio_request(NETSPACE_V2_GPIO_POWER_OFF
, "power-off") == 0 &&
253 gpio_direction_output(NETSPACE_V2_GPIO_POWER_OFF
, 0) == 0)
254 pm_power_off
= netspace_v2_power_off
;
256 pr_err("netspace_v2: failed to configure power-off GPIO\n");
259 #ifdef CONFIG_MACH_NETSPACE_V2
260 MACHINE_START(NETSPACE_V2
, "LaCie Network Space v2")
261 .atag_offset
= 0x100,
262 .init_machine
= netspace_v2_init
,
263 .map_io
= kirkwood_map_io
,
264 .init_early
= kirkwood_init_early
,
265 .init_irq
= kirkwood_init_irq
,
266 .init_time
= kirkwood_timer_init
,
267 .restart
= kirkwood_restart
,
271 #ifdef CONFIG_MACH_INETSPACE_V2
272 MACHINE_START(INETSPACE_V2
, "LaCie Internet Space v2")
273 .atag_offset
= 0x100,
274 .init_machine
= netspace_v2_init
,
275 .map_io
= kirkwood_map_io
,
276 .init_early
= kirkwood_init_early
,
277 .init_irq
= kirkwood_init_irq
,
278 .init_time
= kirkwood_timer_init
,
279 .restart
= kirkwood_restart
,
283 #ifdef CONFIG_MACH_NETSPACE_MAX_V2
284 MACHINE_START(NETSPACE_MAX_V2
, "LaCie Network Space Max v2")
285 .atag_offset
= 0x100,
286 .init_machine
= netspace_v2_init
,
287 .map_io
= kirkwood_map_io
,
288 .init_early
= kirkwood_init_early
,
289 .init_irq
= kirkwood_init_irq
,
290 .init_time
= kirkwood_timer_init
,
291 .restart
= kirkwood_restart
,