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

Commit 43b58b36 authored by Pierre Ossman's avatar Pierre Ossman
Browse files

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: default avatarPierre Ossman <drzeus@drzeus.cx>
parent b8c1c5da
Loading
Loading
Loading
Loading
+10 −13
Original line number Diff line number Diff line
@@ -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 (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)