{
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->shutdown)
+ 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);
+ }
- drv->shutdown(card);
}
#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;
+ int ret = 0;
if (dev->driver && drv->suspend) {
ret = drv->suspend(card);
if (ret)
return ret;
}
-
- ret = host->bus_ops->suspend(host);
+
+ 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;
-
- ret = host->bus_ops->resume(host);
- if (ret)
- pr_warn("%s: error %d during resume (card was removed?)\n",
- mmc_hostname(host), ret);
+ 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);
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];