diff options
Diffstat (limited to 'arch/arm/mach-omap2/gpmc-nand.c')
| -rw-r--r-- | arch/arm/mach-omap2/gpmc-nand.c | 28 | 
1 files changed, 23 insertions, 5 deletions
diff --git a/arch/arm/mach-omap2/gpmc-nand.c b/arch/arm/mach-omap2/gpmc-nand.c index 513ed9e2db5..96fcc641aab 100644 --- a/arch/arm/mach-omap2/gpmc-nand.c +++ b/arch/arm/mach-omap2/gpmc-nand.c @@ -20,15 +20,23 @@  #include <plat/nand.h>  #include <plat/gpmc.h> -static struct resource gpmc_nand_resource = { -	.flags		= IORESOURCE_MEM, +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) @@ -74,6 +82,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; @@ -89,12 +98,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) { @@ -107,6 +123,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");  |