X-Git-Url: http://ftp.safe.ca/?a=blobdiff_plain;f=drivers%2Fmtd%2Fofpart.c;h=62d6a78c4eeea43ae34aac65508d270b163b985d;hb=f653398c86a1c104f0992bd788dd4bb065449be4;hp=f86e06934cd8d2cb37b64e5c5064ab5125a60978;hpb=9a310d21196f38f6ad0ad146057548653e495c09;p=safe%2Fjmp%2Flinux-2.6 diff --git a/drivers/mtd/ofpart.c b/drivers/mtd/ofpart.c index f86e069..62d6a78 100644 --- a/drivers/mtd/ofpart.c +++ b/drivers/mtd/ofpart.c @@ -20,7 +20,6 @@ #include int __devinit of_mtd_parse_partitions(struct device *dev, - struct mtd_info *mtd, struct device_node *node, struct mtd_partition **pparts) { @@ -48,13 +47,11 @@ int __devinit of_mtd_parse_partitions(struct device *dev, int len; reg = of_get_property(pp, "reg", &len); - if (!reg || (len != 2 * sizeof(u32))) { - of_node_put(pp); - dev_err(dev, "Invalid 'reg' on %s\n", node->full_name); - kfree(*pparts); - *pparts = NULL; - return -EINVAL; + if (!reg) { + nr_parts--; + continue; } + (*pparts)[i].offset = reg[0]; (*pparts)[i].size = reg[1]; @@ -69,6 +66,16 @@ int __devinit of_mtd_parse_partitions(struct device *dev, i++; } + if (!i) { + of_node_put(pp); + dev_err(dev, "No valid partition found on %s\n", node->full_name); + kfree(*pparts); + *pparts = NULL; + return -EINVAL; + } + return nr_parts; } EXPORT_SYMBOL(of_mtd_parse_partitions); + +MODULE_LICENSE("GPL");