mmc: omap_hsmmc: Introduce omap_hsmmc_prepare/complete
[firefly-linux-kernel-4.4.55.git] / drivers / mmc / host / omap_hsmmc.c
index 18d3f19ef4e5ab8dd473b0893d97fe7b8166db85..fad9250e4bc9d91ad835eb00bf24f145fe7632e9 100644 (file)
@@ -2070,6 +2070,25 @@ static int __devexit omap_hsmmc_remove(struct platform_device *pdev)
 }
 
 #ifdef CONFIG_PM
+static int omap_hsmmc_prepare(struct device *dev)
+{
+       struct omap_hsmmc_host *host = dev_get_drvdata(dev);
+
+       if (host->pdata->suspend)
+               return host->pdata->suspend(dev, host->slot_id);
+
+       return 0;
+}
+
+static void omap_hsmmc_complete(struct device *dev)
+{
+       struct omap_hsmmc_host *host = dev_get_drvdata(dev);
+
+       if (host->pdata->resume)
+               host->pdata->resume(dev, host->slot_id);
+
+}
+
 static int omap_hsmmc_suspend(struct device *dev)
 {
        int ret = 0;
@@ -2083,23 +2102,10 @@ static int omap_hsmmc_suspend(struct device *dev)
 
        pm_runtime_get_sync(host->dev);
        host->suspended = 1;
-       if (host->pdata->suspend) {
-               ret = host->pdata->suspend(dev, host->slot_id);
-               if (ret) {
-                       dev_dbg(dev, "Unable to handle MMC board"
-                                       " level suspend\n");
-                       host->suspended = 0;
-                       return ret;
-               }
-       }
        ret = mmc_suspend_host(host->mmc);
 
        if (ret) {
                host->suspended = 0;
-               if (host->pdata->resume) {
-                       if (host->pdata->resume(dev, host->slot_id))
-                               dev_dbg(dev, "Unmask interrupt failed\n");
-               }
                goto err;
        }
 
@@ -2136,12 +2142,6 @@ static int omap_hsmmc_resume(struct device *dev)
        if (!(host->mmc->pm_flags & MMC_PM_KEEP_POWER))
                omap_hsmmc_conf_bus_power(host);
 
-       if (host->pdata->resume) {
-               ret = host->pdata->resume(dev, host->slot_id);
-               if (ret)
-                       dev_dbg(dev, "Unmask interrupt failed\n");
-       }
-
        omap_hsmmc_protect_card(host);
 
        /* Notify the core to resume the host */
@@ -2157,8 +2157,10 @@ static int omap_hsmmc_resume(struct device *dev)
 }
 
 #else
+#define omap_hsmmc_prepare     NULL
+#define omap_hsmmc_complete    NULL
 #define omap_hsmmc_suspend     NULL
-#define omap_hsmmc_resume              NULL
+#define omap_hsmmc_resume      NULL
 #endif
 
 static int omap_hsmmc_runtime_suspend(struct device *dev)
@@ -2186,6 +2188,8 @@ static int omap_hsmmc_runtime_resume(struct device *dev)
 static struct dev_pm_ops omap_hsmmc_dev_pm_ops = {
        .suspend        = omap_hsmmc_suspend,
        .resume         = omap_hsmmc_resume,
+       .prepare        = omap_hsmmc_prepare,
+       .complete       = omap_hsmmc_complete,
        .runtime_suspend = omap_hsmmc_runtime_suspend,
        .runtime_resume = omap_hsmmc_runtime_resume,
 };