remove empty directories
[openwrt.git] / target / linux / generic / files / drivers / mtd / mtdsplit_uimage.c
index 5737065..7dad63c 100644 (file)
@@ -230,24 +230,31 @@ static struct mtd_part_parser uimage_generic_parser = {
 };
 
 #define FW_MAGIC_WNR2000V3     0x32303033
+#define FW_MAGIC_WNR2000V4     0x32303034
+#define FW_MAGIC_WNR2200       0x32323030
 #define FW_MAGIC_WNR612V2      0x32303631
 #define FW_MAGIC_WNDR3700      0x33373030
 #define FW_MAGIC_WNDR3700V2    0x33373031
 
 static bool uimage_verify_wndr3700(struct uimage_header *header)
 {
+       uint8_t expected_type = IH_TYPE_FILESYSTEM;
        switch be32_to_cpu(header->ih_magic) {
        case FW_MAGIC_WNR612V2:
        case FW_MAGIC_WNR2000V3:
+       case FW_MAGIC_WNR2200:
        case FW_MAGIC_WNDR3700:
        case FW_MAGIC_WNDR3700V2:
                break;
+       case FW_MAGIC_WNR2000V4:
+               expected_type = IH_TYPE_KERNEL;
+               break;
        default:
                return false;
        }
 
        if (header->ih_os != IH_OS_LINUX ||
-           header->ih_type != IH_TYPE_FILESYSTEM)
+           header->ih_type != expected_type)
                return false;
 
        return true;
@@ -269,23 +276,12 @@ static struct mtd_part_parser uimage_netgear_parser = {
        .type = MTD_PARSER_TYPE_FIRMWARE,
 };
 
-static int mtdsplit_uimage_init(void)
+static int __init mtdsplit_uimage_init(void)
 {
-       int ret;
-
-       ret = register_mtd_parser(&uimage_generic_parser);
-       if (ret)
-               return ret;
-
-       ret = register_mtd_parser(&uimage_netgear_parser);
-       if (ret)
-               goto err_unregister_generic;
+       register_mtd_parser(&uimage_generic_parser);
+       register_mtd_parser(&uimage_netgear_parser);
 
        return 0;
-
-err_unregister_generic:
-       deregister_mtd_parser(&uimage_generic_parser);
-       return ret;
 }
 
-module_init(mtdsplit_uimage_init);
\ No newline at end of file
+module_init(mtdsplit_uimage_init);