|
@@ -29,6 +29,7 @@ struct physmap_flash_info {
|
|
|
struct map_info map[MAX_RESOURCES];
|
|
|
#ifdef CONFIG_MTD_PARTITIONS
|
|
|
int nr_parts;
|
|
|
+ struct mtd_partition *parts;
|
|
|
#endif
|
|
|
};
|
|
|
|
|
@@ -45,25 +46,26 @@ static int physmap_flash_remove(struct platform_device *dev)
|
|
|
|
|
|
physmap_data = dev->dev.platform_data;
|
|
|
|
|
|
-#ifdef CONFIG_MTD_CONCAT
|
|
|
- if (info->cmtd != info->mtd[0]) {
|
|
|
+#ifdef CONFIG_MTD_PARTITIONS
|
|
|
+ if (info->nr_parts) {
|
|
|
+ del_mtd_partitions(info->cmtd);
|
|
|
+ kfree(info->parts);
|
|
|
+ } else if (physmap_data->nr_parts)
|
|
|
+ del_mtd_partitions(info->cmtd);
|
|
|
+ else
|
|
|
del_mtd_device(info->cmtd);
|
|
|
+#else
|
|
|
+ del_mtd_device(info->cmtd);
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifdef CONFIG_MTD_CONCAT
|
|
|
+ if (info->cmtd != info->mtd[0])
|
|
|
mtd_concat_destroy(info->cmtd);
|
|
|
- }
|
|
|
#endif
|
|
|
|
|
|
for (i = 0; i < MAX_RESOURCES; i++) {
|
|
|
- if (info->mtd[i] != NULL) {
|
|
|
-#ifdef CONFIG_MTD_PARTITIONS
|
|
|
- if (info->nr_parts || physmap_data->nr_parts)
|
|
|
- del_mtd_partitions(info->mtd[i]);
|
|
|
- else
|
|
|
- del_mtd_device(info->mtd[i]);
|
|
|
-#else
|
|
|
- del_mtd_device(info->mtd[i]);
|
|
|
-#endif
|
|
|
+ if (info->mtd[i] != NULL)
|
|
|
map_destroy(info->mtd[i]);
|
|
|
- }
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
@@ -86,9 +88,6 @@ static int physmap_flash_probe(struct platform_device *dev)
|
|
|
int err = 0;
|
|
|
int i;
|
|
|
int devices_found = 0;
|
|
|
-#ifdef CONFIG_MTD_PARTITIONS
|
|
|
- struct mtd_partition *parts;
|
|
|
-#endif
|
|
|
|
|
|
physmap_data = dev->dev.platform_data;
|
|
|
if (physmap_data == NULL)
|
|
@@ -167,10 +166,11 @@ static int physmap_flash_probe(struct platform_device *dev)
|
|
|
goto err_out;
|
|
|
|
|
|
#ifdef CONFIG_MTD_PARTITIONS
|
|
|
- err = parse_mtd_partitions(info->cmtd, part_probe_types, &parts, 0);
|
|
|
+ err = parse_mtd_partitions(info->cmtd, part_probe_types,
|
|
|
+ &info->parts, 0);
|
|
|
if (err > 0) {
|
|
|
- add_mtd_partitions(info->cmtd, parts, err);
|
|
|
- kfree(parts);
|
|
|
+ add_mtd_partitions(info->cmtd, info->parts, err);
|
|
|
+ info->nr_parts = err;
|
|
|
return 0;
|
|
|
}
|
|
|
|