@@ -1968,7 +1968,6 @@ static int mmc_do_erase(struct mmc_card *card, unsigned int from,
struct mmc_command cmd = {};
unsigned int qty = 0, busy_timeout = 0;
bool use_r1b_resp = false;
- unsigned long timeout;
int err;
mmc_retune_hold(card->host);
@@ -2059,43 +2058,8 @@ static int mmc_do_erase(struct mmc_card *card, unsigned int from,
goto out;
}
- if (mmc_host_is_spi(card->host))
- goto out;
-
- /*
- * In case of when R1B + MMC_CAP_WAIT_WHILE_BUSY is used, the polling
- * shall be avoided.
- */
- if ((card->host->caps & MMC_CAP_WAIT_WHILE_BUSY) && use_r1b_resp)
- goto out;
-
- timeout = jiffies + msecs_to_jiffies(busy_timeout);
- do {
- memset(&cmd, 0, sizeof(struct mmc_command));
- cmd.opcode = MMC_SEND_STATUS;
- cmd.arg = card->rca << 16;
- cmd.flags = MMC_RSP_R1 | MMC_CMD_AC;
- /* Do not retry else we can't see errors */
- err = mmc_wait_for_cmd(card->host, &cmd, 0);
- if (err || (cmd.resp[0] & 0xFFF9A000)) {
- pr_err("error %d requesting status %#x\n",
- err, cmd.resp[0]);
- err = -EIO;
- goto out;
- }
-
- /* Timeout if the device never becomes ready for data and
- * never leaves the program state.
- */
- if (time_after(jiffies, timeout)) {
- pr_err("%s: Card stuck in programming state! %s\n",
- mmc_hostname(card->host), __func__);
- err = -EIO;
- goto out;
- }
-
- } while (!(cmd.resp[0] & R1_READY_FOR_DATA) ||
- (R1_CURRENT_STATE(cmd.resp[0]) == R1_STATE_PRG));
+ err = mmc_poll_for_busy(card, busy_timeout, true, false,
+ use_r1b_resp, 0, false);
out:
mmc_retune_release(card->host);
return err;
Now mmc_poll_for_busy() could replace the whole bunch of code in mmc_do_erase() when polling for busy. Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com> --- drivers/mmc/core/core.c | 40 ++-------------------------------------- 1 file changed, 2 insertions(+), 38 deletions(-)