[linux-sunxi] [PATCH 21/23] staging: mt29f_spinand: switch to mtd_ooblayout_ops
From: Boris Brezillon <hidden>
Date: 2015-12-08 08:44:09
Also in:
linux-mips, linux-samsung-soc, lkml
Hi Julian, On Tue, 8 Dec 2015 10:59:53 +1100 Julian Calaby [off-list ref] wrote:
Hi Boris, On Tue, Dec 8, 2015 at 9:26 AM, Boris Brezillon [off-list ref] wrote:quoted
Signed-off-by: Boris Brezillon <redacted> --- drivers/staging/mt29f_spinand/mt29f_spinand.c | 44 ++++++++++++++++----------- 1 file changed, 26 insertions(+), 18 deletions(-)diff --git a/drivers/staging/mt29f_spinand/mt29f_spinand.c b/drivers/staging/mt29f_spinand/mt29f_spinand.c index cb9d5ab..967d50a 100644 --- a/drivers/staging/mt29f_spinand/mt29f_spinand.c +++ b/drivers/staging/mt29f_spinand/mt29f_spinand.c@@ -42,23 +42,29 @@ static inline struct spinand_state *mtd_to_state(struct mtd_info *mtd) static int enable_hw_ecc; static int enable_read_hw_ecc; -static struct nand_ecclayout spinand_oob_64 = { - .eccbytes = 24, - .eccpos = { - 1, 2, 3, 4, 5, 6, - 17, 18, 19, 20, 21, 22, - 33, 34, 35, 36, 37, 38, - 49, 50, 51, 52, 53, 54, }, - .oobfree = { - {.offset = 8, - .length = 8}, - {.offset = 24, - .length = 8}, - {.offset = 40, - .length = 8}, - {.offset = 56, - .length = 8}, - } +static int spinand_oob_64_eccpos(struct mtd_info *mtd, int eccbyte) +{ + if (eccbyte > 23) + return -ERANGE; + + return ((eccbyte / 6) * 16) + 1;Are you sure this is correct? My reading of this is that we'd get 1 for eccbytes 0 through 5. Would ((eccbyte / 6) * 16) + (eccbyte % 6) + 1 be more correct?
Absolutely. I'll fix that. Thanks, Boris -- Boris Brezillon, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com