mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-22 14:41:27 +00:00
mtd: nand: sharpsl: switch to mtd_ooblayout_ops
Implementing the mtd_ooblayout_ops interface is the new way of exposing ECC/OOB layout to MTD users. Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
This commit is contained in:
parent
7cf9c19a83
commit
e5b2d30e42
3 changed files with 47 additions and 12 deletions
|
@ -763,14 +763,49 @@ static struct nand_bbt_descr spitz_nand_bbt = {
|
||||||
.pattern = scan_ff_pattern
|
.pattern = scan_ff_pattern
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct nand_ecclayout akita_oobinfo = {
|
static int akita_ooblayout_ecc(struct mtd_info *mtd, int section,
|
||||||
.oobfree = { {0x08, 0x09} },
|
struct mtd_oob_region *oobregion)
|
||||||
.eccbytes = 24,
|
{
|
||||||
.eccpos = {
|
if (section > 12)
|
||||||
0x05, 0x01, 0x02, 0x03, 0x06, 0x07, 0x15, 0x11,
|
return -ERANGE;
|
||||||
0x12, 0x13, 0x16, 0x17, 0x25, 0x21, 0x22, 0x23,
|
|
||||||
0x26, 0x27, 0x35, 0x31, 0x32, 0x33, 0x36, 0x37,
|
switch (section % 3) {
|
||||||
},
|
case 0:
|
||||||
|
oobregion->offset = 5;
|
||||||
|
oobregion->length = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
oobregion->offset = 1;
|
||||||
|
oobregion->length = 3;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
oobregion->offset = 6;
|
||||||
|
oobregion->length = 2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
oobregion->offset += (section / 3) * 0x10;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int akita_ooblayout_free(struct mtd_info *mtd, int section,
|
||||||
|
struct mtd_oob_region *oobregion)
|
||||||
|
{
|
||||||
|
if (section)
|
||||||
|
return -ERANGE;
|
||||||
|
|
||||||
|
oobregion->offset = 8;
|
||||||
|
oobregion->length = 9;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct mtd_ooblayout_ops akita_ooblayout_ops = {
|
||||||
|
.ecc = akita_ooblayout_ecc,
|
||||||
|
.free = akita_ooblayout_free,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct sharpsl_nand_platform_data spitz_nand_pdata = {
|
static struct sharpsl_nand_platform_data spitz_nand_pdata = {
|
||||||
|
@ -804,11 +839,11 @@ static void __init spitz_nand_init(void)
|
||||||
} else if (machine_is_akita()) {
|
} else if (machine_is_akita()) {
|
||||||
spitz_nand_partitions[1].size = 58 * 1024 * 1024;
|
spitz_nand_partitions[1].size = 58 * 1024 * 1024;
|
||||||
spitz_nand_bbt.len = 1;
|
spitz_nand_bbt.len = 1;
|
||||||
spitz_nand_pdata.ecc_layout = &akita_oobinfo;
|
spitz_nand_pdata.ecc_layout = &akita_ooblayout_ops;
|
||||||
} else if (machine_is_borzoi()) {
|
} else if (machine_is_borzoi()) {
|
||||||
spitz_nand_partitions[1].size = 32 * 1024 * 1024;
|
spitz_nand_partitions[1].size = 32 * 1024 * 1024;
|
||||||
spitz_nand_bbt.len = 1;
|
spitz_nand_bbt.len = 1;
|
||||||
spitz_nand_pdata.ecc_layout = &akita_oobinfo;
|
spitz_nand_pdata.ecc_layout = &akita_ooblayout_ops;
|
||||||
}
|
}
|
||||||
|
|
||||||
platform_device_register(&spitz_nand_device);
|
platform_device_register(&spitz_nand_device);
|
||||||
|
|
|
@ -148,6 +148,7 @@ static int sharpsl_nand_probe(struct platform_device *pdev)
|
||||||
/* Link the private data with the MTD structure */
|
/* Link the private data with the MTD structure */
|
||||||
mtd = nand_to_mtd(this);
|
mtd = nand_to_mtd(this);
|
||||||
mtd->dev.parent = &pdev->dev;
|
mtd->dev.parent = &pdev->dev;
|
||||||
|
mtd_set_ooblayout(mtd, data->ecc_layout);
|
||||||
|
|
||||||
platform_set_drvdata(pdev, sharpsl);
|
platform_set_drvdata(pdev, sharpsl);
|
||||||
|
|
||||||
|
@ -170,7 +171,6 @@ static int sharpsl_nand_probe(struct platform_device *pdev)
|
||||||
this->ecc.bytes = 3;
|
this->ecc.bytes = 3;
|
||||||
this->ecc.strength = 1;
|
this->ecc.strength = 1;
|
||||||
this->badblock_pattern = data->badblock_pattern;
|
this->badblock_pattern = data->badblock_pattern;
|
||||||
this->ecc.layout = data->ecc_layout;
|
|
||||||
this->ecc.hwctl = sharpsl_nand_enable_hwecc;
|
this->ecc.hwctl = sharpsl_nand_enable_hwecc;
|
||||||
this->ecc.calculate = sharpsl_nand_calculate_ecc;
|
this->ecc.calculate = sharpsl_nand_calculate_ecc;
|
||||||
this->ecc.correct = nand_correct_data;
|
this->ecc.correct = nand_correct_data;
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
struct sharpsl_nand_platform_data {
|
struct sharpsl_nand_platform_data {
|
||||||
struct nand_bbt_descr *badblock_pattern;
|
struct nand_bbt_descr *badblock_pattern;
|
||||||
struct nand_ecclayout *ecc_layout;
|
const struct mtd_ooblayout_ops *ecc_layout;
|
||||||
struct mtd_partition *partitions;
|
struct mtd_partition *partitions;
|
||||||
unsigned int nr_partitions;
|
unsigned int nr_partitions;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue