mmc: check error bits before command completion
Some controllers signal "command complete" even on failures (which they are allowed to do according to the spec). Make sure we check the error bits first so we don't get any false positives. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
This commit is contained in:
Родитель
b8c1c5da15
Коммит
43b58b36b7
|
@ -922,20 +922,17 @@ static void sdhci_cmd_irq(struct sdhci_host *host, u32 intmask)
|
|||
return;
|
||||
}
|
||||
|
||||
if (intmask & SDHCI_INT_RESPONSE)
|
||||
sdhci_finish_command(host);
|
||||
else {
|
||||
if (intmask & SDHCI_INT_TIMEOUT)
|
||||
host->cmd->error = MMC_ERR_TIMEOUT;
|
||||
else if (intmask & SDHCI_INT_CRC)
|
||||
host->cmd->error = MMC_ERR_BADCRC;
|
||||
else if (intmask & (SDHCI_INT_END_BIT | SDHCI_INT_INDEX))
|
||||
host->cmd->error = MMC_ERR_FAILED;
|
||||
else
|
||||
host->cmd->error = MMC_ERR_INVALID;
|
||||
if (intmask & SDHCI_INT_TIMEOUT)
|
||||
host->cmd->error = MMC_ERR_TIMEOUT;
|
||||
else if (intmask & SDHCI_INT_CRC)
|
||||
host->cmd->error = MMC_ERR_BADCRC;
|
||||
else if (intmask & (SDHCI_INT_END_BIT | SDHCI_INT_INDEX))
|
||||
host->cmd->error = MMC_ERR_FAILED;
|
||||
|
||||
if (host->cmd->error != MMC_ERR_NONE)
|
||||
tasklet_schedule(&host->finish_tasklet);
|
||||
}
|
||||
else if (intmask & SDHCI_INT_RESPONSE)
|
||||
sdhci_finish_command(host);
|
||||
}
|
||||
|
||||
static void sdhci_data_irq(struct sdhci_host *host, u32 intmask)
|
||||
|
|
Загрузка…
Ссылка в новой задаче