UBI: Enable re-initializing of the "ubi part" command
authorStefan Roese <sr@denx.de>
Thu, 27 Nov 2008 13:07:09 +0000 (14:07 +0100)
committerStefan Roese <sr@denx.de>
Tue, 9 Dec 2008 09:07:36 +0000 (10:07 +0100)
With this patch now, the user can call "ubi part" multiple times to
re-connect the UBI device to another MTD partition.

Signed-off-by: Stefan Roese <sr@denx.de>
common/cmd_ubi.c
drivers/mtd/ubi/build.c
include/ubi_uboot.h

index 8446765878304e0ee543cbf3d9bb4a0eb6a4ecc4..495d71ec0a11b596743cd93d4358c4778b0942e3 100644 (file)
@@ -31,6 +31,7 @@
 /* Private own data */
 static struct ubi_device *ubi;
 static char buffer[80];
+static int ubi_initialized;
 
 struct selected_dev {
        char dev_name[32];      /* NAND/OneNAND etc */
@@ -428,6 +429,8 @@ static int ubi_dev_scan(struct mtd_info *info, char *ubidev)
                return err;
        }
 
+       ubi_initialized = 1;
+
        return 0;
 }
 
@@ -463,6 +466,14 @@ static int do_ubi(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
                /* todo: get dev number for NAND... */
                ubi_dev.nr = 0;
 
+               /*
+                * Call ubi_exit() before re-initializing the UBI subsystem
+                */
+               if (ubi_initialized) {
+                       ubi_exit();
+                       del_mtd_partitions(ubi_dev.mtd_info);
+               }
+
                /*
                 * Check for nand|onenand selection
                 */
index 17cabb2ae9952f5be88c467d3feaf5c81f1a7b78..bdf75c98a1635cdf1a187210428ee1f1810230ea 100644 (file)
@@ -1059,6 +1059,7 @@ void __exit ubi_exit(void)
        misc_deregister(&ubi_ctrl_cdev);
        class_remove_file(ubi_class, &ubi_version);
        class_destroy(ubi_class);
+       mtd_devs = 0;
 }
 module_exit(ubi_exit);
 
index 295f2c0ffc895387b09eb7c3ec6fbcbfb29f1d41..095dfc1b206a0e56f90fef961c52ae9cbdc14a6a 100644 (file)
@@ -211,6 +211,7 @@ static inline long IS_ERR(const void *ptr)
 /* functions */
 extern int ubi_mtd_param_parse(const char *val, struct kernel_param *kp);
 extern int ubi_init(void);
+extern void ubi_exit(void);
 
 extern struct ubi_device *ubi_devices[];