aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mtd/onenand/generic.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mtd/onenand/generic.c')
-rw-r--r--drivers/mtd/onenand/generic.c24
1 files changed, 14 insertions, 10 deletions
diff --git a/drivers/mtd/onenand/generic.c b/drivers/mtd/onenand/generic.c
index 3a496c33fb52..e78914938c5c 100644
--- a/drivers/mtd/onenand/generic.c
+++ b/drivers/mtd/onenand/generic.c
@@ -19,12 +19,16 @@
19#include <linux/mtd/mtd.h> 19#include <linux/mtd/mtd.h>
20#include <linux/mtd/onenand.h> 20#include <linux/mtd/onenand.h>
21#include <linux/mtd/partitions.h> 21#include <linux/mtd/partitions.h>
22
23#include <asm/io.h> 22#include <asm/io.h>
24#include <asm/mach/flash.h>
25
26#define DRIVER_NAME "onenand"
27 23
24/*
25 * Note: Driver name and platform data format have been updated!
26 *
27 * This version of the driver is named "onenand-flash" and takes struct
28 * onenand_platform_data as platform data. The old ARM-specific version
29 * with the name "onenand" used to take struct flash_platform_data.
30 */
31#define DRIVER_NAME "onenand-flash"
28 32
29#ifdef CONFIG_MTD_PARTITIONS 33#ifdef CONFIG_MTD_PARTITIONS
30static const char *part_probes[] = { "cmdlinepart", NULL, }; 34static const char *part_probes[] = { "cmdlinepart", NULL, };
@@ -39,16 +43,16 @@ struct onenand_info {
39static int __devinit generic_onenand_probe(struct platform_device *pdev) 43static int __devinit generic_onenand_probe(struct platform_device *pdev)
40{ 44{
41 struct onenand_info *info; 45 struct onenand_info *info;
42 struct flash_platform_data *pdata = pdev->dev.platform_data; 46 struct onenand_platform_data *pdata = pdev->dev.platform_data;
43 struct resource *res = pdev->resource; 47 struct resource *res = pdev->resource;
44 unsigned long size = res->end - res->start + 1; 48 unsigned long size = resource_size(res);
45 int err; 49 int err;
46 50
47 info = kzalloc(sizeof(struct onenand_info), GFP_KERNEL); 51 info = kzalloc(sizeof(struct onenand_info), GFP_KERNEL);
48 if (!info) 52 if (!info)
49 return -ENOMEM; 53 return -ENOMEM;
50 54
51 if (!request_mem_region(res->start, size, pdev->dev.driver->name)) { 55 if (!request_mem_region(res->start, size, dev_name(&pdev->dev))) {
52 err = -EBUSY; 56 err = -EBUSY;
53 goto out_free_info; 57 goto out_free_info;
54 } 58 }
@@ -59,7 +63,7 @@ static int __devinit generic_onenand_probe(struct platform_device *pdev)
59 goto out_release_mem_region; 63 goto out_release_mem_region;
60 } 64 }
61 65
62 info->onenand.mmcontrol = pdata->mmcontrol; 66 info->onenand.mmcontrol = pdata ? pdata->mmcontrol : 0;
63 info->onenand.irq = platform_get_irq(pdev, 0); 67 info->onenand.irq = platform_get_irq(pdev, 0);
64 68
65 info->mtd.name = dev_name(&pdev->dev); 69 info->mtd.name = dev_name(&pdev->dev);
@@ -75,7 +79,7 @@ static int __devinit generic_onenand_probe(struct platform_device *pdev)
75 err = parse_mtd_partitions(&info->mtd, part_probes, &info->parts, 0); 79 err = parse_mtd_partitions(&info->mtd, part_probes, &info->parts, 0);
76 if (err > 0) 80 if (err > 0)
77 add_mtd_partitions(&info->mtd, info->parts, err); 81 add_mtd_partitions(&info->mtd, info->parts, err);
78 else if (err <= 0 && pdata->parts) 82 else if (err <= 0 && pdata && pdata->parts)
79 add_mtd_partitions(&info->mtd, pdata->parts, pdata->nr_parts); 83 add_mtd_partitions(&info->mtd, pdata->parts, pdata->nr_parts);
80 else 84 else
81#endif 85#endif
@@ -99,7 +103,7 @@ static int __devexit generic_onenand_remove(struct platform_device *pdev)
99{ 103{
100 struct onenand_info *info = platform_get_drvdata(pdev); 104 struct onenand_info *info = platform_get_drvdata(pdev);
101 struct resource *res = pdev->resource; 105 struct resource *res = pdev->resource;
102 unsigned long size = res->end - res->start + 1; 106 unsigned long size = resource_size(res);
103 107
104 platform_set_drvdata(pdev, NULL); 108 platform_set_drvdata(pdev, NULL);
105 109