diff options
author | Zhang Jiejing <jiejing.zhang@freescale.com> | 2011-10-20 19:09:03 +0800 |
---|---|---|
committer | Zhang Jiejing <jiejing.zhang@freescale.com> | 2011-11-02 11:13:52 +0800 |
commit | a762c73803259008fc62a3b3f5ec32c86d51c5b7 (patch) | |
tree | f00c09ec1b1be2a094a39d26fa31f3a206dfa7ac | |
parent | 6e037efc0b6ca27bb8d8525310690e063b1ab885 (diff) |
ENGR00000001 Revert "mmc: core: Add deferred bus resume policy for android."
This reverts commit 8ac7fbd32b8b72ccfd0511089e4fad2d828d8682.
Conflicts:
drivers/mmc/card/block.c
Revert this commit because this patch changed in android 2.6.35 branch.
I revert this patch and apply the new patch to avoid misunstanding.
Signed-off-by: Zhang Jiejing <jiejing.zhang@freescale.com>
-rw-r--r-- | drivers/mmc/card/Kconfig | 9 | ||||
-rw-r--r-- | drivers/mmc/card/block.c | 44 | ||||
-rw-r--r-- | drivers/mmc/core/core.c | 45 | ||||
-rw-r--r-- | include/linux/mmc/host.h | 8 |
4 files changed, 25 insertions, 81 deletions
diff --git a/drivers/mmc/card/Kconfig b/drivers/mmc/card/Kconfig index 325f3402e252..10ba9a035a58 100644 --- a/drivers/mmc/card/Kconfig +++ b/drivers/mmc/card/Kconfig @@ -32,15 +32,6 @@ config MMC_BLOCK_BOUNCE If unsure, say Y here. -config MMC_BLOCK_DEFERRED_RESUME - bool "Deferr MMC layer resume until I/O is requested" - depends on MMC_BLOCK - default n - help - Say Y here to enable deferred MMC resume until I/O - is requested. This will reduce overall resume latency and - save power when theres an SD card inserted but not being used. - config SDIO_UART tristate "SDIO UART/GPS class support" help diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c index 84a265648cd2..a1239b93c078 100644 --- a/drivers/mmc/card/block.c +++ b/drivers/mmc/card/block.c @@ -242,7 +242,31 @@ static u32 get_card_status(struct mmc_card *card, struct request *req) return cmd.resp[0]; } -static int mmc_blk_set_blksize(struct mmc_blk_data *md, struct mmc_card *card); +static int +mmc_blk_set_blksize(struct mmc_blk_data *md, struct mmc_card *card) +{ + struct mmc_command cmd; + int err; + + /* Block-addressed cards ignore MMC_SET_BLOCKLEN. */ + if (mmc_card_blockaddr(card)) + return 0; + + mmc_claim_host(card->host); + cmd.opcode = MMC_SET_BLOCKLEN; + cmd.arg = 512; + cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_AC; + err = mmc_wait_for_cmd(card->host, &cmd, 5); + mmc_release_host(card->host); + + if (err) { + printk(KERN_ERR "%s: unable to set block size to %d: %d\n", + md->disk->disk_name, cmd.arg, err); + return -EINVAL; + } + + return 0; +} static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req) { @@ -251,11 +275,6 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req) struct mmc_blk_request brq; int ret = 1, disable_multi = 0; -#ifdef CONFIG_MMC_BLOCK_DEFERRED_RESUME - if (!mmc_resume_bus(card->host)) - mmc_blk_set_blksize(md, card); -#endif - mmc_claim_host(card->host); do { @@ -580,10 +599,6 @@ mmc_blk_set_blksize(struct mmc_blk_data *md, struct mmc_card *card) if (mmc_card_blockaddr(card)) return 0; - /* DDR Mode cards ignore MMC_SET_BLOCKLEN. */ - if (mmc_card_ddrmode(card)) - return 0; - mmc_claim_host(card->host); cmd.opcode = MMC_SET_BLOCKLEN; cmd.arg = 512; @@ -628,10 +643,6 @@ static int mmc_blk_probe(struct mmc_card *card) cap_str, md->read_only ? "(ro)" : ""); mmc_set_drvdata(card, md); -#ifdef CONFIG_MMC_BLOCK_DEFERRED_RESUME - card->host->deferred_resume = 1; - card->host->need_resume = 0; -#endif add_disk(md->disk); return 0; @@ -656,9 +667,6 @@ static void mmc_blk_remove(struct mmc_card *card) mmc_blk_put(md); } mmc_set_drvdata(card, NULL); -#ifdef CONFIG_MMC_BLOCK_DEFERRED_RESUME - card->host->deferred_resume = 0; -#endif } #ifdef CONFIG_PM @@ -677,9 +685,7 @@ static int mmc_blk_resume(struct mmc_card *card) struct mmc_blk_data *md = mmc_get_drvdata(card); if (md) { -#ifndef CONFIG_MMC_BLOCK_DEFERRED_RESUME mmc_blk_set_blksize(md, card); -#endif mmc_queue_resume(&md->queue); } return 0; diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c index e6233c06243c..65e5ead06787 100644 --- a/drivers/mmc/core/core.c +++ b/drivers/mmc/core/core.c @@ -983,37 +983,6 @@ static inline void mmc_bus_put(struct mmc_host *host) spin_unlock_irqrestore(&host->lock, flags); } -#ifdef CONFIG_MMC_BLOCK_DEFERRED_RESUME -int mmc_resume_bus(struct mmc_host *host) -{ - unsigned long flags; - - if (!host->deferred_resume || !host->need_resume) - return -EINVAL; - - printk("%s: Starting deferred resume\n", mmc_hostname(host)); - spin_lock_irqsave(&host->lock, flags); - host->need_resume = 0; - spin_unlock_irqrestore(&host->lock, flags); - - mmc_bus_get(host); - if (host->bus_ops && !host->bus_dead) { - mmc_power_up(host); - BUG_ON(!host->bus_ops->resume); - host->bus_ops->resume(host); - } - - if (host->bus_ops->detect && !host->bus_dead) - host->bus_ops->detect(host); - - mmc_bus_put(host); - printk("%s: Deferred resume completed\n", mmc_hostname(host)); - return 0; -} - -EXPORT_SYMBOL(mmc_resume_bus); -#endif - /* * Assign a mmc bus handler to a host. Only one bus handler may control a * host at any given time. @@ -1309,11 +1278,6 @@ int mmc_suspend_host(struct mmc_host *host) { int err = 0; -#ifdef CONFIG_MMC_BLOCK_DEFERRED_RESUME - if (host->need_resume) - return 0; -#endif - if (host->caps & MMC_CAP_DISABLE) cancel_delayed_work(&host->disable); cancel_delayed_work(&host->detect); @@ -1356,15 +1320,6 @@ int mmc_resume_host(struct mmc_host *host) int err = 0; mmc_bus_get(host); - -#ifdef CONFIG_MMC_BLOCK_DEFERRED_RESUME - if (host->deferred_resume) { - host->need_resume = 1; - mmc_bus_put(host); - return 0; - } -#endif - if (host->bus_ops && !host->bus_dead) { if (!(host->pm_flags & MMC_PM_KEEP_POWER)) { mmc_power_up(host); diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h index 8e613a5c53a7..e77d7541da3c 100644 --- a/include/linux/mmc/host.h +++ b/include/linux/mmc/host.h @@ -200,10 +200,6 @@ struct mmc_host { const struct mmc_bus_ops *bus_ops; /* current bus driver */ unsigned int bus_refs; /* reference counter */ -#ifdef CONFIG_MMC_BLOCK_DEFERRED_RESUME - unsigned int need_resume:1; - unsigned int deferred_resume:1; -#endif unsigned int sdio_irqs; struct task_struct *sdio_irq_thread; @@ -236,10 +232,6 @@ static inline void *mmc_priv(struct mmc_host *host) #define mmc_classdev(x) (&(x)->class_dev) #define mmc_hostname(x) (dev_name(&(x)->class_dev)) -#ifdef CONFIG_MMC_BLOCK_DEFERRED_RESUME -extern int mmc_resume_bus(struct mmc_host *host); -#endif - extern int mmc_suspend_host(struct mmc_host *); extern int mmc_resume_host(struct mmc_host *); |