From: Högander Jouni <jouni.hogander@xxxxxxxxx> For some reason mmc doesn't ack idle request if smartidle mode is used. This is just workaround. There is something wrong in driver code or in hw(omap). Signed-off-by: Jouni Högander <jouni.hogander@xxxxxxxxx> --- drivers/mmc/host/omap_hsmmc.c | 11 +++++++++++ 1 files changed, 11 insertions(+), 0 deletions(-) diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c index 9462e4c..e361213 100644 --- a/drivers/mmc/host/omap_hsmmc.c +++ b/drivers/mmc/host/omap_hsmmc.c @@ -58,6 +58,7 @@ #define SDVSCLR 0xFFFFF1FF #define SDVSDET 0x00000400 #define AUTOIDLE 0x1 +#define SMARTIDLE (2 << 3) #define SDBP (1<<8) #define DTO 0xe #define ICE 0x1 @@ -980,6 +981,11 @@ static int omap_mmc_suspend(struct platform_device *pdev, pm_message_t state) | SDBP); } + /* XXX Disable smartidle mode. For some reason + * this is preventing core retention */ + OMAP_HSMMC_WRITE(host->base, SYSCONFIG, + OMAP_HSMMC_READ(host->base, SYSCONFIG) & ~SMARTIDLE); + clk_disable(host->fclk); clk_disable(host->iclk); clk_disable(host->dbclk); @@ -1015,6 +1021,11 @@ static int omap_mmc_resume(struct platform_device *pdev) dev_dbg(mmc_dev(host->mmc), "Enabling debounce clk failed\n"); + /* XXX Enable smartidle mode. For some reason + * this is preventing core retention */ + OMAP_HSMMC_WRITE(host->base, SYSCONFIG, + OMAP_HSMMC_READ(host->base, SYSCONFIG) | SMARTIDLE); + if (host->pdata->resume) { ret = host->pdata->resume(&pdev->dev, host->slot_id); if (ret) -- 1.5.6.3 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html