This patch removes card_busy_detect() and use mmc_poll_for_busy() instead. Signed-off-by: Shawn Lin <shawn.lin@xxxxxxxxxxxxxx> --- Changes in v2: None drivers/mmc/core/block.c | 48 +++++++----------------------------------------- 1 file changed, 7 insertions(+), 41 deletions(-) diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c index f22baa1..24976b1 100644 --- a/drivers/mmc/core/block.c +++ b/drivers/mmc/core/block.c @@ -949,46 +949,9 @@ static inline bool mmc_blk_in_tran_state(u32 status) (R1_CURRENT_STATE(status) == R1_STATE_TRAN); } -static int card_busy_detect(struct mmc_card *card, unsigned int timeout_ms, - struct request *req, u32 *resp_errs) +static inline bool mmc_blk_in_busy_state(u32 status) { - unsigned long timeout = jiffies + msecs_to_jiffies(timeout_ms); - int err = 0; - u32 status; - - do { - bool done = time_after(jiffies, timeout); - - err = __mmc_send_status(card, &status, 5); - if (err) { - pr_err("%s: error %d requesting status\n", - req->rq_disk->disk_name, err); - return err; - } - - /* Accumulate any response error bits seen */ - if (resp_errs) - *resp_errs |= status; - - /* - * Timeout if the device never becomes ready for data and never - * leaves the program state. - */ - if (done) { - pr_err("%s: Card stuck in wrong state! %s %s status: %#x\n", - mmc_hostname(card->host), - req->rq_disk->disk_name, __func__, status); - return -ETIMEDOUT; - } - - /* - * Some cards mishandle the status bits, - * so make sure to check both the busy - * indication and the card state. - */ - } while (!mmc_blk_in_tran_state(status)); - - return err; + return !(mmc_blk_in_tran_state(status)); } static int mmc_blk_reset(struct mmc_blk_data *md, struct mmc_host *host, @@ -1636,7 +1599,9 @@ static int mmc_blk_fix_state(struct mmc_card *card, struct request *req) mmc_blk_send_stop(card, timeout); - err = card_busy_detect(card, timeout, req, NULL); + err = mmc_poll_for_busy(card, timeout, true, false, false, NULL, + &mmc_blk_in_busy_state, false); + mmc_retune_release(card->host); @@ -1860,7 +1825,8 @@ static int mmc_blk_card_busy(struct mmc_card *card, struct request *req) if (mmc_host_is_spi(card->host) || rq_data_dir(req) == READ) return 0; - err = card_busy_detect(card, MMC_BLK_TIMEOUT_MS, req, &status); + err = mmc_poll_for_busy(card, MMC_BLK_TIMEOUT_MS, true, false, false, + &status, &mmc_blk_in_busy_state, false); /* * Do not assume data transferred correctly if there are any error bits -- 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html