2008-07-18 00:25:10 +02:00
/*
* arch / arm / mach - orion5x / edmini_v2 - setup . c
*
* LaCie Ethernet Disk mini V2 Setup
*
* Copyright ( C ) 2008 Christopher Moore < moore @ free . fr >
* Copyright ( C ) 2008 Albert Aribaud < albert . aribaud @ free . fr >
*
* This file is licensed under the terms of the GNU General Public
* License version 2. This program is licensed " as is " without any
* warranty of any kind , whether express or implied .
*/
/*
* TODO : add Orion USB device port init when kernel . org support is added .
* TODO : add flash write support : see below .
* TODO : add power - off support .
* TODO : add I2C EEPROM support .
*/
# include <linux/kernel.h>
# include <linux/init.h>
# include <linux/platform_device.h>
# include <linux/pci.h>
# include <linux/irq.h>
2013-07-02 13:00:24 +02:00
# include <linux/mbus.h>
2008-07-18 00:25:10 +02:00
# include <linux/mtd/physmap.h>
2008-09-19 21:06:25 +02:00
# include <linux/leds.h>
# include <linux/gpio_keys.h>
# include <linux/input.h>
2008-07-18 00:25:10 +02:00
# include <linux/i2c.h>
# include <linux/ata_platform.h>
# include <linux/gpio.h>
# include <asm/mach-types.h>
# include <asm/mach/arch.h>
# include <asm/mach/pci.h>
# include <mach/orion5x.h>
# include "common.h"
# include "mpp.h"
/*****************************************************************************
* EDMINI_V2 Info
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* 512 KB NOR flash Device bus boot chip select
*/
# define EDMINI_V2_NOR_BOOT_BASE 0xfff80000
# define EDMINI_V2_NOR_BOOT_SIZE SZ_512K
/*****************************************************************************
* 512 KB NOR Flash on BOOT Device
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
* Currently the MTD code does not recognize the MX29LV400CBCT as a bottom
* - type device . This could cause risks of accidentally erasing critical
* flash sectors . We thus define a single , write - protected partition covering
* the whole flash .
* TODO : once the flash part TOP / BOTTOM detection issue is sorted out in the MTD
* code , break this into at least three partitions : ' u - boot code ' , ' u - boot
* environment ' and ' whatever is left ' .
*/
static struct mtd_partition edmini_v2_partitions [ ] = {
{
. name = " Full512kb " ,
. size = 0x00080000 ,
. offset = 0x00000000 ,
. mask_flags = MTD_WRITEABLE ,
} ,
} ;
static struct physmap_flash_data edmini_v2_nor_flash_data = {
. width = 1 ,
. parts = edmini_v2_partitions ,
. nr_parts = ARRAY_SIZE ( edmini_v2_partitions ) ,
} ;
static struct resource edmini_v2_nor_flash_resource = {
. flags = IORESOURCE_MEM ,
. start = EDMINI_V2_NOR_BOOT_BASE ,
. end = EDMINI_V2_NOR_BOOT_BASE
+ EDMINI_V2_NOR_BOOT_SIZE - 1 ,
} ;
static struct platform_device edmini_v2_nor_flash = {
. name = " physmap-flash " ,
. id = 0 ,
. dev = {
. platform_data = & edmini_v2_nor_flash_data ,
} ,
. num_resources = 1 ,
. resource = & edmini_v2_nor_flash_resource ,
} ;
/*****************************************************************************
* RTC 5 C372a on I2C bus
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# define EDMINIV2_RTC_GPIO 3
static struct i2c_board_info __initdata edmini_v2_i2c_rtc = {
I2C_BOARD_INFO ( " rs5c372a " , 0x32 ) ,
. irq = 0 ,
} ;
/*****************************************************************************
* General Setup
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2011-05-15 13:32:53 +02:00
static unsigned int edminiv2_mpp_modes [ ] __initdata = {
MPP0_UNUSED ,
MPP1_UNUSED ,
MPP2_UNUSED ,
MPP3_GPIO , /* RTC interrupt */
MPP4_UNUSED ,
MPP5_UNUSED ,
MPP6_UNUSED ,
MPP7_UNUSED ,
MPP8_UNUSED ,
MPP9_UNUSED ,
MPP10_UNUSED ,
MPP11_UNUSED ,
MPP12_SATA_LED , /* SATA 0 presence */
MPP13_SATA_LED , /* SATA 1 presence */
MPP14_SATA_LED , /* SATA 0 active */
MPP15_SATA_LED , /* SATA 1 active */
2008-07-18 00:25:10 +02:00
/* 16: Power LED control (0 = On, 1 = Off) */
2011-05-15 13:32:53 +02:00
MPP16_GPIO ,
2008-07-18 00:25:10 +02:00
/* 17: Power LED control select (0 = CPLD, 1 = GPIO16) */
2011-05-15 13:32:53 +02:00
MPP17_GPIO ,
2008-07-18 00:25:10 +02:00
/* 18: Power button status (0 = Released, 1 = Pressed) */
2011-05-15 13:32:53 +02:00
MPP18_GPIO ,
MPP19_UNUSED ,
0 ,
2008-07-18 00:25:10 +02:00
} ;
2012-11-16 16:39:46 +01:00
void __init edmini_v2_init ( void )
2008-07-18 00:25:10 +02:00
{
orion5x_mpp_conf ( edminiv2_mpp_modes ) ;
/*
* Configure peripherals .
*/
orion5x_ehci0_init ( ) ;
2013-07-26 10:17:42 -03:00
mvebu_mbus_add_window_by_id ( ORION_MBUS_DEVBUS_BOOT_TARGET ,
ORION_MBUS_DEVBUS_BOOT_ATTR ,
EDMINI_V2_NOR_BOOT_BASE ,
EDMINI_V2_NOR_BOOT_SIZE ) ;
2008-07-18 00:25:10 +02:00
platform_device_register ( & edmini_v2_nor_flash ) ;
pr_notice ( " edmini_v2: USB device port, flash write and power-off "
" are not yet supported. \n " ) ;
/* Get RTC IRQ and register the chip */
if ( gpio_request ( EDMINIV2_RTC_GPIO , " rtc " ) = = 0 ) {
if ( gpio_direction_input ( EDMINIV2_RTC_GPIO ) = = 0 )
edmini_v2_i2c_rtc . irq = gpio_to_irq ( EDMINIV2_RTC_GPIO ) ;
else
gpio_free ( EDMINIV2_RTC_GPIO ) ;
}
if ( edmini_v2_i2c_rtc . irq = = 0 )
pr_warning ( " edmini_v2: failed to get RTC IRQ \n " ) ;
i2c_register_board_info ( 0 , & edmini_v2_i2c_rtc , 1 ) ;
}