]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
mtd: add ECC info for nand_flash_dev{}
authorHuang Shijie <b32955@freescale.com>
Fri, 17 May 2013 03:17:31 +0000 (11:17 +0800)
committerHuang Shijie <b32955@freescale.com>
Tue, 5 Nov 2013 01:17:27 +0000 (09:17 +0800)
Add an instance of an anonymous struct to store the ECC info for full id
nand chips.
@ecc.strength_ds: ECC correctability from the datasheet.
@ecc.step_ds: ECC size required by the @ecc.strength_ds,

These two fields are all from the datasheet.

Also add the necessary macros to make the code simple and clean.

Signed-off-by: Huang Shijie <b32955@freescale.com>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
include/linux/mtd/nand.h

index 5a2605ae4645dc72e0d9ae1c8e30058550c4b59c..8d7f506a791f2c4d40bb6be023ac78b0b0e17443 100644 (file)
@@ -591,6 +591,11 @@ struct nand_chip {
        { .name = (nm), {{ .dev_id = (devid) }}, .chipsize = (chipsz), \
          .options = (opts) }
 
+#define NAND_ECC_INFO(_strength, _step)        \
+                       { .strength_ds = (_strength), .step_ds = (_step) }
+#define NAND_ECC_STRENGTH(type)                ((type)->ecc.strength_ds)
+#define NAND_ECC_STEP(type)            ((type)->ecc.step_ds)
+
 /**
  * struct nand_flash_dev - NAND Flash Device ID Structure
  * @name: a human-readable name of the NAND chip
@@ -608,6 +613,12 @@ struct nand_chip {
  * @options: stores various chip bit options
  * @id_len: The valid length of the @id.
  * @oobsize: OOB size
+ * @ecc.strength_ds: The ECC correctability from the datasheet, same as the
+ *                   @ecc_strength_ds in nand_chip{}.
+ * @ecc.step_ds: The ECC step required by the @ecc.strength_ds, same as the
+ *               @ecc_step_ds in nand_chip{}, also from the datasheet.
+ *               For example, the "4bit ECC for each 512Byte" can be set with
+ *               NAND_ECC_INFO(4, 512).
  */
 struct nand_flash_dev {
        char *name;
@@ -624,6 +635,10 @@ struct nand_flash_dev {
        unsigned int options;
        uint16_t id_len;
        uint16_t oobsize;
+       struct {
+               uint16_t strength_ds;
+               uint16_t step_ds;
+       } ecc;
 };
 
 /**