Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 347206
b: refs/heads/master
c: b0bb690
h: refs/heads/master
v: v3
  • Loading branch information
Huang Shijie authored and Artem Bityutskiy committed Dec 3, 2012
1 parent 45256de commit abfaf2a
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 11 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 98a9e2450667e497246449f96eab06eb3fb4d24b
refs/heads/master: b0bb6903c8fca2d5ebef1f8ae63d420eb931bb1e
35 changes: 25 additions & 10 deletions trunk/drivers/mtd/nand/nand_base.c
Original file line number Diff line number Diff line change
Expand Up @@ -130,15 +130,12 @@ static int check_offs_len(struct mtd_info *mtd,
* nand_release_device - [GENERIC] release chip
* @mtd: MTD device structure
*
* Deselect, release chip lock and wake up anyone waiting on the device.
* Release chip lock and wake up anyone waiting on the device.
*/
static void nand_release_device(struct mtd_info *mtd)
{
struct nand_chip *chip = mtd->priv;

/* De-select the NAND device */
chip->select_chip(mtd, -1);

/* Release the controller and the chip */
spin_lock(&chip->controller->lock);
chip->controller->active = NULL;
Expand Down Expand Up @@ -333,8 +330,10 @@ static int nand_block_bad(struct mtd_info *mtd, loff_t ofs, int getchip)
i++;
} while (!res && i < 2 && (chip->bbt_options & NAND_BBT_SCAN2NDPAGE));

if (getchip)
if (getchip) {
chip->select_chip(mtd, -1);
nand_release_device(mtd);
}

return res;
}
Expand Down Expand Up @@ -952,6 +951,7 @@ int nand_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
ret = __nand_unlock(mtd, ofs, len, 0);

out:
chip->select_chip(mtd, -1);
nand_release_device(mtd);

return ret;
Expand Down Expand Up @@ -1016,6 +1016,7 @@ int nand_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
ret = __nand_unlock(mtd, ofs, len, 0x1);

out:
chip->select_chip(mtd, -1);
nand_release_device(mtd);

return ret;
Expand Down Expand Up @@ -1552,6 +1553,7 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
chip->select_chip(mtd, chipnr);
}
}
chip->select_chip(mtd, -1);

ops->retlen = ops->len - (size_t) readlen;
if (oob)
Expand Down Expand Up @@ -1806,6 +1808,7 @@ static int nand_do_read_oob(struct mtd_info *mtd, loff_t from,
chip->select_chip(mtd, chipnr);
}
}
chip->select_chip(mtd, -1);

ops->oobretlen = ops->ooblen - readlen;

Expand Down Expand Up @@ -2188,8 +2191,10 @@ static int nand_do_write_ops(struct mtd_info *mtd, loff_t to,
chip->select_chip(mtd, chipnr);

/* Check, if it is write protected */
if (nand_check_wp(mtd))
return -EIO;
if (nand_check_wp(mtd)) {
ret = -EIO;
goto err_out;
}

realpage = (int)(to >> chip->page_shift);
page = realpage & chip->pagemask;
Expand All @@ -2201,8 +2206,10 @@ static int nand_do_write_ops(struct mtd_info *mtd, loff_t to,
chip->pagebuf = -1;

/* Don't allow multipage oob writes with offset */
if (oob && ops->ooboffs && (ops->ooboffs + ops->ooblen > oobmaxlen))
return -EINVAL;
if (oob && ops->ooboffs && (ops->ooboffs + ops->ooblen > oobmaxlen)) {
ret = -EINVAL;
goto err_out;
}

while (1) {
int bytes = mtd->writesize;
Expand Down Expand Up @@ -2253,6 +2260,9 @@ static int nand_do_write_ops(struct mtd_info *mtd, loff_t to,
ops->retlen = ops->len - writelen;
if (unlikely(oob))
ops->oobretlen = ops->ooblen;

err_out:
chip->select_chip(mtd, -1);
return ret;
}

Expand Down Expand Up @@ -2379,8 +2389,10 @@ static int nand_do_write_oob(struct mtd_info *mtd, loff_t to,
chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);

/* Check, if it is write protected */
if (nand_check_wp(mtd))
if (nand_check_wp(mtd)) {
chip->select_chip(mtd, -1);
return -EROFS;
}

/* Invalidate the page cache, if we write to the cached page */
if (page == chip->pagebuf)
Expand All @@ -2393,6 +2405,8 @@ static int nand_do_write_oob(struct mtd_info *mtd, loff_t to,
else
status = chip->ecc.write_oob(mtd, chip, page & chip->pagemask);

chip->select_chip(mtd, -1);

if (status)
return status;

Expand Down Expand Up @@ -2625,6 +2639,7 @@ int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr,
ret = instr->state == MTD_ERASE_DONE ? 0 : -EIO;

/* Deselect and wake up anyone waiting on the device */
chip->select_chip(mtd, -1);
nand_release_device(mtd);

/* Do call back function */
Expand Down

0 comments on commit abfaf2a

Please sign in to comment.