diff -NuarBb /x/work/navi_os/mmc/host/pxamci.c mmc/host/pxamci.c --- /x/work/navi_os/mmc/host/pxamci.c 2008-03-24 19:49:18.000000000 +0100 +++ mmc/host/pxamci.c 2008-04-25 12:14:00.000000000 +0200 @@ -26,6 +26,7 @@ #include #include #include +#include #include #include @@ -67,6 +68,8 @@ unsigned int dma_dir; }; +static int local_cmd = -1; + static void pxamci_stop_clock(struct pxamci_host *host) { if (readl(host->base + MMC_STAT) & STAT_CLK_EN) { @@ -84,6 +87,7 @@ if (v & STAT_CLK_EN) dev_err(mmc_dev(host->mmc), "unable to stop clock\n"); + local_cmd = -1; } } @@ -232,6 +235,14 @@ v = w2; } + local_cmd = cmd->opcode; + if ((local_cmd == MMC_GO_IDLE_STATE) || + (local_cmd == MMC_GO_INACTIVE_STATE) || + (local_cmd == MMC_SEND_STATUS) || + (local_cmd == MMC_STOP_TRANSMISSION) || + (local_cmd == MMC_SET_BLOCKLEN) + ) pxamci_stop_clock(host); + if (stat & STAT_TIME_OUT_RESPONSE) { cmd->error = -ETIMEDOUT; } else if (stat & STAT_RES_CRC_ERR && cmd->flags & MMC_RSP_CRC) { @@ -290,7 +301,7 @@ host->data = NULL; if (host->mrq->stop) { - pxamci_stop_clock(host); + //pxamci_stop_clock(host); pxamci_start_cmd(host, host->mrq->stop, host->cmdat); } else { pxamci_finish_request(host, host->mrq);