summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/boards/beagle/board.c9
-rw-r--r--arch/arm/boards/pcm049/board.c10
-rw-r--r--arch/arm/boards/phycard-a-l1/pca-a-l1.c9
-rw-r--r--arch/arm/boards/phycard-a-xl2/pca-a-xl2.c9
-rw-r--r--arch/arm/mach-omap/devices-gpmc-nand.c24
-rw-r--r--arch/arm/mach-omap/include/mach/gpmc_nand.h7
6 files changed, 39 insertions, 29 deletions
diff --git a/arch/arm/boards/beagle/board.c b/arch/arm/boards/beagle/board.c
index 9ddf3172f2..5122817a87 100644
--- a/arch/arm/boards/beagle/board.c
+++ b/arch/arm/boards/beagle/board.c
@@ -283,6 +283,12 @@ static struct i2c_board_info i2c_devices[] = {
},
};
+static struct gpmc_nand_platform_data nand_plat = {
+ .device_width = 16,
+ .ecc_mode = OMAP_ECC_HAMMING_CODE_HW_ROMCODE,
+ .nand_cfg = &omap3_nand_cfg,
+};
+
static int beagle_mem_init(void)
{
arm_add_mem_device("ram0", 0x80000000, 128 * 1024 * 1024);
@@ -306,8 +312,7 @@ static int beagle_devices_init(void)
/* WP is made high and WAIT1 active Low */
gpmc_generic_init(0x10);
#endif
- gpmc_generic_nand_devices_init(0, 16,
- OMAP_ECC_HAMMING_CODE_HW_ROMCODE, &omap3_nand_cfg);
+ omap_add_gpmc_nand_device(&nand_plat);
add_generic_device("omap-hsmmc", DEVICE_ID_DYNAMIC, NULL, OMAP_MMC1_BASE, SZ_4K,
IORESOURCE_MEM, NULL);
diff --git a/arch/arm/boards/pcm049/board.c b/arch/arm/boards/pcm049/board.c
index 5b7854a5e3..09f0d6da03 100644
--- a/arch/arm/boards/pcm049/board.c
+++ b/arch/arm/boards/pcm049/board.c
@@ -94,6 +94,13 @@ static struct i2c_board_info i2c_devices[] = {
},
};
+static struct gpmc_nand_platform_data nand_plat = {
+ .wait_mon_pin = 1,
+ .device_width = 8,
+ .ecc_mode = OMAP_ECC_BCH8_CODE_HW,
+ .nand_cfg = &omap4_nand_cfg,
+};
+
static int pcm049_devices_init(void)
{
i2c_register_board_info(0, i2c_devices, ARRAY_SIZE(i2c_devices));
@@ -107,8 +114,7 @@ static int pcm049_devices_init(void)
pcm049_network_init();
- gpmc_generic_nand_devices_init(0, 8,
- OMAP_ECC_BCH8_CODE_HW, &omap4_nand_cfg);
+ omap_add_gpmc_nand_device(&nand_plat);
#ifdef CONFIG_PARTITION
devfs_add_partition("nand0", 0x00000, SZ_128K, DEVFS_PARTITION_FIXED, "xload_raw");
diff --git a/arch/arm/boards/phycard-a-l1/pca-a-l1.c b/arch/arm/boards/phycard-a-l1/pca-a-l1.c
index 1dc7678771..7823f3bcab 100644
--- a/arch/arm/boards/phycard-a-l1/pca-a-l1.c
+++ b/arch/arm/boards/phycard-a-l1/pca-a-l1.c
@@ -391,9 +391,16 @@ struct omap_hsmmc_platform_data pcaal1_hsmmc_plat = {
};
#endif
+static struct gpmc_nand_platform_data nand_plat = {
+ .device_width = 16,
+ .ecc_mode = OMAP_ECC_BCH8_CODE_HW,
+ .nand_cfg = &omap3_nand_cfg,
+};
+
static int pcaal1_init_devices(void)
{
- gpmc_generic_nand_devices_init(0, 16, OMAP_ECC_BCH8_CODE_HW, &omap3_nand_cfg);
+ omap_add_gpmc_nand_device(&nand_plat);
+
#ifdef CONFIG_MCI_OMAP_HSMMC
add_generic_device("omap-hsmmc", DEVICE_ID_DYNAMIC, NULL, OMAP_MMC1_BASE, SZ_4K,
IORESOURCE_MEM, &pcaal1_hsmmc_plat);
diff --git a/arch/arm/boards/phycard-a-xl2/pca-a-xl2.c b/arch/arm/boards/phycard-a-xl2/pca-a-xl2.c
index 128cb8fd28..220f7f4a44 100644
--- a/arch/arm/boards/phycard-a-xl2/pca-a-xl2.c
+++ b/arch/arm/boards/phycard-a-xl2/pca-a-xl2.c
@@ -104,6 +104,12 @@ static struct omap_hsmmc_platform_data mmc_device = {
#define OMAP4_MMC1_PBIASLITE_PWRDNZ (1<<22)
#define OMAP4_MMC1_PWRDNZ (1<<26)
+static struct gpmc_nand_platform_data nand_plat = {
+ .device_width = 16,
+ .ecc_mode = OMAP_ECC_BCH8_CODE_HW,
+ .nand_cfg = &omap4_nand_cfg,
+};
+
static int pcaaxl2_devices_init(void)
{
u32 value;
@@ -124,8 +130,7 @@ static int pcaaxl2_devices_init(void)
pcaaxl2_network_init();
- gpmc_generic_nand_devices_init(0, 16,
- OMAP_ECC_BCH8_CODE_HW, &omap4_nand_cfg);
+ omap_add_gpmc_nand_device(&nand_plat);
#ifdef CONFIG_PARTITION
devfs_add_partition("nand0", 0x00000, SZ_128K,
diff --git a/arch/arm/mach-omap/devices-gpmc-nand.c b/arch/arm/mach-omap/devices-gpmc-nand.c
index 9d0ab6edcb..64ca66619f 100644
--- a/arch/arm/mach-omap/devices-gpmc-nand.c
+++ b/arch/arm/mach-omap/devices-gpmc-nand.c
@@ -39,35 +39,23 @@
#define GPMC_CONF1_VALx8 0x00000800
#define GPMC_CONF1_VALx16 0x00001800
-/** NAND platform specific settings settings */
-static struct gpmc_nand_platform_data nand_plat = {
- .wait_mon_pin = 0,
-};
-
/**
* @brief gpmc_generic_nand_devices_init - init generic nand device
*
* @return success/fail based on device function
*/
-int gpmc_generic_nand_devices_init(int cs, int width,
- enum gpmc_ecc_mode eccmode, struct gpmc_config *nand_cfg)
+int omap_add_gpmc_nand_device(struct gpmc_nand_platform_data *pdata)
{
- nand_plat.cs = cs;
-
- if (width == 16)
- nand_cfg->cfg[0] = GPMC_CONF1_VALx16;
+ if (pdata->device_width == 16)
+ pdata->nand_cfg->cfg[0] = GPMC_CONF1_VALx16;
else
- nand_cfg->cfg[0] = GPMC_CONF1_VALx8;
-
- nand_plat.device_width = width;
- nand_plat.ecc_mode = eccmode;
- nand_plat.priv = nand_cfg;
+ pdata->nand_cfg->cfg[0] = GPMC_CONF1_VALx8;
/* Configure GPMC CS before register */
- gpmc_cs_config(nand_plat.cs, nand_cfg);
+ gpmc_cs_config(pdata->cs, pdata->nand_cfg);
add_generic_device("gpmc_nand", DEVICE_ID_DYNAMIC, NULL, OMAP_GPMC_BASE,
- 1024 * 4, IORESOURCE_MEM, &nand_plat);
+ 1024 * 4, IORESOURCE_MEM, pdata);
return 0;
}
diff --git a/arch/arm/mach-omap/include/mach/gpmc_nand.h b/arch/arm/mach-omap/include/mach/gpmc_nand.h
index 8a6927b8f2..582fb36e8f 100644
--- a/arch/arm/mach-omap/include/mach/gpmc_nand.h
+++ b/arch/arm/mach-omap/include/mach/gpmc_nand.h
@@ -61,12 +61,11 @@ struct gpmc_nand_platform_data {
/* if you like a custom oob use this. */
struct nand_ecclayout *oob;
- /** platform specific private data */
- void *priv;
+ /** gpmc config for nand */
+ struct gpmc_config *nand_cfg;
};
-int gpmc_generic_nand_devices_init(int cs, int width,
- enum gpmc_ecc_mode, struct gpmc_config *nand_cfg);
+int omap_add_gpmc_nand_device(struct gpmc_nand_platform_data *pdata);
extern struct gpmc_config omap3_nand_cfg;
extern struct gpmc_config omap4_nand_cfg;