Merge git://git.infradead.org/mtd-2.6
[pandora-kernel.git] / drivers / mtd / nand / nand_bcm_umi.h
index 7cec2cd..198b304 100644 (file)
@@ -167,18 +167,27 @@ static inline void nand_bcm_umi_bch_read_oobEcc(uint32_t pageSize,
        int numToRead = 16;     /* There are 16 bytes per sector in the OOB */
 
        /* ECC is already paused when this function is called */
+       if (pageSize != NAND_DATA_ACCESS_SIZE) {
+               /* skip BI */
+#if defined(__KERNEL__) && !defined(STANDALONE)
+               *oobp++ = REG_NAND_DATA8;
+#else
+               REG_NAND_DATA8;
+#endif
+               numToRead--;
+       }
 
-       if (pageSize == NAND_DATA_ACCESS_SIZE) {
-               while (numToRead > numEccBytes) {
-                       /* skip free oob region */
+       while (numToRead > numEccBytes) {
+               /* skip free oob region */
 #if defined(__KERNEL__) && !defined(STANDALONE)
-                       *oobp++ = REG_NAND_DATA8;
+               *oobp++ = REG_NAND_DATA8;
 #else
-                       REG_NAND_DATA8;
+               REG_NAND_DATA8;
 #endif
-                       numToRead--;
-               }
+               numToRead--;
+       }
 
+       if (pageSize == NAND_DATA_ACCESS_SIZE) {
                /* read ECC bytes before BI */
                nand_bcm_umi_bch_resume_read_ecc_calc();
 
@@ -190,6 +199,7 @@ static inline void nand_bcm_umi_bch_read_oobEcc(uint32_t pageSize,
 #else
                        eccCalc[eccPos++] = REG_NAND_DATA8;
 #endif
+                       numToRead--;
                }
 
                nand_bcm_umi_bch_pause_read_ecc_calc();
@@ -204,49 +214,18 @@ static inline void nand_bcm_umi_bch_read_oobEcc(uint32_t pageSize,
                        numToRead--;
                }
 
-               /* read ECC bytes */
-               nand_bcm_umi_bch_resume_read_ecc_calc();
-               while (numToRead) {
-#if defined(__KERNEL__) && !defined(STANDALONE)
-                       *oobp = REG_NAND_DATA8;
-                       eccCalc[eccPos++] = *oobp;
-                       oobp++;
-#else
-                       eccCalc[eccPos++] = REG_NAND_DATA8;
-#endif
-                       numToRead--;
-               }
-       } else {
-               /* skip BI */
+       }
+       /* read ECC bytes */
+       nand_bcm_umi_bch_resume_read_ecc_calc();
+       while (numToRead) {
 #if defined(__KERNEL__) && !defined(STANDALONE)
-               *oobp++ = REG_NAND_DATA8;
+               *oobp = REG_NAND_DATA8;
+               eccCalc[eccPos++] = *oobp;
+               oobp++;
 #else
-               REG_NAND_DATA8;
+               eccCalc[eccPos++] = REG_NAND_DATA8;
 #endif
                numToRead--;
-
-               while (numToRead > numEccBytes) {
-                       /* skip free oob region */
-#if defined(__KERNEL__) && !defined(STANDALONE)
-                       *oobp++ = REG_NAND_DATA8;
-#else
-                       REG_NAND_DATA8;
-#endif
-                       numToRead--;
-               }
-
-               /* read ECC bytes */
-               nand_bcm_umi_bch_resume_read_ecc_calc();
-               while (numToRead) {
-#if defined(__KERNEL__) && !defined(STANDALONE)
-                       *oobp = REG_NAND_DATA8;
-                       eccCalc[eccPos++] = *oobp;
-                       oobp++;
-#else
-                       eccCalc[eccPos++] = REG_NAND_DATA8;
-#endif
-                       numToRead--;
-               }
        }
 }