You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.3 KiB
73 lines
2.3 KiB
From 99fbe6e31e09c9000668b50a87b3bbb834a145d0 Mon Sep 17 00:00:00 2001
|
|
From: Andy Green <andy@openmoko.com>
|
|
Date: Sun, 13 Apr 2008 07:25:50 +0100
|
|
Subject: [PATCH] fix-glamo-mci-defeat-ops-during-suspend.patch
|
|
|
|
We need to be able to use the config option CONFIG_MMC_UNSAFE_RESUME that allows the rootfs
|
|
to live on SD. But when we use this, it tries to send a reset command to the SD card during
|
|
suspend -- and unfortunately many things like Power have suspended by then.
|
|
|
|
This patch again rejects IO on the MMC device during suspend of the MMC device, and it
|
|
gives the result the rootfs on SD card works okay.
|
|
|
|
Signed-off-by: Andy Green <andy@openmoko.com>
|
|
---
|
|
drivers/mfd/glamo/glamo-mci.c | 14 ++++++++++++++
|
|
drivers/mfd/glamo/glamo-mci.h | 2 ++
|
|
2 files changed, 16 insertions(+), 0 deletions(-)
|
|
|
|
diff --git a/drivers/mfd/glamo/glamo-mci.c b/drivers/mfd/glamo/glamo-mci.c
|
|
index f559e5e..bbbbe4d 100644
|
|
--- a/drivers/mfd/glamo/glamo-mci.c
|
|
+++ b/drivers/mfd/glamo/glamo-mci.c
|
|
@@ -406,6 +406,14 @@ static void glamo_mci_send_request(struct mmc_host *mmc)
|
|
u16 status;
|
|
int n;
|
|
|
|
+ if (host->suspending) {
|
|
+ cmd->error = -EIO;
|
|
+ if (cmd->data)
|
|
+ cmd->data->error = -EIO;
|
|
+ mmc_request_done(mmc, mrq);
|
|
+ return;
|
|
+ }
|
|
+
|
|
host->ccnt++;
|
|
/*
|
|
* somehow 2.6.24 MCI manages to issue MMC_WRITE_BLOCK *without* the
|
|
@@ -792,6 +800,9 @@ static int glamo_mci_remove(struct platform_device *pdev)
|
|
static int glamo_mci_suspend(struct platform_device *dev, pm_message_t state)
|
|
{
|
|
struct mmc_host *mmc = platform_get_drvdata(dev);
|
|
+ struct glamo_mci_host *host = mmc_priv(mmc);
|
|
+
|
|
+ host->suspending++;
|
|
|
|
return mmc_suspend_host(mmc, state);
|
|
}
|
|
@@ -799,6 +810,9 @@ static int glamo_mci_suspend(struct platform_device *dev, pm_message_t state)
|
|
static int glamo_mci_resume(struct platform_device *dev)
|
|
{
|
|
struct mmc_host *mmc = platform_get_drvdata(dev);
|
|
+ struct glamo_mci_host *host = mmc_priv(mmc);
|
|
+
|
|
+ host->suspending--;
|
|
|
|
return mmc_resume_host(mmc);
|
|
}
|
|
diff --git a/drivers/mfd/glamo/glamo-mci.h b/drivers/mfd/glamo/glamo-mci.h
|
|
index 40c3e24..55852e7 100644
|
|
--- a/drivers/mfd/glamo/glamo-mci.h
|
|
+++ b/drivers/mfd/glamo/glamo-mci.h
|
|
@@ -34,6 +34,8 @@ struct glamo_mci_host {
|
|
int dma;
|
|
int data_max_size;
|
|
|
|
+ int suspending;
|
|
+
|
|
int power_mode_current;
|
|
unsigned int vdd_current;
|
|
|
|
--
|
|
1.5.6.5
|
|
|
|
|