diff options
| -rw-r--r-- | drivers/mtd/onenand/omap2.c | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/drivers/mtd/onenand/omap2.c b/drivers/mtd/onenand/omap2.c index 398a82783848..3ff893d4e6ce 100644 --- a/drivers/mtd/onenand/omap2.c +++ b/drivers/mtd/onenand/omap2.c | |||
| @@ -48,13 +48,13 @@ | |||
| 48 | 48 | ||
| 49 | #define DRIVER_NAME "omap2-onenand" | 49 | #define DRIVER_NAME "omap2-onenand" |
| 50 | 50 | ||
| 51 | #define ONENAND_IO_SIZE SZ_128K | ||
| 52 | #define ONENAND_BUFRAM_SIZE (1024 * 5) | 51 | #define ONENAND_BUFRAM_SIZE (1024 * 5) |
| 53 | 52 | ||
| 54 | struct omap2_onenand { | 53 | struct omap2_onenand { |
| 55 | struct platform_device *pdev; | 54 | struct platform_device *pdev; |
| 56 | int gpmc_cs; | 55 | int gpmc_cs; |
| 57 | unsigned long phys_base; | 56 | unsigned long phys_base; |
| 57 | unsigned int mem_size; | ||
| 58 | int gpio_irq; | 58 | int gpio_irq; |
| 59 | struct mtd_info mtd; | 59 | struct mtd_info mtd; |
| 60 | struct onenand_chip onenand; | 60 | struct onenand_chip onenand; |
| @@ -626,6 +626,7 @@ static int __devinit omap2_onenand_probe(struct platform_device *pdev) | |||
| 626 | struct omap2_onenand *c; | 626 | struct omap2_onenand *c; |
| 627 | struct onenand_chip *this; | 627 | struct onenand_chip *this; |
| 628 | int r; | 628 | int r; |
| 629 | struct resource *res; | ||
| 629 | 630 | ||
| 630 | pdata = pdev->dev.platform_data; | 631 | pdata = pdev->dev.platform_data; |
| 631 | if (pdata == NULL) { | 632 | if (pdata == NULL) { |
| @@ -647,20 +648,24 @@ static int __devinit omap2_onenand_probe(struct platform_device *pdev) | |||
| 647 | c->gpio_irq = 0; | 648 | c->gpio_irq = 0; |
| 648 | } | 649 | } |
| 649 | 650 | ||
| 650 | r = gpmc_cs_request(c->gpmc_cs, ONENAND_IO_SIZE, &c->phys_base); | 651 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
| 651 | if (r < 0) { | 652 | if (res == NULL) { |
| 652 | dev_err(&pdev->dev, "Cannot request GPMC CS\n"); | 653 | r = -EINVAL; |
| 654 | dev_err(&pdev->dev, "error getting memory resource\n"); | ||
| 653 | goto err_kfree; | 655 | goto err_kfree; |
| 654 | } | 656 | } |
| 655 | 657 | ||
| 656 | if (request_mem_region(c->phys_base, ONENAND_IO_SIZE, | 658 | c->phys_base = res->start; |
| 659 | c->mem_size = resource_size(res); | ||
| 660 | |||
| 661 | if (request_mem_region(c->phys_base, c->mem_size, | ||
| 657 | pdev->dev.driver->name) == NULL) { | 662 | pdev->dev.driver->name) == NULL) { |
| 658 | dev_err(&pdev->dev, "Cannot reserve memory region at 0x%08lx, " | 663 | dev_err(&pdev->dev, "Cannot reserve memory region at 0x%08lx, size: 0x%x\n", |
| 659 | "size: 0x%x\n", c->phys_base, ONENAND_IO_SIZE); | 664 | c->phys_base, c->mem_size); |
| 660 | r = -EBUSY; | 665 | r = -EBUSY; |
| 661 | goto err_free_cs; | 666 | goto err_kfree; |
| 662 | } | 667 | } |
| 663 | c->onenand.base = ioremap(c->phys_base, ONENAND_IO_SIZE); | 668 | c->onenand.base = ioremap(c->phys_base, c->mem_size); |
| 664 | if (c->onenand.base == NULL) { | 669 | if (c->onenand.base == NULL) { |
| 665 | r = -ENOMEM; | 670 | r = -ENOMEM; |
| 666 | goto err_release_mem_region; | 671 | goto err_release_mem_region; |
| @@ -776,9 +781,7 @@ err_release_gpio: | |||
| 776 | err_iounmap: | 781 | err_iounmap: |
| 777 | iounmap(c->onenand.base); | 782 | iounmap(c->onenand.base); |
| 778 | err_release_mem_region: | 783 | err_release_mem_region: |
| 779 | release_mem_region(c->phys_base, ONENAND_IO_SIZE); | 784 | release_mem_region(c->phys_base, c->mem_size); |
| 780 | err_free_cs: | ||
| 781 | gpmc_cs_free(c->gpmc_cs); | ||
| 782 | err_kfree: | 785 | err_kfree: |
| 783 | kfree(c); | 786 | kfree(c); |
| 784 | 787 | ||
| @@ -800,7 +803,7 @@ static int __devexit omap2_onenand_remove(struct platform_device *pdev) | |||
| 800 | gpio_free(c->gpio_irq); | 803 | gpio_free(c->gpio_irq); |
| 801 | } | 804 | } |
| 802 | iounmap(c->onenand.base); | 805 | iounmap(c->onenand.base); |
| 803 | release_mem_region(c->phys_base, ONENAND_IO_SIZE); | 806 | release_mem_region(c->phys_base, c->mem_size); |
| 804 | gpmc_cs_free(c->gpmc_cs); | 807 | gpmc_cs_free(c->gpmc_cs); |
| 805 | kfree(c); | 808 | kfree(c); |
| 806 | 809 | ||
