2010-09-19 15:33:58 +02:00
/*
* arch / arm / mach - kirkwood / d2net_v2 - setup . c
*
* LaCie d2 Network Space v2 Board Setup
*
* Copyright ( C ) 2010 Simon Guinot < sguinot @ lacie . com >
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
*/
# include <linux/kernel.h>
# include <linux/init.h>
# include <linux/platform_device.h>
# include <linux/ata_platform.h>
# include <linux/mv643xx_eth.h>
# include <linux/input.h>
# include <linux/gpio.h>
# include <linux/gpio_keys.h>
# include <linux/leds.h>
# include <asm/mach-types.h>
# include <asm/mach/arch.h>
# include <mach/kirkwood.h>
2012-08-24 15:21:54 +02:00
# include <linux/platform_data/leds-kirkwood-ns2.h>
2010-09-19 15:33:58 +02:00
# include "common.h"
# include "mpp.h"
2010-09-19 15:33:59 +02:00
# include "lacie_v2-common.h"
2010-09-19 15:33:58 +02:00
/*****************************************************************************
* Ethernet
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static struct mv643xx_eth_platform_data d2net_v2_ge00_data = {
. phy_addr = MV643XX_ETH_PHY_ADDR ( 8 ) ,
} ;
/*****************************************************************************
* SATA
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static struct mv_sata_platform_data d2net_v2_sata_data = {
. n_ports = 2 ,
} ;
/*****************************************************************************
* GPIO keys
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# define D2NET_V2_GPIO_PUSH_BUTTON 34
# define D2NET_V2_GPIO_POWER_SWITCH_ON 13
# define D2NET_V2_GPIO_POWER_SWITCH_OFF 15
# define D2NET_V2_SWITCH_POWER_ON 0x1
# define D2NET_V2_SWITCH_POWER_OFF 0x2
static struct gpio_keys_button d2net_v2_buttons [ ] = {
[ 0 ] = {
. type = EV_SW ,
. code = D2NET_V2_SWITCH_POWER_ON ,
. gpio = D2NET_V2_GPIO_POWER_SWITCH_ON ,
. desc = " Back power switch (on|auto) " ,
. active_low = 0 ,
} ,
[ 1 ] = {
. type = EV_SW ,
. code = D2NET_V2_SWITCH_POWER_OFF ,
. gpio = D2NET_V2_GPIO_POWER_SWITCH_OFF ,
. desc = " Back power switch (auto|off) " ,
. active_low = 0 ,
} ,
[ 2 ] = {
. code = KEY_POWER ,
. gpio = D2NET_V2_GPIO_PUSH_BUTTON ,
. desc = " Front Push Button " ,
. active_low = 1 ,
} ,
} ;
static struct gpio_keys_platform_data d2net_v2_button_data = {
. buttons = d2net_v2_buttons ,
. nbuttons = ARRAY_SIZE ( d2net_v2_buttons ) ,
} ;
static struct platform_device d2net_v2_gpio_buttons = {
. name = " gpio-keys " ,
. id = - 1 ,
. dev = {
. platform_data = & d2net_v2_button_data ,
} ,
} ;
/*****************************************************************************
* GPIO LEDs
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# define D2NET_V2_GPIO_RED_LED 12
static struct gpio_led d2net_v2_gpio_led_pins [ ] = {
{
. name = " d2net_v2:red:fail " ,
. gpio = D2NET_V2_GPIO_RED_LED ,
} ,
} ;
static struct gpio_led_platform_data d2net_v2_gpio_leds_data = {
. num_leds = ARRAY_SIZE ( d2net_v2_gpio_led_pins ) ,
. leds = d2net_v2_gpio_led_pins ,
} ;
static struct platform_device d2net_v2_gpio_leds = {
. name = " leds-gpio " ,
. id = - 1 ,
. dev = {
. platform_data = & d2net_v2_gpio_leds_data ,
} ,
} ;
/*****************************************************************************
* Dual - GPIO CPLD LEDs
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# define D2NET_V2_GPIO_BLUE_LED_SLOW 29
# define D2NET_V2_GPIO_BLUE_LED_CMD 30
static struct ns2_led d2net_v2_led_pins [ ] = {
{
. name = " d2net_v2:blue:sata " ,
. cmd = D2NET_V2_GPIO_BLUE_LED_CMD ,
. slow = D2NET_V2_GPIO_BLUE_LED_SLOW ,
} ,
} ;
static struct ns2_led_platform_data d2net_v2_leds_data = {
. num_leds = ARRAY_SIZE ( d2net_v2_led_pins ) ,
. leds = d2net_v2_led_pins ,
} ;
static struct platform_device d2net_v2_leds = {
. name = " leds-ns2 " ,
. id = - 1 ,
. dev = {
. platform_data = & d2net_v2_leds_data ,
} ,
} ;
/*****************************************************************************
* General Setup
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static unsigned int d2net_v2_mpp_config [ ] __initdata = {
MPP0_SPI_SCn ,
MPP1_SPI_MOSI ,
MPP2_SPI_SCK ,
MPP3_SPI_MISO ,
MPP6_SYSRST_OUTn ,
MPP7_GPO , /* Request power-off */
MPP8_TW0_SDA ,
MPP9_TW0_SCK ,
MPP10_UART0_TXD ,
MPP11_UART0_RXD ,
MPP12_GPO , /* Red led */
MPP13_GPIO , /* Rear power switch (on|auto) */
MPP14_GPIO , /* USB fuse */
MPP15_GPIO , /* Rear power switch (auto|off) */
MPP16_GPIO , /* SATA 0 power */
MPP21_SATA0_ACTn ,
MPP24_GPIO , /* USB mode select */
MPP26_GPIO , /* USB device vbus */
MPP28_GPIO , /* USB enable host vbus */
MPP29_GPIO , /* Blue led (slow register) */
MPP30_GPIO , /* Blue led (command register) */
MPP34_GPIO , /* Power button (1 = Released, 0 = Pushed) */
MPP35_GPIO , /* Inhibit power-off */
0
} ;
# define D2NET_V2_GPIO_POWER_OFF 7
static void d2net_v2_power_off ( void )
{
gpio_set_value ( D2NET_V2_GPIO_POWER_OFF , 1 ) ;
}
static void __init d2net_v2_init ( void )
{
/*
* Basic setup . Needs to be called early .
*/
kirkwood_init ( ) ;
kirkwood_mpp_conf ( d2net_v2_mpp_config ) ;
2010-09-19 15:33:59 +02:00
lacie_v2_hdd_power_init ( 1 ) ;
2010-09-19 15:33:58 +02:00
kirkwood_ehci_init ( ) ;
kirkwood_ge00_init ( & d2net_v2_ge00_data ) ;
kirkwood_sata_init ( & d2net_v2_sata_data ) ;
kirkwood_uart0_init ( ) ;
2010-09-19 15:33:59 +02:00
lacie_v2_register_flash ( ) ;
lacie_v2_register_i2c_devices ( ) ;
2010-09-19 15:33:58 +02:00
platform_device_register ( & d2net_v2_leds ) ;
platform_device_register ( & d2net_v2_gpio_leds ) ;
platform_device_register ( & d2net_v2_gpio_buttons ) ;
if ( gpio_request ( D2NET_V2_GPIO_POWER_OFF , " power-off " ) = = 0 & &
gpio_direction_output ( D2NET_V2_GPIO_POWER_OFF , 0 ) = = 0 )
pm_power_off = d2net_v2_power_off ;
else
pr_err ( " d2net_v2: failed to configure power-off GPIO \n " ) ;
}
MACHINE_START ( D2NET_V2 , " LaCie d2 Network v2 " )
2011-07-05 22:38:13 -04:00
. atag_offset = 0x100 ,
2010-09-19 15:33:58 +02:00
. init_machine = d2net_v2_init ,
. map_io = kirkwood_map_io ,
2010-10-15 16:50:26 +02:00
. init_early = kirkwood_init_early ,
2010-09-19 15:33:58 +02:00
. init_irq = kirkwood_init_irq ,
2012-11-08 12:40:59 -07:00
. init_time = kirkwood_timer_init ,
2011-11-05 10:03:47 +00:00
. restart = kirkwood_restart ,
2010-09-19 15:33:58 +02:00
MACHINE_END