From: Högander Jouni <[EMAIL PROTECTED]>
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 <[EMAIL PROTECTED]>
---
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 [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html