2007-02-11 18:31:01 +01:00
/* linux/arch/arm/plat-s3c24xx/common-smdk.c
2006-04-01 18:33:42 +01:00
*
* Copyright ( c ) 2006 Simtec Electronics
* Ben Dooks < ben @ simtec . co . uk >
*
* Common code for SMDK2410 and SMDK2440 boards
*
* http : //www.fluff.org/ben/smdk2440/
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*/
# include <linux/kernel.h>
# include <linux/types.h>
# include <linux/interrupt.h>
# include <linux/list.h>
# include <linux/timer.h>
# include <linux/init.h>
2009-05-13 22:52:24 +01:00
# include <linux/gpio.h>
2011-12-21 16:26:03 -08:00
# include <linux/device.h>
2006-04-01 18:33:42 +01:00
# include <linux/platform_device.h>
2006-04-02 10:00:09 +01:00
# include <linux/mtd/mtd.h>
# include <linux/mtd/nand.h>
# include <linux/mtd/nand_ecc.h>
# include <linux/mtd/partitions.h>
2008-09-06 12:10:45 +01:00
# include <linux/io.h>
2006-04-02 10:00:09 +01:00
2006-04-01 18:33:42 +01:00
# include <asm/mach/arch.h>
# include <asm/mach/map.h>
# include <asm/mach/irq.h>
2007-05-20 19:58:10 +01:00
# include <asm/mach-types.h>
2008-08-05 16:14:15 +01:00
# include <mach/hardware.h>
2006-04-01 18:33:42 +01:00
# include <asm/irq.h>
2008-08-05 16:14:15 +01:00
# include <mach/regs-gpio.h>
2012-08-24 15:22:12 +02:00
# include <linux/platform_data/leds-s3c24xx.h>
2006-04-01 18:33:42 +01:00
2012-08-24 15:22:12 +02:00
# include <linux/platform_data/mtd-nand-s3c2410.h>
2006-04-02 10:00:09 +01:00
2008-10-07 23:09:51 +01:00
# include <plat/common-smdk.h>
2010-05-04 14:38:49 +09:00
# include <plat/gpio-cfg.h>
2008-10-07 22:26:09 +01:00
# include <plat/devs.h>
# include <plat/pm.h>
2006-04-01 18:33:42 +01:00
2006-06-18 22:56:37 +01:00
/* LED devices */
static struct s3c24xx_led_platdata smdk_pdata_led4 = {
2009-05-17 22:32:23 +01:00
. gpio = S3C2410_GPF ( 4 ) ,
2006-06-18 22:56:37 +01:00
. flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE ,
. name = " led4 " ,
. def_trigger = " timer " ,
} ;
static struct s3c24xx_led_platdata smdk_pdata_led5 = {
2009-05-17 22:32:23 +01:00
. gpio = S3C2410_GPF ( 5 ) ,
2006-06-18 22:56:37 +01:00
. flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE ,
. name = " led5 " ,
. def_trigger = " nand-disk " ,
} ;
static struct s3c24xx_led_platdata smdk_pdata_led6 = {
2009-05-17 22:32:23 +01:00
. gpio = S3C2410_GPF ( 6 ) ,
2006-06-18 22:56:37 +01:00
. flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE ,
. name = " led6 " ,
} ;
static struct s3c24xx_led_platdata smdk_pdata_led7 = {
2009-05-17 22:32:23 +01:00
. gpio = S3C2410_GPF ( 7 ) ,
2006-06-18 22:56:37 +01:00
. flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE ,
. name = " led7 " ,
} ;
static struct platform_device smdk_led4 = {
. name = " s3c24xx_led " ,
. id = 0 ,
. dev = {
. platform_data = & smdk_pdata_led4 ,
} ,
} ;
static struct platform_device smdk_led5 = {
. name = " s3c24xx_led " ,
. id = 1 ,
. dev = {
. platform_data = & smdk_pdata_led5 ,
} ,
} ;
static struct platform_device smdk_led6 = {
. name = " s3c24xx_led " ,
. id = 2 ,
. dev = {
. platform_data = & smdk_pdata_led6 ,
} ,
} ;
static struct platform_device smdk_led7 = {
. name = " s3c24xx_led " ,
. id = 3 ,
. dev = {
. platform_data = & smdk_pdata_led7 ,
} ,
} ;
2006-04-02 10:00:09 +01:00
/* NAND parititon from 2.4.18-swl5 */
static struct mtd_partition smdk_default_nand_part [ ] = {
[ 0 ] = {
. name = " Boot Agent " ,
. size = SZ_16K ,
. offset = 0 ,
} ,
[ 1 ] = {
2006-04-13 09:57:15 +01:00
. name = " S3C2410 flash partition 1 " ,
2006-04-02 10:00:09 +01:00
. offset = 0 ,
. size = SZ_2M ,
} ,
[ 2 ] = {
. name = " S3C2410 flash partition 2 " ,
. offset = SZ_4M ,
. size = SZ_4M ,
} ,
[ 3 ] = {
. name = " S3C2410 flash partition 3 " ,
. offset = SZ_8M ,
. size = SZ_2M ,
} ,
[ 4 ] = {
. name = " S3C2410 flash partition 4 " ,
. offset = SZ_1M * 10 ,
. size = SZ_4M ,
} ,
[ 5 ] = {
. name = " S3C2410 flash partition 5 " ,
. offset = SZ_1M * 14 ,
. size = SZ_1M * 10 ,
} ,
[ 6 ] = {
. name = " S3C2410 flash partition 6 " ,
. offset = SZ_1M * 24 ,
. size = SZ_1M * 24 ,
} ,
[ 7 ] = {
. name = " S3C2410 flash partition 7 " ,
. offset = SZ_1M * 48 ,
2010-10-18 19:53:34 +09:00
. size = MTDPART_SIZ_FULL ,
2006-04-02 10:00:09 +01:00
}
} ;
static struct s3c2410_nand_set smdk_nand_sets [ ] = {
[ 0 ] = {
. name = " NAND " ,
. nr_chips = 1 ,
. nr_partitions = ARRAY_SIZE ( smdk_default_nand_part ) ,
. partitions = smdk_default_nand_part ,
} ,
} ;
/* choose a set of timings which should suit most 512Mbit
* chips and beyond .
*/
static struct s3c2410_platform_nand smdk_nand_info = {
. tacls = 20 ,
. twrph0 = 60 ,
. twrph1 = 20 ,
. nr_sets = ARRAY_SIZE ( smdk_nand_sets ) ,
. sets = smdk_nand_sets ,
} ;
/* devices we initialise */
static struct platform_device __initdata * smdk_devs [ ] = {
& s3c_device_nand ,
2006-06-18 22:56:37 +01:00
& smdk_led4 ,
& smdk_led5 ,
& smdk_led6 ,
& smdk_led7 ,
2006-04-02 10:00:09 +01:00
} ;
2012-07-13 18:04:25 +09:00
static const struct gpio smdk_led_gpios [ ] = {
{ S3C2410_GPF ( 4 ) , GPIOF_OUT_INIT_HIGH , NULL } ,
{ S3C2410_GPF ( 5 ) , GPIOF_OUT_INIT_HIGH , NULL } ,
{ S3C2410_GPF ( 6 ) , GPIOF_OUT_INIT_HIGH , NULL } ,
{ S3C2410_GPF ( 7 ) , GPIOF_OUT_INIT_HIGH , NULL } ,
} ;
2006-04-01 18:33:42 +01:00
void __init smdk_machine_init ( void )
{
/* Configure the LEDs (even if we have no LED support)*/
2012-07-13 18:04:25 +09:00
int ret = gpio_request_array ( smdk_led_gpios ,
ARRAY_SIZE ( smdk_led_gpios ) ) ;
if ( ! WARN_ON ( ret < 0 ) )
gpio_free_array ( smdk_led_gpios , ARRAY_SIZE ( smdk_led_gpios ) ) ;
2006-04-01 18:33:42 +01:00
2007-05-20 19:58:10 +01:00
if ( machine_is_smdk2443 ( ) )
smdk_nand_info . twrph0 = 50 ;
2009-09-28 13:59:49 +03:00
s3c_nand_set_platdata ( & smdk_nand_info ) ;
2006-04-02 10:00:09 +01:00
platform_add_devices ( smdk_devs , ARRAY_SIZE ( smdk_devs ) ) ;
2008-12-12 00:24:18 +00:00
s3c_pm_init ( ) ;
2006-04-01 18:33:42 +01:00
}