Put the init flag in the structure
[openwrt/svn-archive/archive.git] / target / linux / adm5120-2.6 / files / drivers / mtd / nand / rbmipsnand.c
index 9e6ae1b5778f0c4fd4d76e7093243f7aa26817e0..2e7059d186a3637f780cc10d6dfdc91422a14c82 100644 (file)
@@ -67,6 +67,7 @@ struct adm5120_nand_info {
        int     nr_parts;
        struct mtd_partition *parts;
 #endif
+       unsigned int    init_ok;
 };
 
 static int rb100_dev_ready(struct mtd_info *mtd)
@@ -93,11 +94,10 @@ static void rbmips_hwcontrol100(struct mtd_info *mtd, int cmd, unsigned int ctrl
 /* when creating the partitions.                                          */ 
 /*========================================================================*/
 
-static unsigned init_ok = 0;
 
 unsigned get_rbnand_block_size(struct adm5120_nand_info *data)
 {
-       return init_ok ? data->mtd.writesize : 0;
+       return data->init_ok ? data->mtd.writesize : 0;
 }
 
 EXPORT_SYMBOL(get_rbnand_block_size);
@@ -115,7 +115,7 @@ static int rbmips_probe(struct platform_device *pdev)
 
        }
        
-       data->io_base = ioremap(pdev->resource[0].start, 0x1000);
+       data->io_base = ioremap(pdev->resource[0].start, pdev->resource[0].end - pdev->resource[0].start + 1);
 
        if (data->io_base == NULL) {
                dev_err(&pdev->dev, "ioremap failed\n");
@@ -132,6 +132,7 @@ static int rbmips_probe(struct platform_device *pdev)
        data->mtd.priv = &data->chip;
        data->mtd.owner = THIS_MODULE;
 
+       data->init_ok = 0;
        data->chip.IO_ADDR_R = (unsigned char *)KSEG1ADDR(ADM5120_SRAM1_BASE);
        data->chip.IO_ADDR_W = data->chip.IO_ADDR_R;
        data->chip.cmd_ctrl = rbmips_hwcontrol100;
@@ -151,7 +152,7 @@ static int rbmips_probe(struct platform_device *pdev)
        }
 
        add_mtd_partitions(&data->mtd, partition_info, 2);
-       init_ok = 1;
+       data->init_ok = 1;
 
        res = add_mtd_device(&data->mtd);
        if (!res)