]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
mtd: nand: omap2: obtain memory from resource
authorAfzal Mohammed <afzal@ti.com>
Thu, 30 Aug 2012 19:53:23 +0000 (12:53 -0700)
committerTony Lindgren <tony@atomide.com>
Thu, 30 Aug 2012 19:53:23 +0000 (12:53 -0700)
gpmc initialization done by platform code now updates struct resource
with the address space alloted for nand. Use this interface to obtain
memory rather than relying on platform data field - phys_base.

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>
arch/arm/plat-omap/include/plat/nand.h
drivers/mtd/nand/omap2.c

index 86e4d9c67bff75b28d56726024542a5cd69882cb..290cef5c1093b63902c2c203ef7527114d2c8ae2 100644 (file)
@@ -26,7 +26,6 @@ struct omap_nand_platform_data {
        bool                    dev_ready;
        int                     gpmc_irq;
        enum nand_io            xfer_type;
-       unsigned long           phys_base;
        int                     devsize;
        enum omap_ecc           ecc_opt;
        struct gpmc_nand_regs   reg;
index 52fc089d5bcb01cdb4041af5a45234a6e26c24f4..3578c633e97eed51fbd4f7f564feb59cdd79e7cd 100644 (file)
@@ -134,6 +134,7 @@ struct omap_nand_info {
 
        int                             gpmc_cs;
        unsigned long                   phys_base;
+       unsigned long                   mem_size;
        struct completion               comp;
        struct dma_chan                 *dma;
        int                             gpmc_irq;
@@ -1270,6 +1271,7 @@ static int __devinit omap_nand_probe(struct platform_device *pdev)
        int                             i, offset;
        dma_cap_mask_t mask;
        unsigned sig;
+       struct resource                 *res;
 
        pdata = pdev->dev.platform_data;
        if (pdata == NULL) {
@@ -1289,7 +1291,6 @@ static int __devinit omap_nand_probe(struct platform_device *pdev)
        info->pdev = pdev;
 
        info->gpmc_cs           = pdata->cs;
-       info->phys_base         = pdata->phys_base;
        info->reg               = pdata->reg;
 
        info->mtd.priv          = &info->nand;
@@ -1302,13 +1303,23 @@ static int __devinit omap_nand_probe(struct platform_device *pdev)
        /* NAND write protect off */
        gpmc_cs_configure(info->gpmc_cs, GPMC_CONFIG_WP, 0);
 
-       if (!request_mem_region(info->phys_base, NAND_IO_SIZE,
+       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       if (res == NULL) {
+               err = -EINVAL;
+               dev_err(&pdev->dev, "error getting memory resource\n");
+               goto out_free_info;
+       }
+
+       info->phys_base = res->start;
+       info->mem_size = resource_size(res);
+
+       if (!request_mem_region(info->phys_base, info->mem_size,
                                pdev->dev.driver->name)) {
                err = -EBUSY;
                goto out_free_info;
        }
 
-       info->nand.IO_ADDR_R = ioremap(info->phys_base, NAND_IO_SIZE);
+       info->nand.IO_ADDR_R = ioremap(info->phys_base, info->mem_size);
        if (!info->nand.IO_ADDR_R) {
                err = -ENOMEM;
                goto out_release_mem_region;
@@ -1479,7 +1490,7 @@ static int __devinit omap_nand_probe(struct platform_device *pdev)
 out_release_mem_region:
        if (info->dma)
                dma_release_channel(info->dma);
-       release_mem_region(info->phys_base, NAND_IO_SIZE);
+       release_mem_region(info->phys_base, info->mem_size);
 out_free_info:
        kfree(info);