summaryrefslogtreecommitdiffstats
path: root/drivers/nor
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2012-07-31 12:09:18 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2012-07-31 15:51:51 +0200
commite401f1dad2a06d47d20f5138e27e8c7634ab9641 (patch)
tree989c756427830d85b2a0f2b70b6db3d9f1965a2d /drivers/nor
parent066fba5736fe2a67736a80e12cd3518f931ff3ec (diff)
downloadbarebox-e401f1dad2a06d47d20f5138e27e8c7634ab9641.tar.gz
barebox-e401f1dad2a06d47d20f5138e27e8c7634ab9641.tar.xz
nor m25p80: refactor chip erase
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/nor')
-rw-r--r--drivers/nor/m25p80.c25
1 files changed, 12 insertions, 13 deletions
diff --git a/drivers/nor/m25p80.c b/drivers/nor/m25p80.c
index 13ce130c12..0f3bcd179c 100644
--- a/drivers/nor/m25p80.c
+++ b/drivers/nor/m25p80.c
@@ -210,9 +210,10 @@ static ssize_t m25p80_erase(struct cdev *cdev, size_t count, loff_t offset)
/* whole-chip erase? */
if (len == flash->size) {
-
if (erase_chip(flash))
return -EIO;
+ return 0;
+ }
/* REVISIT in some cases we could speed up erasing large regions
* by using OPCODE_SE instead of OPCODE_BE_4K. We may have set up
@@ -220,18 +221,16 @@ static ssize_t m25p80_erase(struct cdev *cdev, size_t count, loff_t offset)
*/
/* "sector"-at-a-time erase */
- } else {
- while (len) {
- if (ctrlc())
- return -EINTR;
- if (erase_sector(flash, addr))
- return -EIO;
-
- if (len <= flash->erasesize)
- break;
- addr += flash->erasesize;
- len -= flash->erasesize;
- }
+ while (len) {
+ if (ctrlc())
+ return -EINTR;
+ if (erase_sector(flash, addr))
+ return -EIO;
+
+ if (len <= flash->erasesize)
+ break;
+ addr += flash->erasesize;
+ len -= flash->erasesize;
}
return 0;