diff options
-rw-r--r-- | drivers/mtd/chips/cfi_cmdset_0001.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/mtd/chips/cfi_cmdset_0001.c b/drivers/mtd/chips/cfi_cmdset_0001.c index 324ff82a3cd9..5f1b472137a0 100644 --- a/drivers/mtd/chips/cfi_cmdset_0001.c +++ b/drivers/mtd/chips/cfi_cmdset_0001.c | |||
@@ -1149,7 +1149,7 @@ static int inval_cache_and_wait_for_operation( | |||
1149 | struct cfi_private *cfi = map->fldrv_priv; | 1149 | struct cfi_private *cfi = map->fldrv_priv; |
1150 | map_word status, status_OK = CMD(0x80); | 1150 | map_word status, status_OK = CMD(0x80); |
1151 | int chip_state = chip->state; | 1151 | int chip_state = chip->state; |
1152 | unsigned int timeo, sleep_time; | 1152 | unsigned int timeo, sleep_time, reset_timeo; |
1153 | 1153 | ||
1154 | spin_unlock(chip->mutex); | 1154 | spin_unlock(chip->mutex); |
1155 | if (inval_len) | 1155 | if (inval_len) |
@@ -1160,6 +1160,7 @@ static int inval_cache_and_wait_for_operation( | |||
1160 | timeo = chip_op_time * 8; | 1160 | timeo = chip_op_time * 8; |
1161 | if (!timeo) | 1161 | if (!timeo) |
1162 | timeo = 500000; | 1162 | timeo = 500000; |
1163 | reset_timeo = timeo; | ||
1163 | sleep_time = chip_op_time / 2; | 1164 | sleep_time = chip_op_time / 2; |
1164 | 1165 | ||
1165 | for (;;) { | 1166 | for (;;) { |
@@ -1201,6 +1202,12 @@ static int inval_cache_and_wait_for_operation( | |||
1201 | remove_wait_queue(&chip->wq, &wait); | 1202 | remove_wait_queue(&chip->wq, &wait); |
1202 | spin_lock(chip->mutex); | 1203 | spin_lock(chip->mutex); |
1203 | } | 1204 | } |
1205 | if (chip->erase_suspended || chip->write_suspended) { | ||
1206 | /* Suspend has occured while sleep: reset timeout */ | ||
1207 | timeo = reset_timeo; | ||
1208 | chip->erase_suspended = 0; | ||
1209 | chip->write_suspended = 0; | ||
1210 | } | ||
1204 | } | 1211 | } |
1205 | 1212 | ||
1206 | /* Done and happy. */ | 1213 | /* Done and happy. */ |