summaryrefslogtreecommitdiff
path: root/target/linux/s3c24xx/patches-2.6.24/1285-fix-glamo-idleclock-around-suspend.patch.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/s3c24xx/patches-2.6.24/1285-fix-glamo-idleclock-around-suspend.patch.patch')
-rw-r--r--target/linux/s3c24xx/patches-2.6.24/1285-fix-glamo-idleclock-around-suspend.patch.patch80
1 files changed, 80 insertions, 0 deletions
diff --git a/target/linux/s3c24xx/patches-2.6.24/1285-fix-glamo-idleclock-around-suspend.patch.patch b/target/linux/s3c24xx/patches-2.6.24/1285-fix-glamo-idleclock-around-suspend.patch.patch
new file mode 100644
index 0000000..0f1c0a0
--- /dev/null
+++ b/target/linux/s3c24xx/patches-2.6.24/1285-fix-glamo-idleclock-around-suspend.patch.patch
@@ -0,0 +1,80 @@
+From ca19d156400f817960efe0d14680324b2ea34171 Mon Sep 17 00:00:00 2001
+From: Andy Green <andy@openmoko.com>
+Date: Wed, 3 Sep 2008 19:39:47 +0800
+Subject: [PATCH] fix-glamo-idleclock-around-suspend.patch
+
+Possible implementation of SD Card corruption workaround reported here
+
+https://docs.openmoko.org/trac/ticket/1802#comment:5
+
+Signed-off-by: Andy Green <andy@openmoko.com>
+---
+ drivers/mfd/glamo/glamo-mci.c | 31 ++++++++++++++++++++++++++++++-
+ 1 files changed, 30 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/mfd/glamo/glamo-mci.c b/drivers/mfd/glamo/glamo-mci.c
+index 577021e..3eece08 100644
+--- a/drivers/mfd/glamo/glamo-mci.c
++++ b/drivers/mfd/glamo/glamo-mci.c
+@@ -99,6 +99,8 @@ module_param(sd_drive, int, 0644);
+ static int sd_idleclk = 0; /* disallow idle clock by default */
+ module_param(sd_idleclk, int, 0644);
+
++/* used to stash real idleclk state in suspend: we force it to run in there */
++static int suspend_sd_idleclk;
+
+
+ unsigned char CRC7(u8 * pu8, int cnt)
+@@ -947,6 +949,27 @@ static int glamo_mci_suspend(struct platform_device *dev, pm_message_t state)
+ struct glamo_mci_host *host = mmc_priv(mmc);
+ int ret;
+
++ /*
++ * possible workaround for SD corruption during suspend - resume
++ * make sure the clock was running during suspend and consequently
++ * resume
++ */
++ if (host->pdata->glamo_mci_use_slow)
++ if ((host->pdata->glamo_mci_use_slow)())
++ __glamo_mci_fix_card_div(host, host->clk_div *
++ sd_slow_ratio);
++ else
++ __glamo_mci_fix_card_div(host, host->clk_div);
++ else
++ __glamo_mci_fix_card_div(host, host->clk_div);
++
++ /* we are going to do more commands to override this in
++ * mmc_suspend_host(), so we need to change sd_idleclk for the
++ * duration as well
++ */
++ suspend_sd_idleclk = sd_idleclk;
++ sd_idleclk = 1;
++
+ host->suspending++;
+ if (host->pdata->mci_all_dependencies_resumed)
+ (host->pdata->mci_suspending)(dev);
+@@ -963,6 +986,7 @@ int glamo_mci_resume(struct platform_device *dev)
+ {
+ struct mmc_host *mmc = platform_get_drvdata(dev);
+ struct glamo_mci_host *host = mmc_priv(mmc);
++ int ret;
+
+ if (host->pdata->mci_all_dependencies_resumed)
+ if (!(host->pdata->mci_all_dependencies_resumed)(dev))
+@@ -970,7 +994,12 @@ int glamo_mci_resume(struct platform_device *dev)
+
+ host->suspending--;
+
+- return mmc_resume_host(mmc);
++ ret = mmc_resume_host(mmc);
++
++ /* put sd_idleclk back to pre-suspend state */
++ sd_idleclk = suspend_sd_idleclk;
++
++ return ret;
+ }
+ EXPORT_SYMBOL_GPL(glamo_mci_resume);
+
+--
+1.5.6.5
+