aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc
diff options
context:
space:
mode:
authorUlf Hansson <ulf.hansson@linaro.org>2013-06-10 11:03:39 -0400
committerChris Ball <cjb@laptop.org>2013-06-27 12:39:17 -0400
commit986892ca78eeddd9d6b629050fea432979ddd321 (patch)
tree32c3d793438b848af46ff10b7fcb28cb3982e4d0 /drivers/mmc
parent74590263384e5d4601de7f0ee2790477578829ea (diff)
mmc: core: Initiate suspend|resume from mmc bus instead of mmc host
The host should be responsible to suspend|resume the host and not the card. This patch changes this behaviour, by moving the responsiblity to the mmc bus instead which already holds the card device. The exported functions mmc_suspend|resume_host are now to be considered as depcrecated. Once all host drivers moves away from using them, we can remove them. As of now, a successful error code is always returned. Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> Tested-by: Jaehoon Chung <jh80.chung@samsung.com> Signed-off-by: Chris Ball <cjb@laptop.org>
Diffstat (limited to 'drivers/mmc')
-rw-r--r--drivers/mmc/core/bus.c19
-rw-r--r--drivers/mmc/core/core.c26
2 files changed, 19 insertions, 26 deletions
diff --git a/drivers/mmc/core/bus.c b/drivers/mmc/core/bus.c
index d9e8c2b7f4c5..3b7ca8ac0e61 100644
--- a/drivers/mmc/core/bus.c
+++ b/drivers/mmc/core/bus.c
@@ -127,10 +127,16 @@ static int mmc_bus_suspend(struct device *dev)
127{ 127{
128 struct mmc_driver *drv = to_mmc_driver(dev->driver); 128 struct mmc_driver *drv = to_mmc_driver(dev->driver);
129 struct mmc_card *card = mmc_dev_to_card(dev); 129 struct mmc_card *card = mmc_dev_to_card(dev);
130 int ret = 0; 130 struct mmc_host *host = card->host;
131 int ret;
131 132
132 if (dev->driver && drv->suspend) 133 if (dev->driver && drv->suspend) {
133 ret = drv->suspend(card); 134 ret = drv->suspend(card);
135 if (ret)
136 return ret;
137 }
138
139 ret = host->bus_ops->suspend(host);
134 return ret; 140 return ret;
135} 141}
136 142
@@ -138,10 +144,17 @@ static int mmc_bus_resume(struct device *dev)
138{ 144{
139 struct mmc_driver *drv = to_mmc_driver(dev->driver); 145 struct mmc_driver *drv = to_mmc_driver(dev->driver);
140 struct mmc_card *card = mmc_dev_to_card(dev); 146 struct mmc_card *card = mmc_dev_to_card(dev);
141 int ret = 0; 147 struct mmc_host *host = card->host;
148 int ret;
149
150 ret = host->bus_ops->resume(host);
151 if (ret)
152 pr_warn("%s: error %d during resume (card was removed?)\n",
153 mmc_hostname(host), ret);
142 154
143 if (dev->driver && drv->resume) 155 if (dev->driver && drv->resume)
144 ret = drv->resume(card); 156 ret = drv->resume(card);
157
145 return ret; 158 return ret;
146} 159}
147#endif 160#endif
diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
index da3b9078ea65..49a5bca418bd 100644
--- a/drivers/mmc/core/core.c
+++ b/drivers/mmc/core/core.c
@@ -2619,16 +2619,8 @@ EXPORT_SYMBOL(mmc_cache_ctrl);
2619 */ 2619 */
2620int mmc_suspend_host(struct mmc_host *host) 2620int mmc_suspend_host(struct mmc_host *host)
2621{ 2621{
2622 int err = 0; 2622 /* This function is deprecated */
2623 2623 return 0;
2624 mmc_bus_get(host);
2625 if (host->bus_ops && !host->bus_dead) {
2626 if (host->bus_ops->suspend)
2627 err = host->bus_ops->suspend(host);
2628 }
2629 mmc_bus_put(host);
2630
2631 return err;
2632} 2624}
2633EXPORT_SYMBOL(mmc_suspend_host); 2625EXPORT_SYMBOL(mmc_suspend_host);
2634 2626
@@ -2638,19 +2630,7 @@ EXPORT_SYMBOL(mmc_suspend_host);
2638 */ 2630 */
2639int mmc_resume_host(struct mmc_host *host) 2631int mmc_resume_host(struct mmc_host *host)
2640{ 2632{
2641 int err; 2633 /* This function is deprecated */
2642
2643 mmc_bus_get(host);
2644 if (host->bus_ops && !host->bus_dead) {
2645 BUG_ON(!host->bus_ops->resume);
2646 err = host->bus_ops->resume(host);
2647 if (err)
2648 pr_warning("%s: error %d during resume "
2649 "(card was removed?)\n",
2650 mmc_hostname(host), err);
2651 }
2652 mmc_bus_put(host);
2653
2654 return 0; 2634 return 0;
2655} 2635}
2656EXPORT_SYMBOL(mmc_resume_host); 2636EXPORT_SYMBOL(mmc_resume_host);