aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mtd/maps
diff options
context:
space:
mode:
authorDmitry Eremin-Solenikov <dbaryshkov@gmail.com>2011-05-29 17:26:17 -0400
committerArtem Bityutskiy <artem.bityutskiy@intel.com>2011-09-11 08:02:12 -0400
commitfbcf62a32be1e897a1d730af430758f881f8ef35 (patch)
tree43a99117f7857424f1f57b2dcf2e62ecd2d7ced0 /drivers/mtd/maps
parent628376fb5369c353680f03f47705b1437ff8de80 (diff)
mtd: physmap_of: move parse_obsolete_partitions to become separate parser
Move parse_obsolete_partitions() to ofpart.c and register it as an ofoldpart partitions parser. Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> Signed-off-by: Artem Bityutskiy <dedekind1@gmail.com>
Diffstat (limited to 'drivers/mtd/maps')
-rw-r--r--drivers/mtd/maps/physmap_of.c53
1 files changed, 1 insertions, 52 deletions
diff --git a/drivers/mtd/maps/physmap_of.c b/drivers/mtd/maps/physmap_of.c
index 6a75743f8ea5..55c4e2eefdc6 100644
--- a/drivers/mtd/maps/physmap_of.c
+++ b/drivers/mtd/maps/physmap_of.c
@@ -40,51 +40,6 @@ struct of_flash {
40}; 40};
41 41
42#define OF_FLASH_PARTS(info) ((info)->parts) 42#define OF_FLASH_PARTS(info) ((info)->parts)
43static int parse_obsolete_partitions(struct platform_device *dev,
44 struct of_flash *info,
45 struct device_node *dp)
46{
47 int i, plen, nr_parts;
48 const struct {
49 __be32 offset, len;
50 } *part;
51 const char *names;
52
53 part = of_get_property(dp, "partitions", &plen);
54 if (!part)
55 return 0; /* No partitions found */
56
57 dev_warn(&dev->dev, "Device tree uses obsolete partition map binding\n");
58
59 nr_parts = plen / sizeof(part[0]);
60
61 info->parts = kzalloc(nr_parts * sizeof(*info->parts), GFP_KERNEL);
62 if (!info->parts)
63 return -ENOMEM;
64
65 names = of_get_property(dp, "partition-names", &plen);
66
67 for (i = 0; i < nr_parts; i++) {
68 info->parts[i].offset = be32_to_cpu(part->offset);
69 info->parts[i].size = be32_to_cpu(part->len) & ~1;
70 if (be32_to_cpu(part->len) & 1) /* bit 0 set signifies read only partition */
71 info->parts[i].mask_flags = MTD_WRITEABLE;
72
73 if (names && (plen > 0)) {
74 int len = strlen(names) + 1;
75
76 info->parts[i].name = (char *)names;
77 plen -= len;
78 names += len;
79 } else {
80 info->parts[i].name = "unnamed";
81 }
82
83 part++;
84 }
85
86 return nr_parts;
87}
88 43
89static int of_flash_remove(struct platform_device *dev) 44static int of_flash_remove(struct platform_device *dev)
90{ 45{
@@ -166,7 +121,7 @@ static struct mtd_info * __devinit obsolete_probe(struct platform_device *dev,
166 default is use. These take precedence over other device tree 121 default is use. These take precedence over other device tree
167 information. */ 122 information. */
168static const char *part_probe_types_def[] = { "cmdlinepart", "RedBoot", 123static const char *part_probe_types_def[] = { "cmdlinepart", "RedBoot",
169 "ofpart", NULL }; 124 "ofpart", "ofoldpart", NULL };
170static const char ** __devinit of_get_probes(struct device_node *dp) 125static const char ** __devinit of_get_probes(struct device_node *dp)
171{ 126{
172 const char *cp; 127 const char *cp;
@@ -343,12 +298,6 @@ static int __devinit of_flash_probe(struct platform_device *dev)
343 } 298 }
344 of_free_probes(part_probe_types); 299 of_free_probes(part_probe_types);
345 300
346 if (err == 0) {
347 err = parse_obsolete_partitions(dev, info, dp);
348 if (err < 0)
349 goto err_out;
350 }
351
352 mtd_device_register(info->cmtd, info->parts, err); 301 mtd_device_register(info->cmtd, info->parts, err);
353 302
354 kfree(mtd_list); 303 kfree(mtd_list);