1 // SPDX-License-Identifier: GPL-2.0
3 // Copyright (c) 2006 Simtec Electronics
4 // Ben Dooks <ben@simtec.co.uk>
6 // Common code for SMDK2410 and SMDK2440 boards
8 // http://www.fluff.org/ben/smdk2440/
10 #include <linux/kernel.h>
11 #include <linux/types.h>
12 #include <linux/interrupt.h>
13 #include <linux/list.h>
14 #include <linux/timer.h>
15 #include <linux/init.h>
16 #include <linux/gpio.h>
17 #include <linux/device.h>
18 #include <linux/platform_device.h>
20 #include <linux/mtd/mtd.h>
21 #include <linux/mtd/rawnand.h>
22 #include <linux/mtd/nand_ecc.h>
23 #include <linux/mtd/partitions.h>
26 #include <asm/mach/arch.h>
27 #include <asm/mach/map.h>
28 #include <asm/mach/irq.h>
30 #include <asm/mach-types.h>
31 #include <mach/hardware.h>
34 #include <mach/regs-gpio.h>
35 #include <mach/gpio-samsung.h>
36 #include <linux/platform_data/leds-s3c24xx.h>
37 #include <linux/platform_data/mtd-nand-s3c2410.h>
39 #include <plat/gpio-cfg.h>
40 #include <plat/devs.h>
43 #include "common-smdk.h"
47 static struct s3c24xx_led_platdata smdk_pdata_led4
= {
48 .gpio
= S3C2410_GPF(4),
49 .flags
= S3C24XX_LEDF_ACTLOW
| S3C24XX_LEDF_TRISTATE
,
51 .def_trigger
= "timer",
54 static struct s3c24xx_led_platdata smdk_pdata_led5
= {
55 .gpio
= S3C2410_GPF(5),
56 .flags
= S3C24XX_LEDF_ACTLOW
| S3C24XX_LEDF_TRISTATE
,
58 .def_trigger
= "nand-disk",
61 static struct s3c24xx_led_platdata smdk_pdata_led6
= {
62 .gpio
= S3C2410_GPF(6),
63 .flags
= S3C24XX_LEDF_ACTLOW
| S3C24XX_LEDF_TRISTATE
,
67 static struct s3c24xx_led_platdata smdk_pdata_led7
= {
68 .gpio
= S3C2410_GPF(7),
69 .flags
= S3C24XX_LEDF_ACTLOW
| S3C24XX_LEDF_TRISTATE
,
73 static struct platform_device smdk_led4
= {
74 .name
= "s3c24xx_led",
77 .platform_data
= &smdk_pdata_led4
,
81 static struct platform_device smdk_led5
= {
82 .name
= "s3c24xx_led",
85 .platform_data
= &smdk_pdata_led5
,
89 static struct platform_device smdk_led6
= {
90 .name
= "s3c24xx_led",
93 .platform_data
= &smdk_pdata_led6
,
97 static struct platform_device smdk_led7
= {
98 .name
= "s3c24xx_led",
101 .platform_data
= &smdk_pdata_led7
,
105 /* NAND parititon from 2.4.18-swl5 */
107 static struct mtd_partition smdk_default_nand_part
[] = {
109 .name
= "Boot Agent",
114 .name
= "S3C2410 flash partition 1",
119 .name
= "S3C2410 flash partition 2",
124 .name
= "S3C2410 flash partition 3",
129 .name
= "S3C2410 flash partition 4",
130 .offset
= SZ_1M
* 10,
134 .name
= "S3C2410 flash partition 5",
135 .offset
= SZ_1M
* 14,
139 .name
= "S3C2410 flash partition 6",
140 .offset
= SZ_1M
* 24,
144 .name
= "S3C2410 flash partition 7",
145 .offset
= SZ_1M
* 48,
146 .size
= MTDPART_SIZ_FULL
,
150 static struct s3c2410_nand_set smdk_nand_sets
[] = {
154 .nr_partitions
= ARRAY_SIZE(smdk_default_nand_part
),
155 .partitions
= smdk_default_nand_part
,
159 /* choose a set of timings which should suit most 512Mbit
163 static struct s3c2410_platform_nand smdk_nand_info
= {
167 .nr_sets
= ARRAY_SIZE(smdk_nand_sets
),
168 .sets
= smdk_nand_sets
,
169 .ecc_mode
= NAND_ECC_SOFT
,
172 /* devices we initialise */
174 static struct platform_device __initdata
*smdk_devs
[] = {
182 static const struct gpio smdk_led_gpios
[] = {
183 { S3C2410_GPF(4), GPIOF_OUT_INIT_HIGH
, NULL
},
184 { S3C2410_GPF(5), GPIOF_OUT_INIT_HIGH
, NULL
},
185 { S3C2410_GPF(6), GPIOF_OUT_INIT_HIGH
, NULL
},
186 { S3C2410_GPF(7), GPIOF_OUT_INIT_HIGH
, NULL
},
189 void __init
smdk_machine_init(void)
191 /* Configure the LEDs (even if we have no LED support)*/
193 int ret
= gpio_request_array(smdk_led_gpios
,
194 ARRAY_SIZE(smdk_led_gpios
));
195 if (!WARN_ON(ret
< 0))
196 gpio_free_array(smdk_led_gpios
, ARRAY_SIZE(smdk_led_gpios
));
198 if (machine_is_smdk2443())
199 smdk_nand_info
.twrph0
= 50;
201 s3c_nand_set_platdata(&smdk_nand_info
);
203 platform_add_devices(smdk_devs
, ARRAY_SIZE(smdk_devs
));