diff options
author | Afzal Mohammed <afzal@ti.com> | 2012-08-30 15:53:23 -0400 |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2012-08-30 15:53:23 -0400 |
commit | d65ccb6da60ac8f38ef6eb10ac53d94f28e0f3b1 (patch) | |
tree | 6efefde124fb094056bfd3b8a3b879a7284dc1c1 | |
parent | 9c4c2f8b91a8bcc431d1c033e4d4455479b8183b (diff) |
mtd: onenand: omap2: obtain memory from resource
gpmc initialization for onenand done by platform code now provides
onenand address space as memory resource. Hence remove usage of
gpmc_cs_request in onenand driver and obtain memory details from
resource structure.
Signed-off-by: Afzal Mohammed <afzal@ti.com>
Acked-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
-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 | ||