|
@@ -8,7 +8,7 @@ Signed-off-by: Daniel Golle <[email protected]>
|
|
|
|
|
|
--- a/drivers/mtd/ubi/build.c
|
|
|
+++ b/drivers/mtd/ubi/build.c
|
|
|
-@@ -1171,6 +1171,49 @@ static struct mtd_info * __init open_mtd
|
|
|
+@@ -1171,6 +1171,54 @@ static struct mtd_info * __init open_mtd
|
|
|
return mtd;
|
|
|
}
|
|
|
|
|
@@ -20,45 +20,50 @@ Signed-off-by: Daniel Golle <[email protected]>
|
|
|
+{
|
|
|
+ int err;
|
|
|
+ struct mtd_info *mtd;
|
|
|
++ size_t len;
|
|
|
++ char magic[4];
|
|
|
+
|
|
|
+ /* try attaching mtd device named "ubi" or "data" */
|
|
|
+ mtd = open_mtd_device("ubi");
|
|
|
+ if (IS_ERR(mtd))
|
|
|
+ mtd = open_mtd_device("data");
|
|
|
+
|
|
|
-+ if (!IS_ERR(mtd)) {
|
|
|
-+ size_t len;
|
|
|
-+ char magic[4];
|
|
|
++ if (IS_ERR(mtd))
|
|
|
++ return;
|
|
|
++
|
|
|
++ /* check for a valid ubi magic if read from flash was successful */
|
|
|
++ err = mtd_read(mtd, 0, 4, &len, (void *) magic);
|
|
|
++ if (!err && len == 4 && strncmp(magic, "UBI#", 4)) {
|
|
|
++ pr_err("UBI error: no valid UBI magic found inside mtd%d\n", mtd->index);
|
|
|
++ goto cleanup;
|
|
|
++ }
|
|
|
+
|
|
|
-+ /* check for a valid ubi magic */
|
|
|
-+ err = mtd_read(mtd, 0, 4, &len, (void *) magic);
|
|
|
-+ if (!err && len == 4 && strncmp(magic, "UBI#", 4)) {
|
|
|
-+ pr_err("UBI error: no valid UBI magic found inside mtd%d\n", mtd->index);
|
|
|
-+ put_mtd_device(mtd);
|
|
|
-+ return;
|
|
|
-+ }
|
|
|
++ /* don't auto-add media types where UBI doesn't makes sense */
|
|
|
++ if (mtd->type != MTD_NANDFLASH &&
|
|
|
++ mtd->type != MTD_NORFLASH &&
|
|
|
++ mtd->type != MTD_DATAFLASH &&
|
|
|
++ mtd->type != MTD_MLCNANDFLASH)
|
|
|
++ goto cleanup;
|
|
|
+
|
|
|
-+ /* auto-add only media types where UBI makes sense */
|
|
|
-+ if (mtd->type == MTD_NANDFLASH ||
|
|
|
-+ mtd->type == MTD_NORFLASH ||
|
|
|
-+ mtd->type == MTD_DATAFLASH ||
|
|
|
-+ mtd->type == MTD_MLCNANDFLASH) {
|
|
|
-+ mutex_lock(&ubi_devices_mutex);
|
|
|
-+ pr_notice("UBI: auto-attach mtd%d\n", mtd->index);
|
|
|
-+ err = ubi_attach_mtd_dev(mtd, UBI_DEV_NUM_AUTO, 0, 0);
|
|
|
-+ mutex_unlock(&ubi_devices_mutex);
|
|
|
-+ if (err < 0) {
|
|
|
-+ pr_err("UBI error: cannot attach mtd%d\n", mtd->index);
|
|
|
-+ put_mtd_device(mtd);
|
|
|
-+ }
|
|
|
-+ }
|
|
|
++ mutex_lock(&ubi_devices_mutex);
|
|
|
++ pr_notice("UBI: auto-attach mtd%d\n", mtd->index);
|
|
|
++ err = ubi_attach_mtd_dev(mtd, UBI_DEV_NUM_AUTO, 0, 0);
|
|
|
++ mutex_unlock(&ubi_devices_mutex);
|
|
|
++ if (err < 0) {
|
|
|
++ pr_err("UBI error: cannot attach mtd%d\n", mtd->index);
|
|
|
++ goto cleanup;
|
|
|
+ }
|
|
|
++
|
|
|
++ return;
|
|
|
++
|
|
|
++cleanup:
|
|
|
++ put_mtd_device(mtd);
|
|
|
+}
|
|
|
+
|
|
|
static int __init ubi_init(void)
|
|
|
{
|
|
|
int err, i, k;
|
|
|
-@@ -1254,6 +1297,12 @@ static int __init ubi_init(void)
|
|
|
+@@ -1254,6 +1302,12 @@ static int __init ubi_init(void)
|
|
|
}
|
|
|
}
|
|
|
|