diff options
Diffstat (limited to 'drivers/mtd/chips/cfi_cmdset_0001.c')
-rw-r--r-- | drivers/mtd/chips/cfi_cmdset_0001.c | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/drivers/mtd/chips/cfi_cmdset_0001.c b/drivers/mtd/chips/cfi_cmdset_0001.c index 09cb7c8d93b4..e1e122f2f929 100644 --- a/drivers/mtd/chips/cfi_cmdset_0001.c +++ b/drivers/mtd/chips/cfi_cmdset_0001.c | |||
@@ -812,12 +812,9 @@ static int chip_ready (struct map_info *map, struct flchip *chip, unsigned long | |||
812 | break; | 812 | break; |
813 | 813 | ||
814 | if (time_after(jiffies, timeo)) { | 814 | if (time_after(jiffies, timeo)) { |
815 | /* Urgh. Resume and pretend we weren't here. */ | 815 | /* Urgh. Resume and pretend we weren't here. |
816 | map_write(map, CMD(0xd0), adr); | 816 | * Make sure we're in 'read status' mode if it had finished */ |
817 | /* Make sure we're in 'read status' mode if it had finished */ | 817 | put_chip(map, chip, adr); |
818 | map_write(map, CMD(0x70), adr); | ||
819 | chip->state = FL_ERASING; | ||
820 | chip->oldstate = FL_READY; | ||
821 | printk(KERN_ERR "%s: Chip not ready after erase " | 818 | printk(KERN_ERR "%s: Chip not ready after erase " |
822 | "suspended: status = 0x%lx\n", map->name, status.x[0]); | 819 | "suspended: status = 0x%lx\n", map->name, status.x[0]); |
823 | return -EIO; | 820 | return -EIO; |
@@ -997,7 +994,6 @@ static void put_chip(struct map_info *map, struct flchip *chip, unsigned long ad | |||
997 | 994 | ||
998 | switch(chip->oldstate) { | 995 | switch(chip->oldstate) { |
999 | case FL_ERASING: | 996 | case FL_ERASING: |
1000 | chip->state = chip->oldstate; | ||
1001 | /* What if one interleaved chip has finished and the | 997 | /* What if one interleaved chip has finished and the |
1002 | other hasn't? The old code would leave the finished | 998 | other hasn't? The old code would leave the finished |
1003 | one in READY mode. That's bad, and caused -EROFS | 999 | one in READY mode. That's bad, and caused -EROFS |