aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mtd/nand/docg4.c
diff options
context:
space:
mode:
authorJosh Wu <josh.wu@atmel.com>2012-06-25 06:07:45 -0400
committerDavid Woodhouse <David.Woodhouse@intel.com>2012-07-06 13:17:07 -0400
commitfdbad98dff8007f2b8bee6698b5d25ebba0471c9 (patch)
tree823d68f687ad90108ec6a4c53d17cb3bde1b3950 /drivers/mtd/nand/docg4.c
parent3dfe41a4c705223c66373968327407e11c2fb1a1 (diff)
mtd: nand: teach write_page and write_page_raw return an error code
There is an implemention of hardware ECC write page function which may return an error indication. For instance, using Atmel HW PMECC to write one page into a nand flash, the hardware engine will compute the BCH ecc code for this page. so we need read a the status register to theck whether the ecc code is generated. But we cannot assume the status register always can be ready, for example, incorrect hardware configuration or hardware issue, in such case we need write_page() to return a error code. Since the definition of 'write_page' function in struct nand_ecc_ctrl is 'void'. So this patch will: 1. add return 'int' value for 'write_page' function. 2. to be consitent, add return 'int' value for 'write_page_raw' fuctions too. 3. add code to test the return value, and if negative, indicate an error happend when write page with ECC. 4. fix the compile warning in all impacted nand flash driver. Note: I couldn't compile-test all of these easily, as some had ARCH dependencies. Signed-off-by: Josh Wu <josh.wu@atmel.com> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Diffstat (limited to 'drivers/mtd/nand/docg4.c')
-rw-r--r--drivers/mtd/nand/docg4.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/mtd/nand/docg4.c b/drivers/mtd/nand/docg4.c
index a225e49a5623..0f2ffd7b6c82 100644
--- a/drivers/mtd/nand/docg4.c
+++ b/drivers/mtd/nand/docg4.c
@@ -898,7 +898,7 @@ static void docg4_erase_block(struct mtd_info *mtd, int page)
898 write_nop(docptr); 898 write_nop(docptr);
899} 899}
900 900
901static void write_page(struct mtd_info *mtd, struct nand_chip *nand, 901static int write_page(struct mtd_info *mtd, struct nand_chip *nand,
902 const uint8_t *buf, bool use_ecc) 902 const uint8_t *buf, bool use_ecc)
903{ 903{
904 struct docg4_priv *doc = nand->priv; 904 struct docg4_priv *doc = nand->priv;
@@ -950,15 +950,17 @@ static void write_page(struct mtd_info *mtd, struct nand_chip *nand,
950 write_nop(docptr); 950 write_nop(docptr);
951 writew(0, docptr + DOC_DATAEND); 951 writew(0, docptr + DOC_DATAEND);
952 write_nop(docptr); 952 write_nop(docptr);
953
954 return 0;
953} 955}
954 956
955static void docg4_write_page_raw(struct mtd_info *mtd, struct nand_chip *nand, 957static int docg4_write_page_raw(struct mtd_info *mtd, struct nand_chip *nand,
956 const uint8_t *buf, int oob_required) 958 const uint8_t *buf, int oob_required)
957{ 959{
958 return write_page(mtd, nand, buf, false); 960 return write_page(mtd, nand, buf, false);
959} 961}
960 962
961static void docg4_write_page(struct mtd_info *mtd, struct nand_chip *nand, 963static int docg4_write_page(struct mtd_info *mtd, struct nand_chip *nand,
962 const uint8_t *buf, int oob_required) 964 const uint8_t *buf, int oob_required)
963{ 965{
964 return write_page(mtd, nand, buf, true); 966 return write_page(mtd, nand, buf, true);