|
@@ -626,8 +626,6 @@ static int omap_verify_buf(struct mtd_info *mtd, const u_char * buf, int len)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-#ifdef CONFIG_MTD_NAND_OMAP_HWECC
|
|
|
-
|
|
|
/**
|
|
|
* gen_true_ecc - This function will generate true ECC value
|
|
|
* @ecc_buf: buffer to store ecc code
|
|
@@ -847,8 +845,6 @@ static void omap_enable_hwecc(struct mtd_info *mtd, int mode)
|
|
|
gpmc_enable_hwecc(info->gpmc_cs, mode, dev_width, info->nand.ecc.size);
|
|
|
}
|
|
|
|
|
|
-#endif
|
|
|
-
|
|
|
/**
|
|
|
* omap_wait - wait until the command is done
|
|
|
* @mtd: MTD device structure
|
|
@@ -1038,17 +1034,17 @@ static int __devinit omap_nand_probe(struct platform_device *pdev)
|
|
|
|
|
|
info->nand.verify_buf = omap_verify_buf;
|
|
|
|
|
|
-#ifdef CONFIG_MTD_NAND_OMAP_HWECC
|
|
|
- info->nand.ecc.bytes = 3;
|
|
|
- info->nand.ecc.size = 512;
|
|
|
- info->nand.ecc.calculate = omap_calculate_ecc;
|
|
|
- info->nand.ecc.hwctl = omap_enable_hwecc;
|
|
|
- info->nand.ecc.correct = omap_correct_data;
|
|
|
- info->nand.ecc.mode = NAND_ECC_HW;
|
|
|
-
|
|
|
-#else
|
|
|
- info->nand.ecc.mode = NAND_ECC_SOFT;
|
|
|
-#endif
|
|
|
+ /* selsect the ecc type */
|
|
|
+ if (pdata->ecc_opt == OMAP_ECC_HAMMING_CODE_DEFAULT)
|
|
|
+ info->nand.ecc.mode = NAND_ECC_SOFT;
|
|
|
+ else if (pdata->ecc_opt == OMAP_ECC_HAMMING_CODE_HW) {
|
|
|
+ info->nand.ecc.bytes = 3;
|
|
|
+ info->nand.ecc.size = 512;
|
|
|
+ info->nand.ecc.calculate = omap_calculate_ecc;
|
|
|
+ info->nand.ecc.hwctl = omap_enable_hwecc;
|
|
|
+ info->nand.ecc.correct = omap_correct_data;
|
|
|
+ info->nand.ecc.mode = NAND_ECC_HW;
|
|
|
+ }
|
|
|
|
|
|
/* DIP switches on some boards change between 8 and 16 bit
|
|
|
* bus widths for flash. Try the other width if the first try fails.
|