]> err.no Git - linux-2.6/commitdiff
[MTD] OneNAND: Fix unlock all status error
authorKyungmin Park <kyungmin.park@samsung.com>
Thu, 11 Jan 2007 20:45:34 +0000 (05:45 +0900)
committerKyungmin Park <kyungmin.park@samsung.com>
Thu, 18 Jan 2007 01:59:16 +0000 (10:59 +0900)
We have to set ONENAND_REG_START_BLOCK_ADDRESS to avoid status error

Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
drivers/mtd/onenand/onenand_base.c

index 2da6bb26353e22c6966c0835cf596cb227ac1883..d0f31183d58f324a4b44dbf596d0312bb16dd91f 100644 (file)
@@ -1491,6 +1491,8 @@ static int onenand_unlock_all(struct mtd_info *mtd)
        struct onenand_chip *this = mtd->priv;
 
        if (this->options & ONENAND_HAS_UNLOCK_ALL) {
+               /* Set start block address */
+               this->write_word(0, this->base + ONENAND_REG_START_BLOCK_ADDRESS);
                /* Write unlock command */
                this->command(mtd, ONENAND_CMD_UNLOCK_ALL, 0, 0);
 
@@ -1504,12 +1506,9 @@ static int onenand_unlock_all(struct mtd_info *mtd)
 
                /* Workaround for all block unlock in DDP */
                if (this->device_id & ONENAND_DEVICE_IS_DDP) {
-                       loff_t ofs;
-                       size_t len;
-
                        /* 1st block on another chip */
-                       ofs = this->chipsize >> 1;
-                       len = 1 << this->erase_shift;
+                       loff_t ofs = this->chipsize >> 1;
+                       size_t len = mtd->erasesize;
 
                        onenand_unlock(mtd, ofs, len);
                }