diff options
author | Thomas Gleixner <tglx@cruncher.tec.linutronix.de> | 2006-05-27 16:16:10 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@cruncher.tec.linutronix.de> | 2006-05-29 09:06:50 -0400 |
commit | 5bd34c091a044d130601370c370f84b1c59f1627 (patch) | |
tree | 8b08012a9a30186a8805d506f8438e2944f5f31b /drivers/mtd | |
parent | ff268fb8791cf18df536113355d7184007c269d9 (diff) |
[MTD] NAND Replace oobinfo by ecclayout
The nand_oobinfo structure is not fitting the newer error correction
demands anymore. Replace it by struct nand_ecclayout and fixup the users
all over the place. Keep the nand_oobinfo based ioctl for user space
compability reasons.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'drivers/mtd')
-rw-r--r-- | drivers/mtd/mtdchar.c | 26 | ||||
-rw-r--r-- | drivers/mtd/mtdconcat.c | 2 | ||||
-rw-r--r-- | drivers/mtd/mtdpart.c | 2 | ||||
-rw-r--r-- | drivers/mtd/nand/diskonchip.c | 5 | ||||
-rw-r--r-- | drivers/mtd/nand/nand_base.c | 52 | ||||
-rw-r--r-- | drivers/mtd/nand/ndfc.c | 2 | ||||
-rw-r--r-- | drivers/mtd/nand/rtc_from4.c | 5 | ||||
-rw-r--r-- | drivers/mtd/nand/s3c2410.c | 5 | ||||
-rw-r--r-- | drivers/mtd/nand/sharpsl.c | 5 | ||||
-rw-r--r-- | drivers/mtd/onenand/onenand_base.c | 14 |
10 files changed, 74 insertions, 44 deletions
diff --git a/drivers/mtd/mtdchar.c b/drivers/mtd/mtdchar.c index 608f7af679cb..e75ec5fe7760 100644 --- a/drivers/mtd/mtdchar.c +++ b/drivers/mtd/mtdchar.c | |||
@@ -512,14 +512,36 @@ static int mtd_ioctl(struct inode *inode, struct file *file, | |||
512 | break; | 512 | break; |
513 | } | 513 | } |
514 | 514 | ||
515 | /* Legacy interface */ | ||
515 | case MEMGETOOBSEL: | 516 | case MEMGETOOBSEL: |
516 | { | 517 | { |
517 | if (copy_to_user(argp, mtd->oobinfo, | 518 | struct nand_oobinfo oi; |
518 | sizeof(struct nand_oobinfo))) | 519 | |
520 | if (!mtd->ecclayout) | ||
521 | return -EOPNOTSUPP; | ||
522 | if (mtd->ecclayout->eccbytes > ARRAY_SIZE(oi.eccpos)) | ||
523 | return -EINVAL; | ||
524 | |||
525 | oi.useecc = MTD_NANDECC_AUTOPLACE; | ||
526 | memcpy(&oi.eccpos, mtd->ecclayout->eccpos, sizeof(oi.eccpos)); | ||
527 | memcpy(&oi.oobfree, mtd->ecclayout->oobfree, | ||
528 | sizeof(oi.oobfree)); | ||
529 | |||
530 | if (copy_to_user(argp, &oi, sizeof(struct nand_oobinfo))) | ||
519 | return -EFAULT; | 531 | return -EFAULT; |
520 | break; | 532 | break; |
521 | } | 533 | } |
522 | 534 | ||
535 | case ECCGETLAYOUT: | ||
536 | |||
537 | if (!mtd->ecclayout) | ||
538 | return -EOPNOTSUPP; | ||
539 | |||
540 | if (copy_to_user(argp, &mtd->ecclayout, | ||
541 | sizeof(struct nand_ecclayout))) | ||
542 | return -EFAULT; | ||
543 | break; | ||
544 | |||
523 | case MEMGETBADBLOCK: | 545 | case MEMGETBADBLOCK: |
524 | { | 546 | { |
525 | loff_t offs; | 547 | loff_t offs; |
diff --git a/drivers/mtd/mtdconcat.c b/drivers/mtd/mtdconcat.c index 699fce7770de..ec15abcdbdfa 100644 --- a/drivers/mtd/mtdconcat.c +++ b/drivers/mtd/mtdconcat.c | |||
@@ -766,7 +766,7 @@ struct mtd_info *mtd_concat_create(struct mtd_info *subdev[], /* subdevices to c | |||
766 | 766 | ||
767 | } | 767 | } |
768 | 768 | ||
769 | concat->mtd.oobinfo = subdev[0]->oobinfo; | 769 | concat->mtd.ecclayout = subdev[0]->ecclayout; |
770 | 770 | ||
771 | concat->num_subdev = num_devs; | 771 | concat->num_subdev = num_devs; |
772 | concat->mtd.name = name; | 772 | concat->mtd.name = name; |
diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c index b6b218952d49..6d7639b98eab 100644 --- a/drivers/mtd/mtdpart.c +++ b/drivers/mtd/mtdpart.c | |||
@@ -434,7 +434,7 @@ int add_mtd_partitions(struct mtd_info *master, | |||
434 | parts[i].name); | 434 | parts[i].name); |
435 | } | 435 | } |
436 | 436 | ||
437 | slave->mtd.oobinfo = master->oobinfo; | 437 | slave->mtd.ecclayout = master->ecclayout; |
438 | 438 | ||
439 | if(parts[i].mtdp) | 439 | if(parts[i].mtdp) |
440 | { /* store the object pointer (caller may or may not register it */ | 440 | { /* store the object pointer (caller may or may not register it */ |
diff --git a/drivers/mtd/nand/diskonchip.c b/drivers/mtd/nand/diskonchip.c index 82262a4a4208..463e12ced1b3 100644 --- a/drivers/mtd/nand/diskonchip.c +++ b/drivers/mtd/nand/diskonchip.c | |||
@@ -1058,8 +1058,7 @@ static int doc200x_correct_data(struct mtd_info *mtd, u_char *dat, | |||
1058 | * safer. The only problem with it is that any code that parses oobfree must | 1058 | * safer. The only problem with it is that any code that parses oobfree must |
1059 | * be able to handle out-of-order segments. | 1059 | * be able to handle out-of-order segments. |
1060 | */ | 1060 | */ |
1061 | static struct nand_oobinfo doc200x_oobinfo = { | 1061 | static struct nand_ecclayout doc200x_oobinfo = { |
1062 | .useecc = MTD_NANDECC_AUTOPLACE, | ||
1063 | .eccbytes = 6, | 1062 | .eccbytes = 6, |
1064 | .eccpos = {0, 1, 2, 3, 4, 5}, | 1063 | .eccpos = {0, 1, 2, 3, 4, 5}, |
1065 | .oobfree = {{8, 8}, {6, 2}} | 1064 | .oobfree = {{8, 8}, {6, 2}} |
@@ -1662,7 +1661,7 @@ static int __init doc_probe(unsigned long physadr) | |||
1662 | nand->ecc.calculate = doc200x_calculate_ecc; | 1661 | nand->ecc.calculate = doc200x_calculate_ecc; |
1663 | nand->ecc.correct = doc200x_correct_data; | 1662 | nand->ecc.correct = doc200x_correct_data; |
1664 | 1663 | ||
1665 | nand->autooob = &doc200x_oobinfo; | 1664 | nand->ecc.layout = &doc200x_oobinfo; |
1666 | nand->ecc.mode = NAND_ECC_HW_SYNDROME; | 1665 | nand->ecc.mode = NAND_ECC_HW_SYNDROME; |
1667 | nand->ecc.size = 512; | 1666 | nand->ecc.size = 512; |
1668 | nand->ecc.bytes = 6; | 1667 | nand->ecc.bytes = 6; |
diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c index 20f79fec73b5..e922b829c4be 100644 --- a/drivers/mtd/nand/nand_base.c +++ b/drivers/mtd/nand/nand_base.c | |||
@@ -52,28 +52,33 @@ | |||
52 | #endif | 52 | #endif |
53 | 53 | ||
54 | /* Define default oob placement schemes for large and small page devices */ | 54 | /* Define default oob placement schemes for large and small page devices */ |
55 | static struct nand_oobinfo nand_oob_8 = { | 55 | static struct nand_ecclayout nand_oob_8 = { |
56 | .useecc = MTD_NANDECC_AUTOPLACE, | ||
57 | .eccbytes = 3, | 56 | .eccbytes = 3, |
58 | .eccpos = {0, 1, 2}, | 57 | .eccpos = {0, 1, 2}, |
59 | .oobfree = {{3, 2}, {6, 2}} | 58 | .oobfree = { |
59 | {.offset = 3, | ||
60 | .length = 2}, | ||
61 | {.offset = 6, | ||
62 | .length = 2}} | ||
60 | }; | 63 | }; |
61 | 64 | ||
62 | static struct nand_oobinfo nand_oob_16 = { | 65 | static struct nand_ecclayout nand_oob_16 = { |
63 | .useecc = MTD_NANDECC_AUTOPLACE, | ||
64 | .eccbytes = 6, | 66 | .eccbytes = 6, |
65 | .eccpos = {0, 1, 2, 3, 6, 7}, | 67 | .eccpos = {0, 1, 2, 3, 6, 7}, |
66 | .oobfree = {{8, 8}} | 68 | .oobfree = { |
69 | {.offset = 8, | ||
70 | . length = 8}} | ||
67 | }; | 71 | }; |
68 | 72 | ||
69 | static struct nand_oobinfo nand_oob_64 = { | 73 | static struct nand_ecclayout nand_oob_64 = { |
70 | .useecc = MTD_NANDECC_AUTOPLACE, | ||
71 | .eccbytes = 24, | 74 | .eccbytes = 24, |
72 | .eccpos = { | 75 | .eccpos = { |
73 | 40, 41, 42, 43, 44, 45, 46, 47, | 76 | 40, 41, 42, 43, 44, 45, 46, 47, |
74 | 48, 49, 50, 51, 52, 53, 54, 55, | 77 | 48, 49, 50, 51, 52, 53, 54, 55, |
75 | 56, 57, 58, 59, 60, 61, 62, 63}, | 78 | 56, 57, 58, 59, 60, 61, 62, 63}, |
76 | .oobfree = {{2, 38}} | 79 | .oobfree = { |
80 | {.offset = 2, | ||
81 | .length = 38}} | ||
77 | }; | 82 | }; |
78 | 83 | ||
79 | /* This is used for padding purposes in nand_write_oob */ | 84 | /* This is used for padding purposes in nand_write_oob */ |
@@ -749,7 +754,7 @@ static int nand_read_page_swecc(struct mtd_info *mtd, struct nand_chip *chip, | |||
749 | uint8_t *p = buf; | 754 | uint8_t *p = buf; |
750 | uint8_t *ecc_calc = chip->buffers.ecccalc; | 755 | uint8_t *ecc_calc = chip->buffers.ecccalc; |
751 | uint8_t *ecc_code = chip->buffers.ecccode; | 756 | uint8_t *ecc_code = chip->buffers.ecccode; |
752 | int *eccpos = chip->autooob->eccpos; | 757 | int *eccpos = chip->ecc.layout->eccpos; |
753 | 758 | ||
754 | chip->read_buf(mtd, buf, mtd->writesize); | 759 | chip->read_buf(mtd, buf, mtd->writesize); |
755 | chip->read_buf(mtd, chip->oob_poi, mtd->oobsize); | 760 | chip->read_buf(mtd, chip->oob_poi, mtd->oobsize); |
@@ -795,7 +800,7 @@ static int nand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip, | |||
795 | uint8_t *p = buf; | 800 | uint8_t *p = buf; |
796 | uint8_t *ecc_calc = chip->buffers.ecccalc; | 801 | uint8_t *ecc_calc = chip->buffers.ecccalc; |
797 | uint8_t *ecc_code = chip->buffers.ecccode; | 802 | uint8_t *ecc_code = chip->buffers.ecccode; |
798 | int *eccpos = chip->autooob->eccpos; | 803 | int *eccpos = chip->ecc.layout->eccpos; |
799 | 804 | ||
800 | for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) { | 805 | for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) { |
801 | chip->ecc.hwctl(mtd, NAND_ECC_READ); | 806 | chip->ecc.hwctl(mtd, NAND_ECC_READ); |
@@ -1198,7 +1203,7 @@ static void nand_write_page_swecc(struct mtd_info *mtd, struct nand_chip *chip, | |||
1198 | int eccsteps = chip->ecc.steps; | 1203 | int eccsteps = chip->ecc.steps; |
1199 | uint8_t *ecc_calc = chip->buffers.ecccalc; | 1204 | uint8_t *ecc_calc = chip->buffers.ecccalc; |
1200 | const uint8_t *p = buf; | 1205 | const uint8_t *p = buf; |
1201 | int *eccpos = chip->autooob->eccpos; | 1206 | int *eccpos = chip->ecc.layout->eccpos; |
1202 | 1207 | ||
1203 | if (chip->ecc.mode != NAND_ECC_NONE) { | 1208 | if (chip->ecc.mode != NAND_ECC_NONE) { |
1204 | /* Software ecc calculation */ | 1209 | /* Software ecc calculation */ |
@@ -1227,7 +1232,7 @@ static void nand_write_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip, | |||
1227 | int eccsteps = chip->ecc.steps; | 1232 | int eccsteps = chip->ecc.steps; |
1228 | uint8_t *ecc_calc = chip->buffers.ecccalc; | 1233 | uint8_t *ecc_calc = chip->buffers.ecccalc; |
1229 | const uint8_t *p = buf; | 1234 | const uint8_t *p = buf; |
1230 | int *eccpos = chip->autooob->eccpos; | 1235 | int *eccpos = chip->ecc.layout->eccpos; |
1231 | 1236 | ||
1232 | for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) { | 1237 | for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) { |
1233 | chip->ecc.hwctl(mtd, NAND_ECC_WRITE); | 1238 | chip->ecc.hwctl(mtd, NAND_ECC_WRITE); |
@@ -2124,16 +2129,16 @@ int nand_scan(struct mtd_info *mtd, int maxchips) | |||
2124 | /* | 2129 | /* |
2125 | * If no default placement scheme is given, select an appropriate one | 2130 | * If no default placement scheme is given, select an appropriate one |
2126 | */ | 2131 | */ |
2127 | if (!chip->autooob) { | 2132 | if (!chip->ecc.layout) { |
2128 | switch (mtd->oobsize) { | 2133 | switch (mtd->oobsize) { |
2129 | case 8: | 2134 | case 8: |
2130 | chip->autooob = &nand_oob_8; | 2135 | chip->ecc.layout = &nand_oob_8; |
2131 | break; | 2136 | break; |
2132 | case 16: | 2137 | case 16: |
2133 | chip->autooob = &nand_oob_16; | 2138 | chip->ecc.layout = &nand_oob_16; |
2134 | break; | 2139 | break; |
2135 | case 64: | 2140 | case 64: |
2136 | chip->autooob = &nand_oob_64; | 2141 | chip->ecc.layout = &nand_oob_64; |
2137 | break; | 2142 | break; |
2138 | default: | 2143 | default: |
2139 | printk(KERN_WARNING "No oob scheme defined for " | 2144 | printk(KERN_WARNING "No oob scheme defined for " |
@@ -2198,6 +2203,15 @@ int nand_scan(struct mtd_info *mtd, int maxchips) | |||
2198 | } | 2203 | } |
2199 | 2204 | ||
2200 | /* | 2205 | /* |
2206 | * The number of bytes available for a client to place data into | ||
2207 | * the out of band area | ||
2208 | */ | ||
2209 | chip->ecc.layout->oobavail = 0; | ||
2210 | for (i = 0; chip->ecc.layout->oobfree[i].length; i++) | ||
2211 | chip->ecc.layout->oobavail += | ||
2212 | chip->ecc.layout->oobfree[i].length; | ||
2213 | |||
2214 | /* | ||
2201 | * Set the number of read / write steps for one page depending on ECC | 2215 | * Set the number of read / write steps for one page depending on ECC |
2202 | * mode | 2216 | * mode |
2203 | */ | 2217 | */ |
@@ -2236,8 +2250,8 @@ int nand_scan(struct mtd_info *mtd, int maxchips) | |||
2236 | mtd->block_isbad = nand_block_isbad; | 2250 | mtd->block_isbad = nand_block_isbad; |
2237 | mtd->block_markbad = nand_block_markbad; | 2251 | mtd->block_markbad = nand_block_markbad; |
2238 | 2252 | ||
2239 | /* and make the autooob the default one */ | 2253 | /* propagate ecc.layout to mtd_info */ |
2240 | mtd->oobinfo = chip->autooob; | 2254 | mtd->ecclayout = chip->ecc.layout; |
2241 | 2255 | ||
2242 | /* Check, if we should skip the bad block table scan */ | 2256 | /* Check, if we should skip the bad block table scan */ |
2243 | if (chip->options & NAND_SKIP_BBTSCAN) | 2257 | if (chip->options & NAND_SKIP_BBTSCAN) |
diff --git a/drivers/mtd/nand/ndfc.c b/drivers/mtd/nand/ndfc.c index 5790d630faed..551702ddcacb 100644 --- a/drivers/mtd/nand/ndfc.c +++ b/drivers/mtd/nand/ndfc.c | |||
@@ -168,7 +168,7 @@ static void ndfc_chip_init(struct ndfc_nand_mtd *mtd) | |||
168 | chip->ecc.mode = NAND_ECC_HW; | 168 | chip->ecc.mode = NAND_ECC_HW; |
169 | chip->ecc.size = 256; | 169 | chip->ecc.size = 256; |
170 | chip->ecc.bytes = 3; | 170 | chip->ecc.bytes = 3; |
171 | chip->autooob = mtd->pl_chip->oobinfo; | 171 | chip->ecclayout = mtd->pl_chip->ecclayout; |
172 | mtd->mtd.priv = chip; | 172 | mtd->mtd.priv = chip; |
173 | mtd->mtd.owner = THIS_MODULE; | 173 | mtd->mtd.owner = THIS_MODULE; |
174 | } | 174 | } |
diff --git a/drivers/mtd/nand/rtc_from4.c b/drivers/mtd/nand/rtc_from4.c index de6de91fbad9..f8c49645324d 100644 --- a/drivers/mtd/nand/rtc_from4.c +++ b/drivers/mtd/nand/rtc_from4.c | |||
@@ -142,8 +142,7 @@ static struct rs_control *rs_decoder; | |||
142 | /* | 142 | /* |
143 | * hardware specific Out Of Band information | 143 | * hardware specific Out Of Band information |
144 | */ | 144 | */ |
145 | static struct nand_oobinfo rtc_from4_nand_oobinfo = { | 145 | static struct nand_ecclayout rtc_from4_nand_oobinfo = { |
146 | .useecc = MTD_NANDECC_AUTOPLACE, | ||
147 | .eccbytes = 32, | 146 | .eccbytes = 32, |
148 | .eccpos = { | 147 | .eccpos = { |
149 | 0, 1, 2, 3, 4, 5, 6, 7, | 148 | 0, 1, 2, 3, 4, 5, 6, 7, |
@@ -574,7 +573,7 @@ static int __init rtc_from4_init(void) | |||
574 | /* return the status of extra status and ECC checks */ | 573 | /* return the status of extra status and ECC checks */ |
575 | this->errstat = rtc_from4_errstat; | 574 | this->errstat = rtc_from4_errstat; |
576 | /* set the nand_oobinfo to support FPGA H/W error detection */ | 575 | /* set the nand_oobinfo to support FPGA H/W error detection */ |
577 | this->autooob = &rtc_from4_nand_oobinfo; | 576 | this->ecc.layout = &rtc_from4_nand_oobinfo; |
578 | this->ecc.hwctl = rtc_from4_enable_hwecc; | 577 | this->ecc.hwctl = rtc_from4_enable_hwecc; |
579 | this->ecc.calculate = rtc_from4_calculate_ecc; | 578 | this->ecc.calculate = rtc_from4_calculate_ecc; |
580 | this->ecc.correct = rtc_from4_correct_data; | 579 | this->ecc.correct = rtc_from4_correct_data; |
diff --git a/drivers/mtd/nand/s3c2410.c b/drivers/mtd/nand/s3c2410.c index 215227d1a65c..8429793a6288 100644 --- a/drivers/mtd/nand/s3c2410.c +++ b/drivers/mtd/nand/s3c2410.c | |||
@@ -76,8 +76,7 @@ static int hardware_ecc = 0; | |||
76 | /* new oob placement block for use with hardware ecc generation | 76 | /* new oob placement block for use with hardware ecc generation |
77 | */ | 77 | */ |
78 | 78 | ||
79 | static struct nand_oobinfo nand_hw_eccoob = { | 79 | static struct nand_ecclayout nand_hw_eccoob = { |
80 | .useecc = MTD_NANDECC_AUTOPLACE, | ||
81 | .eccbytes = 3, | 80 | .eccbytes = 3, |
82 | .eccpos = {0, 1, 2}, | 81 | .eccpos = {0, 1, 2}, |
83 | .oobfree = {{8, 8}} | 82 | .oobfree = {{8, 8}} |
@@ -502,7 +501,7 @@ static void s3c2410_nand_init_chip(struct s3c2410_nand_info *info, | |||
502 | chip->ecc.mode = NAND_ECC_HW; | 501 | chip->ecc.mode = NAND_ECC_HW; |
503 | chip->ecc.size = 512; | 502 | chip->ecc.size = 512; |
504 | chip->ecc.bytes = 3; | 503 | chip->ecc.bytes = 3; |
505 | chip->autooob = &nand_hw_eccoob; | 504 | chip->ecc.layout = &nand_hw_eccoob; |
506 | 505 | ||
507 | if (info->is_s3c2440) { | 506 | if (info->is_s3c2440) { |
508 | chip->ecc.hwctl = s3c2440_nand_enable_hwecc; | 507 | chip->ecc.hwctl = s3c2440_nand_enable_hwecc; |
diff --git a/drivers/mtd/nand/sharpsl.c b/drivers/mtd/nand/sharpsl.c index 45a1da724bff..21743658d150 100644 --- a/drivers/mtd/nand/sharpsl.c +++ b/drivers/mtd/nand/sharpsl.c | |||
@@ -115,8 +115,7 @@ static struct nand_bbt_descr sharpsl_akita_bbt = { | |||
115 | .pattern = scan_ff_pattern | 115 | .pattern = scan_ff_pattern |
116 | }; | 116 | }; |
117 | 117 | ||
118 | static struct nand_oobinfo akita_oobinfo = { | 118 | static struct nand_ecclayout akita_oobinfo = { |
119 | .useecc = MTD_NANDECC_AUTOPLACE, | ||
120 | .eccbytes = 24, | 119 | .eccbytes = 24, |
121 | .eccpos = { | 120 | .eccpos = { |
122 | 0x5, 0x1, 0x2, 0x3, 0x6, 0x7, 0x15, 0x11, | 121 | 0x5, 0x1, 0x2, 0x3, 0x6, 0x7, 0x15, 0x11, |
@@ -202,7 +201,7 @@ static int __init sharpsl_nand_init(void) | |||
202 | this->badblock_pattern = &sharpsl_bbt; | 201 | this->badblock_pattern = &sharpsl_bbt; |
203 | if (machine_is_akita() || machine_is_borzoi()) { | 202 | if (machine_is_akita() || machine_is_borzoi()) { |
204 | this->badblock_pattern = &sharpsl_akita_bbt; | 203 | this->badblock_pattern = &sharpsl_akita_bbt; |
205 | this->autooob = &akita_oobinfo; | 204 | this->ecc.layout = &akita_oobinfo; |
206 | } | 205 | } |
207 | this->ecc.hwctl = sharpsl_nand_enable_hwecc; | 206 | this->ecc.hwctl = sharpsl_nand_enable_hwecc; |
208 | this->ecc.calculate = sharpsl_nand_calculate_ecc; | 207 | this->ecc.calculate = sharpsl_nand_calculate_ecc; |
diff --git a/drivers/mtd/onenand/onenand_base.c b/drivers/mtd/onenand/onenand_base.c index b24bfa6e202c..a0d3f011c0f2 100644 --- a/drivers/mtd/onenand/onenand_base.c +++ b/drivers/mtd/onenand/onenand_base.c | |||
@@ -23,8 +23,7 @@ | |||
23 | /** | 23 | /** |
24 | * onenand_oob_64 - oob info for large (2KB) page | 24 | * onenand_oob_64 - oob info for large (2KB) page |
25 | */ | 25 | */ |
26 | static struct nand_oobinfo onenand_oob_64 = { | 26 | static struct nand_ecclayout onenand_oob_64 = { |
27 | .useecc = MTD_NANDECC_AUTOPLACE, | ||
28 | .eccbytes = 20, | 27 | .eccbytes = 20, |
29 | .eccpos = { | 28 | .eccpos = { |
30 | 8, 9, 10, 11, 12, | 29 | 8, 9, 10, 11, 12, |
@@ -41,8 +40,7 @@ static struct nand_oobinfo onenand_oob_64 = { | |||
41 | /** | 40 | /** |
42 | * onenand_oob_32 - oob info for middle (1KB) page | 41 | * onenand_oob_32 - oob info for middle (1KB) page |
43 | */ | 42 | */ |
44 | static struct nand_oobinfo onenand_oob_32 = { | 43 | static struct nand_ecclayout onenand_oob_32 = { |
45 | .useecc = MTD_NANDECC_AUTOPLACE, | ||
46 | .eccbytes = 10, | 44 | .eccbytes = 10, |
47 | .eccpos = { | 45 | .eccpos = { |
48 | 8, 9, 10, 11, 12, | 46 | 8, 9, 10, 11, 12, |
@@ -1747,22 +1745,22 @@ int onenand_scan(struct mtd_info *mtd, int maxchips) | |||
1747 | 1745 | ||
1748 | switch (mtd->oobsize) { | 1746 | switch (mtd->oobsize) { |
1749 | case 64: | 1747 | case 64: |
1750 | this->autooob = &onenand_oob_64; | 1748 | this->ecclayout = &onenand_oob_64; |
1751 | break; | 1749 | break; |
1752 | 1750 | ||
1753 | case 32: | 1751 | case 32: |
1754 | this->autooob = &onenand_oob_32; | 1752 | this->ecclayout = &onenand_oob_32; |
1755 | break; | 1753 | break; |
1756 | 1754 | ||
1757 | default: | 1755 | default: |
1758 | printk(KERN_WARNING "No OOB scheme defined for oobsize %d\n", | 1756 | printk(KERN_WARNING "No OOB scheme defined for oobsize %d\n", |
1759 | mtd->oobsize); | 1757 | mtd->oobsize); |
1760 | /* To prevent kernel oops */ | 1758 | /* To prevent kernel oops */ |
1761 | this->autooob = &onenand_oob_32; | 1759 | this->ecclayout = &onenand_oob_32; |
1762 | break; | 1760 | break; |
1763 | } | 1761 | } |
1764 | 1762 | ||
1765 | mtd->oobinfo = this->autooob; | 1763 | mtd->ecclayout = this->ecclayout; |
1766 | 1764 | ||
1767 | /* Fill in remaining MTD driver data */ | 1765 | /* Fill in remaining MTD driver data */ |
1768 | mtd->type = MTD_NANDFLASH; | 1766 | mtd->type = MTD_NANDFLASH; |