diff options
Diffstat (limited to 'drivers/mtd/onenand/omap2.c')
| -rw-r--r-- | drivers/mtd/onenand/omap2.c | 34 | 
1 files changed, 18 insertions, 16 deletions
diff --git a/drivers/mtd/onenand/omap2.c b/drivers/mtd/onenand/omap2.c index 398a8278384..1961be98517 100644 --- a/drivers/mtd/onenand/omap2.c +++ b/drivers/mtd/onenand/omap2.c @@ -39,22 +39,21 @@  #include <asm/mach/flash.h>  #include <plat/gpmc.h> -#include <plat/onenand.h> +#include <linux/platform_data/mtd-onenand-omap2.h>  #include <asm/gpio.h>  #include <plat/dma.h> - -#include <plat/board.h> +#include <plat/cpu.h>  #define DRIVER_NAME "omap2-onenand" -#define ONENAND_IO_SIZE		SZ_128K  #define ONENAND_BUFRAM_SIZE	(1024 * 5)  struct omap2_onenand {  	struct platform_device *pdev;  	int gpmc_cs;  	unsigned long phys_base; +	unsigned int mem_size;  	int gpio_irq;  	struct mtd_info mtd;  	struct onenand_chip onenand; @@ -626,6 +625,7 @@ static int __devinit omap2_onenand_probe(struct platform_device *pdev)  	struct omap2_onenand *c;  	struct onenand_chip *this;  	int r; +	struct resource *res;  	pdata = pdev->dev.platform_data;  	if (pdata == NULL) { @@ -647,20 +647,24 @@ static int __devinit omap2_onenand_probe(struct platform_device *pdev)  		c->gpio_irq = 0;  	} -	r = gpmc_cs_request(c->gpmc_cs, ONENAND_IO_SIZE, &c->phys_base); -	if (r < 0) { -		dev_err(&pdev->dev, "Cannot request GPMC CS\n"); +	res = platform_get_resource(pdev, IORESOURCE_MEM, 0); +	if (res == NULL) { +		r = -EINVAL; +		dev_err(&pdev->dev, "error getting memory resource\n");  		goto err_kfree;  	} -	if (request_mem_region(c->phys_base, ONENAND_IO_SIZE, +	c->phys_base = res->start; +	c->mem_size = resource_size(res); + +	if (request_mem_region(c->phys_base, c->mem_size,  			       pdev->dev.driver->name) == NULL) { -		dev_err(&pdev->dev, "Cannot reserve memory region at 0x%08lx, " -			"size: 0x%x\n",	c->phys_base, ONENAND_IO_SIZE); +		dev_err(&pdev->dev, "Cannot reserve memory region at 0x%08lx, size: 0x%x\n", +						c->phys_base, c->mem_size);  		r = -EBUSY; -		goto err_free_cs; +		goto err_kfree;  	} -	c->onenand.base = ioremap(c->phys_base, ONENAND_IO_SIZE); +	c->onenand.base = ioremap(c->phys_base, c->mem_size);  	if (c->onenand.base == NULL) {  		r = -ENOMEM;  		goto err_release_mem_region; @@ -776,9 +780,7 @@ err_release_gpio:  err_iounmap:  	iounmap(c->onenand.base);  err_release_mem_region: -	release_mem_region(c->phys_base, ONENAND_IO_SIZE); -err_free_cs: -	gpmc_cs_free(c->gpmc_cs); +	release_mem_region(c->phys_base, c->mem_size);  err_kfree:  	kfree(c); @@ -800,7 +802,7 @@ static int __devexit omap2_onenand_remove(struct platform_device *pdev)  		gpio_free(c->gpio_irq);  	}  	iounmap(c->onenand.base); -	release_mem_region(c->phys_base, ONENAND_IO_SIZE); +	release_mem_region(c->phys_base, c->mem_size);  	gpmc_cs_free(c->gpmc_cs);  	kfree(c);  |