[PATCH] mtd onenand driver: fix unlock problem in DDP
authorKyungmin Park <kyungmin.park@samsung.com>
Fri, 16 Dec 2005 02:17:29 +0000 (11:17 +0900)
committerLinus Torvalds <torvalds@g5.osdl.org>
Mon, 19 Dec 2005 00:28:23 +0000 (16:28 -0800)
drivers/mtd/onenand/onenand_base.c

index 33d6f5c2e053c6a955c324140765b390861a993e..d57afbaaedc45c9fe1a53f4fa83472af5db927d4 100644 (file)
@@ -1296,6 +1296,12 @@ static int onenand_unlock(struct mtd_info *mtd, loff_t ofs, size_t len)
 
        /* Block lock scheme */
        for (block = start; block < end; block++) {
+               /* Set block address */
+               value = onenand_block_address(this, block);
+               this->write_word(value, this->base + ONENAND_REG_START_ADDRESS1);
+               /* Select DataRAM for DDP */
+               value = onenand_bufferram_address(this, block);
+               this->write_word(value, this->base + ONENAND_REG_START_ADDRESS2);
                /* Set start block address */
                this->write_word(block, this->base + ONENAND_REG_START_BLOCK_ADDRESS);
                /* Write unlock command */
@@ -1309,10 +1315,6 @@ static int onenand_unlock(struct mtd_info *mtd, loff_t ofs, size_t len)
                    & ONENAND_CTRL_ONGO)
                        continue;
 
-               /* Set block address for read block status */
-               value = onenand_block_address(this, block);
-               this->write_word(value, this->base + ONENAND_REG_START_ADDRESS1);
-
                /* Check lock status */
                status = this->read_word(this->base + ONENAND_REG_WP_STATUS);
                if (!(status & ONENAND_WP_US))