diff --git a/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c b/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c index 525ad8218b..7a9ec8acde 100644 --- a/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c +++ b/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c @@ -407,6 +407,43 @@ static struct mtd_part_parser uimage_fonfxc_parser = { .parse_fn = mtdsplit_uimage_parse_fonfxc, }; +/************************************************** + * SGE (T&W) Shenzhen Gongjin Electronics + **************************************************/ + +#define SGE_PAD_LEN 96 + +static ssize_t uimage_find_sge(u_char *buf, size_t len, int *extralen) +{ + if (uimage_verify_default(buf, len, extralen) < 0) + return -EINVAL; + + *extralen = SGE_PAD_LEN; + + return 0; +} + +static int +mtdsplit_uimage_parse_sge(struct mtd_info *master, + const struct mtd_partition **pparts, + struct mtd_part_parser_data *data) +{ + return __mtdsplit_parse_uimage(master, pparts, data, + uimage_find_sge); +} + +static const struct of_device_id mtdsplit_uimage_sge_of_match_table[] = { + { .compatible = "sge,uimage" }, + {}, +}; + +static struct mtd_part_parser uimage_sge_parser = { + .owner = THIS_MODULE, + .name = "sge-fw", + .of_match_table = mtdsplit_uimage_sge_of_match_table, + .parse_fn = mtdsplit_uimage_parse_sge, +}; + /************************************************** * OKLI (OpenWrt Kernel Loader Image) **************************************************/ @@ -470,6 +507,7 @@ static int __init mtdsplit_uimage_init(void) register_mtd_parser(&uimage_netgear_parser); register_mtd_parser(&uimage_edimax_parser); register_mtd_parser(&uimage_fonfxc_parser); + register_mtd_parser(&uimage_sge_parser); register_mtd_parser(&uimage_okli_parser); return 0;