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>
2007-05-20 11:55:53 +01:00
# include <linux/sysdev.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>
# include <mach/leds-gpio.h>
2006-04-01 18:33:42 +01:00
2008-10-30 10:14:35 +00:00
# include <plat/nand.h>
2006-04-02 10:00:09 +01:00
2008-10-07 23:09:51 +01:00
# include <plat/common-smdk.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 = {
. gpio = S3C2410_GPF4 ,
. flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE ,
. name = " led4 " ,
. def_trigger = " timer " ,
} ;
static struct s3c24xx_led_platdata smdk_pdata_led5 = {
. gpio = S3C2410_GPF5 ,
. flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE ,
. name = " led5 " ,
. def_trigger = " nand-disk " ,
} ;
static struct s3c24xx_led_platdata smdk_pdata_led6 = {
. gpio = S3C2410_GPF6 ,
. flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE ,
. name = " led6 " ,
} ;
static struct s3c24xx_led_platdata smdk_pdata_led7 = {
. gpio = S3C2410_GPF7 ,
. 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 ,
. size = SZ_16M ,
}
} ;
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
} ;
2006-04-01 18:33:42 +01:00
void __init smdk_machine_init ( void )
{
/* Configure the LEDs (even if we have no LED support)*/
s3c2410_gpio_cfgpin ( S3C2410_GPF4 , S3C2410_GPF4_OUTP ) ;
s3c2410_gpio_cfgpin ( S3C2410_GPF5 , S3C2410_GPF5_OUTP ) ;
s3c2410_gpio_cfgpin ( S3C2410_GPF6 , S3C2410_GPF6_OUTP ) ;
s3c2410_gpio_cfgpin ( S3C2410_GPF7 , S3C2410_GPF7_OUTP ) ;
2006-04-02 10:00:08 +01:00
s3c2410_gpio_setpin ( S3C2410_GPF4 , 1 ) ;
s3c2410_gpio_setpin ( S3C2410_GPF5 , 1 ) ;
s3c2410_gpio_setpin ( S3C2410_GPF6 , 1 ) ;
s3c2410_gpio_setpin ( S3C2410_GPF7 , 1 ) ;
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 ;
2006-04-02 10:00:09 +01:00
s3c_device_nand . dev . platform_data = & smdk_nand_info ;
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
}