FROMGIT: mmc: sdhci: Tidy sdhci_request() a bit

In preparation for further changes, tidy sdhci_request() a bit.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Tested-by: Baolin Wang <baolin.wang7@gmail.com>
Link: https://lore.kernel.org/r/20200412090349.1607-5-adrian.hunter@intel.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Bug: 156552982
(cherry picked from commit c0d4429316b099b9fd0ea821f5e67276b041476b
 https://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc.git next)
Signed-off-by: Chunyan Zhang <zhang.lyra@gmail.com>
Change-Id: I55e868b61d26d64ba9284e5cb7ee8d3bbc4adab1
This commit is contained in:
Adrian Hunter 2020-04-12 12:03:48 +03:00 • committed by Greg Kroah-Hartman
commit 7343e424d2

View file

@ -1444,6 +1444,17 @@ static void sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd)
sdhci_writew(host, SDHCI_MAKE_CMD(cmd->opcode, flags), SDHCI_COMMAND);
}
static bool sdhci_present_error(struct sdhci_host *host,
struct mmc_command *cmd, bool present)
{
if (!present || host->flags & SDHCI_DEVICE_DEAD) {
cmd->error = -ENOMEDIUM;
return true;
}
return false;
}
static void sdhci_read_rsp_136(struct sdhci_host *host, struct mmc_command *cmd)
{
int i, reg;
@ -1815,11 +1826,10 @@ EXPORT_SYMBOL_GPL(sdhci_set_power);
void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq)
{
struct sdhci_host *host;
int present;
struct sdhci_host *host = mmc_priv(mmc);
struct mmc_command *cmd;
unsigned long flags;
host = mmc_priv(mmc);
bool present;
/* Firstly check card presence */
present = mmc->ops->get_cd(mmc);
@ -1839,16 +1849,20 @@ void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq)
}
}
if (!present || host->flags & SDHCI_DEVICE_DEAD) {
mrq->cmd->error = -ENOMEDIUM;
sdhci_finish_mrq(host, mrq);
} else {
if (sdhci_manual_cmd23(host, mrq))
sdhci_send_command(host, mrq->sbc);
else
sdhci_send_command(host, mrq->cmd);
}
if (sdhci_present_error(host, mrq->cmd, present))
goto out_finish;
cmd = sdhci_manual_cmd23(host, mrq) ? mrq->sbc : mrq->cmd;
sdhci_send_command(host, cmd);
spin_unlock_irqrestore(&host->lock, flags);
return;
out_finish:
sdhci_finish_mrq(host, mrq);
spin_unlock_irqrestore(&host->lock, flags);
}
EXPORT_SYMBOL_GPL(sdhci_request);