X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=target%2Flinux%2Far71xx%2Ffiles%2Farch%2Fmips%2Fath79%2Fmach-rbsxtlite.c;h=d2edfc9c716d9cab1ba2a91e40969d25fdc4791f;hb=7bbf4117c6fe4b764d9d7c62fb2bcf6dd93bff2c;hp=129195dde67c9a996cac385a69ac5199164e4941;hpb=9db9072d6767e5910e01b8962171c89359ab7a14;p=openwrt%2Fstaging%2Fstintel.git diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-rbsxtlite.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-rbsxtlite.c index 129195dde6..d2edfc9c71 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/mach-rbsxtlite.c +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-rbsxtlite.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include @@ -109,6 +110,7 @@ static struct gpio_led rbsxtlite_leds_gpio[] __initdata = { { .name = "rb:green:power", .gpio = SXTLITE_GPIO_LED_POWER, + .default_state = LEDS_GPIO_DEFSTATE_KEEP, }, }; @@ -162,6 +164,7 @@ static void rbsxtlite_nand_select_chip(int chip_no) ndelay(500); } +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0) static struct nand_ecclayout rbsxtlite_nand_ecclayout = { .eccbytes = 6, .eccpos = { 8, 9, 10, 13, 14, 15 }, @@ -169,16 +172,72 @@ static struct nand_ecclayout rbsxtlite_nand_ecclayout = { .oobfree = { { 0, 4 }, { 6, 2 }, { 11, 2 }, { 4, 1 } } }; +#else + +static int rbsxtlite_ooblayout_ecc(struct mtd_info *mtd, int section, + struct mtd_oob_region *oobregion) +{ + switch (section) { + case 0: + oobregion->offset = 8; + oobregion->length = 3; + return 0; + case 1: + oobregion->offset = 13; + oobregion->length = 3; + return 0; + default: + return -ERANGE; + } +} + +static int rbsxtlite_ooblayout_free(struct mtd_info *mtd, int section, + struct mtd_oob_region *oobregion) +{ + switch (section) { + case 0: + oobregion->offset = 0; + oobregion->length = 4; + return 0; + case 1: + oobregion->offset = 4; + oobregion->length = 1; + return 0; + case 2: + oobregion->offset = 6; + oobregion->length = 2; + return 0; + case 3: + oobregion->offset = 11; + oobregion->length = 2; + return 0; + default: + return -ERANGE; + } +} + +static const struct mtd_ooblayout_ops rbsxtlite_nand_ecclayout_ops = { + .ecc = rbsxtlite_ooblayout_ecc, + .free = rbsxtlite_ooblayout_free, +}; +#endif /* < 4.6 */ + static int rbsxtlite_nand_scan_fixup(struct mtd_info *mtd) { +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0) struct nand_chip *chip = mtd->priv; +#endif if (mtd->writesize == 512) { /* * Use the OLD Yaffs-1 OOB layout, otherwise RouterBoot * will not be able to find the kernel that we load. */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0) chip->ecc.layout = &rbsxtlite_nand_ecclayout; +#else + mtd_set_ooblayout(mtd, &rbsxtlite_nand_ecclayout_ops); +#endif } return 0; @@ -230,9 +289,9 @@ static void __init rbsxtlite_setup(void) } -MIPS_MACHINE(ATH79_MACH_RB_SXTLITE2ND, "sxt2n", "Mikrotik RouterBOARD SXT Lite2", +MIPS_MACHINE(ATH79_MACH_RB_SXTLITE2ND, "sxt2n", "MikroTik RouterBOARD SXT Lite2", rbsxtlite_setup); -MIPS_MACHINE(ATH79_MACH_RB_SXTLITE5ND, "sxt5n", "Mikrotik RouterBOARD SXT Lite5", +MIPS_MACHINE(ATH79_MACH_RB_SXTLITE5ND, "sxt5n", "MikroTik RouterBOARD SXT Lite5", rbsxtlite_setup);