Loading arch/arm/mach-pxa/spitz.c +45 −10 Original line number Diff line number Diff line Loading @@ -763,14 +763,49 @@ static struct nand_bbt_descr spitz_nand_bbt = { .pattern = scan_ff_pattern }; static struct nand_ecclayout akita_oobinfo = { .oobfree = { {0x08, 0x09} }, .eccbytes = 24, .eccpos = { 0x05, 0x01, 0x02, 0x03, 0x06, 0x07, 0x15, 0x11, 0x12, 0x13, 0x16, 0x17, 0x25, 0x21, 0x22, 0x23, 0x26, 0x27, 0x35, 0x31, 0x32, 0x33, 0x36, 0x37, }, static int akita_ooblayout_ecc(struct mtd_info *mtd, int section, struct mtd_oob_region *oobregion) { if (section > 12) return -ERANGE; 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 = { Loading Loading @@ -804,11 +839,11 @@ static void __init spitz_nand_init(void) } else if (machine_is_akita()) { spitz_nand_partitions[1].size = 58 * 1024 * 1024; 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()) { spitz_nand_partitions[1].size = 32 * 1024 * 1024; 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); Loading drivers/mtd/nand/sharpsl.c +1 −1 Original line number Diff line number Diff line Loading @@ -148,6 +148,7 @@ static int sharpsl_nand_probe(struct platform_device *pdev) /* Link the private data with the MTD structure */ mtd = nand_to_mtd(this); mtd->dev.parent = &pdev->dev; mtd_set_ooblayout(mtd, data->ecc_layout); platform_set_drvdata(pdev, sharpsl); Loading @@ -170,7 +171,6 @@ static int sharpsl_nand_probe(struct platform_device *pdev) this->ecc.bytes = 3; this->ecc.strength = 1; this->badblock_pattern = data->badblock_pattern; this->ecc.layout = data->ecc_layout; this->ecc.hwctl = sharpsl_nand_enable_hwecc; this->ecc.calculate = sharpsl_nand_calculate_ecc; this->ecc.correct = nand_correct_data; Loading include/linux/mtd/sharpsl.h +1 −1 Original line number Diff line number Diff line Loading @@ -14,7 +14,7 @@ struct sharpsl_nand_platform_data { struct nand_bbt_descr *badblock_pattern; struct nand_ecclayout *ecc_layout; const struct mtd_ooblayout_ops *ecc_layout; struct mtd_partition *partitions; unsigned int nr_partitions; }; Loading
arch/arm/mach-pxa/spitz.c +45 −10 Original line number Diff line number Diff line Loading @@ -763,14 +763,49 @@ static struct nand_bbt_descr spitz_nand_bbt = { .pattern = scan_ff_pattern }; static struct nand_ecclayout akita_oobinfo = { .oobfree = { {0x08, 0x09} }, .eccbytes = 24, .eccpos = { 0x05, 0x01, 0x02, 0x03, 0x06, 0x07, 0x15, 0x11, 0x12, 0x13, 0x16, 0x17, 0x25, 0x21, 0x22, 0x23, 0x26, 0x27, 0x35, 0x31, 0x32, 0x33, 0x36, 0x37, }, static int akita_ooblayout_ecc(struct mtd_info *mtd, int section, struct mtd_oob_region *oobregion) { if (section > 12) return -ERANGE; 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 = { Loading Loading @@ -804,11 +839,11 @@ static void __init spitz_nand_init(void) } else if (machine_is_akita()) { spitz_nand_partitions[1].size = 58 * 1024 * 1024; 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()) { spitz_nand_partitions[1].size = 32 * 1024 * 1024; 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); Loading
drivers/mtd/nand/sharpsl.c +1 −1 Original line number Diff line number Diff line Loading @@ -148,6 +148,7 @@ static int sharpsl_nand_probe(struct platform_device *pdev) /* Link the private data with the MTD structure */ mtd = nand_to_mtd(this); mtd->dev.parent = &pdev->dev; mtd_set_ooblayout(mtd, data->ecc_layout); platform_set_drvdata(pdev, sharpsl); Loading @@ -170,7 +171,6 @@ static int sharpsl_nand_probe(struct platform_device *pdev) this->ecc.bytes = 3; this->ecc.strength = 1; this->badblock_pattern = data->badblock_pattern; this->ecc.layout = data->ecc_layout; this->ecc.hwctl = sharpsl_nand_enable_hwecc; this->ecc.calculate = sharpsl_nand_calculate_ecc; this->ecc.correct = nand_correct_data; Loading
include/linux/mtd/sharpsl.h +1 −1 Original line number Diff line number Diff line Loading @@ -14,7 +14,7 @@ struct sharpsl_nand_platform_data { struct nand_bbt_descr *badblock_pattern; struct nand_ecclayout *ecc_layout; const struct mtd_ooblayout_ops *ecc_layout; struct mtd_partition *partitions; unsigned int nr_partitions; };