Commit e0a5640a authored by Adrian Hunter's avatar Adrian Hunter Committed by Ulf Hansson

mmc: sdhci: Simplify sdhci_finish_command() by clearing host->cmd at the start

sdhci_finish_command() is going to set host->cmd to NULL. Simplify the
code by using a local variable to hold host->cmd and set host->cmd to
NULL at the start.
Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent 64ed8dd4
...@@ -1054,21 +1054,24 @@ EXPORT_SYMBOL_GPL(sdhci_send_command); ...@@ -1054,21 +1054,24 @@ EXPORT_SYMBOL_GPL(sdhci_send_command);
static void sdhci_finish_command(struct sdhci_host *host) static void sdhci_finish_command(struct sdhci_host *host)
{ {
struct mmc_command *cmd = host->cmd;
int i; int i;
if (host->cmd->flags & MMC_RSP_PRESENT) { host->cmd = NULL;
if (host->cmd->flags & MMC_RSP_136) {
if (cmd->flags & MMC_RSP_PRESENT) {
if (cmd->flags & MMC_RSP_136) {
/* CRC is stripped so we need to do some shifting. */ /* CRC is stripped so we need to do some shifting. */
for (i = 0;i < 4;i++) { for (i = 0;i < 4;i++) {
host->cmd->resp[i] = sdhci_readl(host, cmd->resp[i] = sdhci_readl(host,
SDHCI_RESPONSE + (3-i)*4) << 8; SDHCI_RESPONSE + (3-i)*4) << 8;
if (i != 3) if (i != 3)
host->cmd->resp[i] |= cmd->resp[i] |=
sdhci_readb(host, sdhci_readb(host,
SDHCI_RESPONSE + (3-i)*4-1); SDHCI_RESPONSE + (3-i)*4-1);
} }
} else { } else {
host->cmd->resp[0] = sdhci_readl(host, SDHCI_RESPONSE); cmd->resp[0] = sdhci_readl(host, SDHCI_RESPONSE);
} }
} }
...@@ -1082,21 +1085,19 @@ static void sdhci_finish_command(struct sdhci_host *host) ...@@ -1082,21 +1085,19 @@ static void sdhci_finish_command(struct sdhci_host *host)
* feature so there might be some problems with older * feature so there might be some problems with older
* controllers. * controllers.
*/ */
if (host->cmd->flags & MMC_RSP_BUSY) { if (cmd->flags & MMC_RSP_BUSY) {
if (host->cmd->data) { if (cmd->data) {
DBG("Cannot wait for busy signal when also doing a data transfer"); DBG("Cannot wait for busy signal when also doing a data transfer");
} else if (!(host->quirks & SDHCI_QUIRK_NO_BUSY_IRQ) && } else if (!(host->quirks & SDHCI_QUIRK_NO_BUSY_IRQ) &&
!host->busy_handle) { !host->busy_handle) {
/* Mark that command complete before busy is ended */ /* Mark that command complete before busy is ended */
host->busy_handle = 1; host->busy_handle = 1;
host->cmd = NULL;
return; return;
} }
} }
/* Finished CMD23, now send actual command. */ /* Finished CMD23, now send actual command. */
if (host->cmd == host->mrq->sbc) { if (cmd == host->mrq->sbc) {
host->cmd = NULL;
sdhci_send_command(host, host->mrq->cmd); sdhci_send_command(host, host->mrq->cmd);
} else { } else {
...@@ -1104,10 +1105,8 @@ static void sdhci_finish_command(struct sdhci_host *host) ...@@ -1104,10 +1105,8 @@ static void sdhci_finish_command(struct sdhci_host *host)
if (host->data && host->data_early) if (host->data && host->data_early)
sdhci_finish_data(host); sdhci_finish_data(host);
if (!host->cmd->data) if (!cmd->data)
tasklet_schedule(&host->finish_tasklet); tasklet_schedule(&host->finish_tasklet);
host->cmd = NULL;
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment