diff options
author | Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> | 2011-05-29 17:26:17 -0400 |
---|---|---|
committer | Artem Bityutskiy <artem.bityutskiy@intel.com> | 2011-09-11 08:02:12 -0400 |
commit | fbcf62a32be1e897a1d730af430758f881f8ef35 (patch) | |
tree | 43a99117f7857424f1f57b2dcf2e62ecd2d7ced0 /drivers/mtd/maps | |
parent | 628376fb5369c353680f03f47705b1437ff8de80 (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.c | 53 |
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) |
43 | static 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 | ||
89 | static int of_flash_remove(struct platform_device *dev) | 44 | static 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. */ |
168 | static const char *part_probe_types_def[] = { "cmdlinepart", "RedBoot", | 123 | static const char *part_probe_types_def[] = { "cmdlinepart", "RedBoot", |
169 | "ofpart", NULL }; | 124 | "ofpart", "ofoldpart", NULL }; |
170 | static const char ** __devinit of_get_probes(struct device_node *dp) | 125 | static 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); |