Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 83533ab2 authored by Johan Rudholm's avatar Johan Rudholm Committed by Ulf Hansson
Browse files

mmc: core: always check status after reset



Always check if the card is alive after a successful reset. This allows
us to remove mmc_hw_reset_check(), leaving mmc_hw_reset() as the only
card reset interface.

Signed-off-by: default avatarJohan Rudholm <johanru@axis.com>
Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent 25185f3f
Loading
Loading
Loading
Loading
+7 −11
Original line number Diff line number Diff line
@@ -2342,20 +2342,16 @@ static int mmc_test_hw_reset(struct mmc_test_card *test)
	struct mmc_host *host = card->host;
	int err;

	err = mmc_hw_reset_check(host);
	if (!mmc_card_mmc(card) || !mmc_can_reset(card))
		return RESULT_UNSUP_CARD;

	err = mmc_hw_reset(host);
	if (!err)
		return RESULT_OK;
	else if (err == -EOPNOTSUPP)
		return RESULT_UNSUP_HOST;

	if (err == -ENOSYS)
	return RESULT_FAIL;

	if (err != -EOPNOTSUPP)
		return err;

	if (!mmc_can_reset(card))
		return RESULT_UNSUP_CARD;

	return RESULT_UNSUP_HOST;
}

static const struct mmc_test_case mmc_test_cases[] = {
+5 −19
Original line number Diff line number Diff line
@@ -2286,9 +2286,10 @@ int mmc_can_reset(struct mmc_card *card)
}
EXPORT_SYMBOL(mmc_can_reset);

static int mmc_do_hw_reset(struct mmc_host *host, int check)
int mmc_hw_reset(struct mmc_host *host)
{
	struct mmc_card *card = host->card;
	u32 status;

	if (!(host->caps & MMC_CAP_HW_RESET) || !host->ops->hw_reset)
		return -EOPNOTSUPP;
@@ -2305,14 +2306,10 @@ static int mmc_do_hw_reset(struct mmc_host *host, int check)
	host->ops->hw_reset(host);

	/* If the reset has happened, then a status command will fail */
	if (check) {
		u32 status;

	if (!mmc_send_status(card, &status)) {
		mmc_host_clk_release(host);
		return -ENOSYS;
	}
	}

	/* Set initial state and call mmc_set_ios */
	mmc_set_initial_state(host);
@@ -2321,19 +2318,8 @@ static int mmc_do_hw_reset(struct mmc_host *host, int check)

	return host->bus_ops->power_restore(host);
}

int mmc_hw_reset(struct mmc_host *host)
{
	return mmc_do_hw_reset(host, 0);
}
EXPORT_SYMBOL(mmc_hw_reset);

int mmc_hw_reset_check(struct mmc_host *host)
{
	return mmc_do_hw_reset(host, 1);
}
EXPORT_SYMBOL(mmc_hw_reset_check);

static int mmc_rescan_try_freq(struct mmc_host *host, unsigned freq)
{
	host->f_init = freq;
+0 −1
Original line number Diff line number Diff line
@@ -182,7 +182,6 @@ extern int mmc_set_blocklen(struct mmc_card *card, unsigned int blocklen);
extern int mmc_set_blockcount(struct mmc_card *card, unsigned int blockcount,
			      bool is_rel_write);
extern int mmc_hw_reset(struct mmc_host *host);
extern int mmc_hw_reset_check(struct mmc_host *host);
extern int mmc_can_reset(struct mmc_card *card);

extern void mmc_set_data_timeout(struct mmc_data *, const struct mmc_card *);