From: Adrian Hunter <adrian.hun...@nokia.com> Sometimes the controller unexpectedly produces a TC (transfer complete) interrupt before the CC (command complete) interrupt for command 6 (SWITCH). This is a problem because the CC interrupt can get mixed up with the next request. Add a hack for CMD6.
Signed-off-by: Adrian Hunter <adrian.hun...@nokia.com> Acked-by: Matt Fleming <m...@console-pimps.org> Cc: Ian Molton <i...@mnementh.co.uk> Cc: "Roberto A. Foglietta" <roberto.foglie...@gmail.com> Cc: Jarkko Lavinen <jarkko.lavi...@nokia.com> Cc: Denis Karpov <ext-denis.2.kar...@nokia.com> Cc: Pierre Ossman <pie...@ossman.eu> Cc: Philip Langdale <phil...@overt.org> Cc: "Madhusudhan" <madhu...@ti.com> Cc: <linux-mmc@vger.kernel.org> Signed-off-by: Andrew Morton <a...@linux-foundation.org> --- drivers/mmc/host/omap_hsmmc.c | 7 +++++++ 1 file changed, 7 insertions(+) diff -puN drivers/mmc/host/omap_hsmmc.c~omap_hsmmc-cater-for-weird-cmd6-behaviour drivers/mmc/host/omap_hsmmc.c --- a/drivers/mmc/host/omap_hsmmc.c~omap_hsmmc-cater-for-weird-cmd6-behaviour +++ a/drivers/mmc/host/omap_hsmmc.c @@ -481,6 +481,13 @@ mmc_omap_xfer_done(struct mmc_omap_host if (!data) { struct mmc_request *mrq = host->mrq; + /* TC before CC from CMD6 - don't know why, but it happens */ + if (host->cmd && host->cmd->opcode == 6 && + host->response_busy) { + host->response_busy = 0; + return; + } + host->mrq = NULL; mmc_request_done(host->mmc, mrq); return; _ -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html