diff options
Diffstat (limited to 'arch/arm/mach-omap2/gpmc-nand.c')
| -rw-r--r-- | arch/arm/mach-omap2/gpmc-nand.c | 32 | 
1 files changed, 25 insertions, 7 deletions
diff --git a/arch/arm/mach-omap2/gpmc-nand.c b/arch/arm/mach-omap2/gpmc-nand.c index 386dec8d235..9e9f47ad618 100644 --- a/arch/arm/mach-omap2/gpmc-nand.c +++ b/arch/arm/mach-omap2/gpmc-nand.c @@ -16,20 +16,28 @@  #include <asm/mach/flash.h> -#include <plat/cpu.h>  #include <plat/nand.h> -#include <plat/board.h>  #include <plat/gpmc.h> -static struct resource gpmc_nand_resource = { -	.flags		= IORESOURCE_MEM, +#include "soc.h" + +static struct resource gpmc_nand_resource[] = { +	{ +		.flags		= IORESOURCE_MEM, +	}, +	{ +		.flags		= IORESOURCE_IRQ, +	}, +	{ +		.flags		= IORESOURCE_IRQ, +	},  };  static struct platform_device gpmc_nand_device = {  	.name		= "omap2-nand",  	.id		= 0, -	.num_resources	= 1, -	.resource	= &gpmc_nand_resource, +	.num_resources	= ARRAY_SIZE(gpmc_nand_resource), +	.resource	= gpmc_nand_resource,  };  static int omap2_nand_gpmc_retime(struct omap_nand_platform_data *gpmc_nand_data) @@ -75,6 +83,7 @@ static int omap2_nand_gpmc_retime(struct omap_nand_platform_data *gpmc_nand_data  		gpmc_cs_configure(gpmc_nand_data->cs, GPMC_CONFIG_DEV_SIZE, 0);  	gpmc_cs_configure(gpmc_nand_data->cs,  			GPMC_CONFIG_DEV_TYPE, GPMC_DEVICETYPE_NAND); +	gpmc_cs_configure(gpmc_nand_data->cs, GPMC_CONFIG_WP, 0);  	err = gpmc_cs_set_timings(gpmc_nand_data->cs, &t);  	if (err)  		return err; @@ -90,12 +99,19 @@ int __init gpmc_nand_init(struct omap_nand_platform_data *gpmc_nand_data)  	gpmc_nand_device.dev.platform_data = gpmc_nand_data;  	err = gpmc_cs_request(gpmc_nand_data->cs, NAND_IO_SIZE, -				&gpmc_nand_data->phys_base); +				(unsigned long *)&gpmc_nand_resource[0].start);  	if (err < 0) {  		dev_err(dev, "Cannot request GPMC CS\n");  		return err;  	} +	gpmc_nand_resource[0].end = gpmc_nand_resource[0].start + +							NAND_IO_SIZE - 1; + +	gpmc_nand_resource[1].start = +				gpmc_get_client_irq(GPMC_IRQ_FIFOEVENTENABLE); +	gpmc_nand_resource[2].start = +				gpmc_get_client_irq(GPMC_IRQ_COUNT_EVENT);  	 /* Set timings in GPMC */  	err = omap2_nand_gpmc_retime(gpmc_nand_data);  	if (err < 0) { @@ -108,6 +124,8 @@ int __init gpmc_nand_init(struct omap_nand_platform_data *gpmc_nand_data)  		gpmc_cs_configure(gpmc_nand_data->cs, GPMC_CONFIG_RDY_BSY, 1);  	} +	gpmc_update_nand_reg(&gpmc_nand_data->reg, gpmc_nand_data->cs); +  	err = platform_device_register(&gpmc_nand_device);  	if (err < 0) {  		dev_err(dev, "Unable to register NAND device\n");  |