struct mmc_driver *drv = to_mmc_driver(dev->driver);
struct mmc_card *card = mmc_dev_to_card(dev);
struct mmc_host *host = card->host;
- int ret;
+ int ret = 0;
if (dev->driver && drv->shutdown)
- drv->shutdown(card);
+ drv->shutdown(card);
- if (host->bus_ops->shutdown) {
- ret = host->bus_ops->shutdown(host);
- if (ret)
- pr_warn("%s: error %d during shutdown\n",
- mmc_hostname(host), ret);
+ if (host->bus_ops->shutdown) {
+ ret = host->bus_ops->shutdown(host);
+
+ if (ret)
+ pr_warn("%s: error %d during shutdown\n",mmc_hostname(host), ret);
}
+
}
#ifdef CONFIG_PM_SLEEP
{
struct mmc_driver *drv = to_mmc_driver(dev->driver);
struct mmc_card *card = mmc_dev_to_card(dev);
+ struct mmc_host *host = card->host;
int ret = 0;
- if (dev->driver && drv->suspend)
+ if (dev->driver && drv->suspend) {
ret = drv->suspend(card);
+ if (ret)
+ return ret;
+ }
+
+ if(host->bus_ops->suspend)
+ ret = host->bus_ops->suspend(host);
return ret;
}
{
struct mmc_driver *drv = to_mmc_driver(dev->driver);
struct mmc_card *card = mmc_dev_to_card(dev);
+ struct mmc_host *host = card->host;
int ret = 0;
+ if(host->bus_ops->resume){
+ ret = host->bus_ops->resume(host);
+ if (ret)
+ pr_warn("%s: error %d during resume (card was removed?)\n",
+ mmc_hostname(host), ret);
+ }
+
if (dev->driver && drv->resume)
ret = drv->resume(card);
+
return ret;
}
#endif
static int mmc_runtime_suspend(struct device *dev)
{
struct mmc_card *card = mmc_dev_to_card(dev);
+ struct mmc_host *host = card->host;
+ int ret = 0;
+
+ if (host->bus_ops->runtime_suspend)
+ ret = host->bus_ops->runtime_suspend(host);
- return mmc_power_save_host(card->host);
+ return ret;
}
static int mmc_runtime_resume(struct device *dev)
{
struct mmc_card *card = mmc_dev_to_card(dev);
+ struct mmc_host *host = card->host;
+ int ret = 0;
+
+ if (host->bus_ops->runtime_resume)
+ ret = host->bus_ops->runtime_resume(host);
- return mmc_power_restore_host(card->host);
+ return ret;
}
static int mmc_runtime_idle(struct device *dev)
{
- return pm_runtime_suspend(dev);
+ return 0;
}
#endif /* !CONFIG_PM_RUNTIME */
break;
}
- if (mmc_sd_card_uhs(card) &&
+ if (mmc_card_uhs(card) &&
(card->sd_bus_speed < ARRAY_SIZE(uhs_speeds)))
uhs_bus_speed_mode = uhs_speeds[card->sd_bus_speed];