dfu: Migrate to Kconfig
[oweals/u-boot.git] / cmd / ubi.c
index 753a4dba3d782965dedb421cfbdab0d62b1a128a..b726f3f3bb699b6190fbbd4bc381ffa83d83d888 100644 (file)
--- a/cmd/ubi.c
+++ b/cmd/ubi.c
@@ -21,7 +21,7 @@
 #include <linux/mtd/partitions.h>
 #include <linux/err.h>
 #include <ubi_uboot.h>
-#include <asm/errno.h>
+#include <linux/errno.h>
 #include <jffs2/load_kernel.h>
 
 #undef ubi_msg
@@ -443,14 +443,8 @@ static int ubi_dev_scan(struct mtd_info *info, char *ubidev,
        return 0;
 }
 
-int ubi_part(char *part_name, const char *vid_header_offset)
+int ubi_detach(void)
 {
-       int err = 0;
-       char mtd_dev[16];
-       struct mtd_device *dev;
-       struct part_info *part;
-       u8 pnum;
-
        if (mtdparts_init() != 0) {
                printf("Error initializing mtdparts!\n");
                return 1;
@@ -466,17 +460,28 @@ int ubi_part(char *part_name, const char *vid_header_offset)
                cmd_ubifs_umount();
 #endif
 
-       /* 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);
+               ubi_initialized = 0;
        }
 
+       ubi_dev.selected = 0;
+       return 0;
+}
+
+int ubi_part(char *part_name, const char *vid_header_offset)
+{
+       int err = 0;
+       char mtd_dev[16];
+       struct mtd_device *dev;
+       struct part_info *part;
+       u8 pnum;
+
+       ubi_detach();
        /*
         * Search the mtd device number where this partition
         * is located
@@ -517,6 +522,15 @@ static int do_ubi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        if (argc < 2)
                return CMD_RET_USAGE;
 
+
+       if (strcmp(argv[1], "detach") == 0) {
+               if (argc < 2)
+                       return CMD_RET_USAGE;
+
+               return ubi_detach();
+       }
+
+
        if (strcmp(argv[1], "part") == 0) {
                const char *vid_header_offset = NULL;
 
@@ -661,7 +675,9 @@ static int do_ubi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 U_BOOT_CMD(
        ubi, 6, 1, do_ubi,
        "ubi commands",
-       "part [part] [offset]\n"
+       "detach"
+               " - detach ubi from a mtd partition\n"
+       "ubi part [part] [offset]\n"
                " - Show or set current partition (with optional VID"
                " header offset)\n"
        "ubi info [l[ayout]]"