diff options
author | Hauke Mehrtens <hauke@hauke-m.de> | 2017-10-03 18:02:59 +0200 |
---|---|---|
committer | Hauke Mehrtens <hauke@hauke-m.de> | 2017-10-11 22:32:39 +0200 |
commit | 7bbf4117c6fe4b764d9d7c62fb2bcf6dd93bff2c (patch) | |
tree | e42a4555f9845f78fb9baf7102da8d3d45adfacc /target/linux/ar71xx/files/arch/mips/ath79/mach-c60.c | |
parent | 2909a4b78e2bce5f6b9c35361866d5e9477a1bdc (diff) | |
download | upstream-7bbf4117c6fe4b764d9d7c62fb2bcf6dd93bff2c.tar.gz upstream-7bbf4117c6fe4b764d9d7c62fb2bcf6dd93bff2c.tar.bz2 upstream-7bbf4117c6fe4b764d9d7c62fb2bcf6dd93bff2c.zip |
ar71xx: Add kernel 4.9 support
This add support for kernel 4.9 to the ar71xx target.
It was compile tested with the generic, NAND and mikrotik subtarget.
Multiple members of the community tested it on their boards and did not
report any major problem so far.
Especially the NAND part received some changes to adapt to the new
kernel APIs. The serial driver hack used for the Arduino Yun was not
ported because the kernel changed there a lot.
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Diffstat (limited to 'target/linux/ar71xx/files/arch/mips/ath79/mach-c60.c')
-rw-r--r-- | target/linux/ar71xx/files/arch/mips/ath79/mach-c60.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-c60.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-c60.c index e78e311d2e..7b01af515b 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/mach-c60.c +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-c60.c @@ -22,6 +22,7 @@ #include <linux/platform/ar934x_nfc.h> #include <linux/ar8216_platform.h> #include <linux/ath9k_platform.h> +#include <linux/version.h> #include <asm/mach-ath79/ar71xx_regs.h> @@ -119,6 +120,7 @@ static struct mdio_board_info c60_mdio0_info[] = { }, }; +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0) static struct nand_ecclayout c60_nand_ecclayout = { .eccbytes = 7, .eccpos = { 4, 8, 9, 10, 13, 14, 15 }, @@ -126,13 +128,67 @@ static struct nand_ecclayout c60_nand_ecclayout = { .oobfree = { { 0, 3 }, { 6, 2 }, { 11, 2 }, } }; +#else + +static int c60_ooblayout_ecc(struct mtd_info *mtd, int section, + struct mtd_oob_region *oobregion) +{ + switch (section) { + case 0: + oobregion->offset = 4; + oobregion->length = 1; + return 0; + case 1: + oobregion->offset = 8; + oobregion->length = 3; + return 0; + case 2: + oobregion->offset = 13; + oobregion->length = 3; + return 0; + default: + return -ERANGE; + } +} + +static int c60_ooblayout_free(struct mtd_info *mtd, int section, + struct mtd_oob_region *oobregion) +{ + switch (section) { + case 0: + oobregion->offset = 0; + oobregion->length = 3; + return 0; + case 1: + oobregion->offset = 6; + oobregion->length = 2; + return 0; + case 2: + oobregion->offset = 11; + oobregion->length = 2; + return 0; + default: + return -ERANGE; + } +} + +static const struct mtd_ooblayout_ops c60_nand_ecclayout_ops = { + .ecc = c60_ooblayout_ecc, + .free = c60_ooblayout_free, +}; +#endif /* < 4.6 */ + static int c60_nand_scan_fixup(struct mtd_info *mtd) { struct nand_chip *chip = mtd->priv; chip->ecc.size = 512; chip->ecc.strength = 4; +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0) chip->ecc.layout = &c60_nand_ecclayout; +#else + mtd_set_ooblayout(mtd, &c60_nand_ecclayout_ops); +#endif return 0; } |