mmc: propagate power save/restore ops return value
authorOhad Ben-Cohen <ohad@wizery.com>
Sat, 2 Oct 2010 11:54:06 +0000 (13:54 +0200)
committerChris Ball <cjb@laptop.org>
Sat, 23 Oct 2010 13:11:17 +0000 (21:11 +0800)
Allow power save/restore and their relevant mmc_bus_ops handlers
exit with a return value.

Signed-off-by: Ohad Ben-Cohen <ohad@wizery.com>
Tested-by: Luciano Coelho <luciano.coelho@nokia.com>
Signed-off-by: Chris Ball <cjb@laptop.org>
drivers/mmc/core/core.c
drivers/mmc/core/core.h
drivers/mmc/core/mmc.c
drivers/mmc/core/sd.c
include/linux/mmc/host.h

index 3eb7a9be6d8de282d04bc4e98bdf12f1283f5ec2..8f86d702e46eebce56bdb00f6f22d4d6b8205100 100644 (file)
@@ -1583,37 +1583,45 @@ void mmc_stop_host(struct mmc_host *host)
        mmc_power_off(host);
 }
 
-void mmc_power_save_host(struct mmc_host *host)
+int mmc_power_save_host(struct mmc_host *host)
 {
+       int ret = 0;
+
        mmc_bus_get(host);
 
        if (!host->bus_ops || host->bus_dead || !host->bus_ops->power_restore) {
                mmc_bus_put(host);
-               return;
+               return -EINVAL;
        }
 
        if (host->bus_ops->power_save)
-               host->bus_ops->power_save(host);
+               ret = host->bus_ops->power_save(host);
 
        mmc_bus_put(host);
 
        mmc_power_off(host);
+
+       return ret;
 }
 EXPORT_SYMBOL(mmc_power_save_host);
 
-void mmc_power_restore_host(struct mmc_host *host)
+int mmc_power_restore_host(struct mmc_host *host)
 {
+       int ret;
+
        mmc_bus_get(host);
 
        if (!host->bus_ops || host->bus_dead || !host->bus_ops->power_restore) {
                mmc_bus_put(host);
-               return;
+               return -EINVAL;
        }
 
        mmc_power_up(host);
-       host->bus_ops->power_restore(host);
+       ret = host->bus_ops->power_restore(host);
 
        mmc_bus_put(host);
+
+       return ret;
 }
 EXPORT_SYMBOL(mmc_power_restore_host);
 
index a971b0667aad0c5a17abe25d5662f609b791a6f9..77240cd11bcfdaecb0f66ce971fcc2e5227a85ea 100644 (file)
@@ -22,8 +22,8 @@ struct mmc_bus_ops {
        void (*detect)(struct mmc_host *);
        int (*suspend)(struct mmc_host *);
        int (*resume)(struct mmc_host *);
-       void (*power_save)(struct mmc_host *);
-       void (*power_restore)(struct mmc_host *);
+       int (*power_save)(struct mmc_host *);
+       int (*power_restore)(struct mmc_host *);
 };
 
 void mmc_attach_bus(struct mmc_host *host, const struct mmc_bus_ops *ops);
index df2a817303b405c80c75635d3e59603c7e80237c..995261f7fd70165e92caa8a3ec16f0e75e2e2fcc 100644 (file)
@@ -657,12 +657,16 @@ static int mmc_resume(struct mmc_host *host)
        return err;
 }
 
-static void mmc_power_restore(struct mmc_host *host)
+static int mmc_power_restore(struct mmc_host *host)
 {
+       int ret;
+
        host->card->state &= ~MMC_STATE_HIGHSPEED;
        mmc_claim_host(host);
-       mmc_init_card(host, host->ocr, host->card);
+       ret = mmc_init_card(host, host->ocr, host->card);
        mmc_release_host(host);
+
+       return ret;
 }
 
 static int mmc_sleep(struct mmc_host *host)
index bc745e1237bf87bd1feb1cea8a07ea06d0ea927d..49da4dffd28ec076368ba3bfd72fa4a25f4a44bb 100644 (file)
@@ -722,12 +722,16 @@ static int mmc_sd_resume(struct mmc_host *host)
        return err;
 }
 
-static void mmc_sd_power_restore(struct mmc_host *host)
+static int mmc_sd_power_restore(struct mmc_host *host)
 {
+       int ret;
+
        host->card->state &= ~MMC_STATE_HIGHSPEED;
        mmc_claim_host(host);
-       mmc_sd_init_card(host, host->ocr, host->card);
+       ret = mmc_sd_init_card(host, host->ocr, host->card);
        mmc_release_host(host);
+
+       return ret;
 }
 
 static const struct mmc_bus_ops mmc_sd_ops = {
index 69ee1ebe43025e24b8776d2518a9d018d37f7eaf..6d87f68ce4b6b70b8ff573f3e73e2550e9ca4acb 100644 (file)
@@ -250,8 +250,8 @@ static inline void *mmc_priv(struct mmc_host *host)
 extern int mmc_suspend_host(struct mmc_host *);
 extern int mmc_resume_host(struct mmc_host *);
 
-extern void mmc_power_save_host(struct mmc_host *host);
-extern void mmc_power_restore_host(struct mmc_host *host);
+extern int mmc_power_save_host(struct mmc_host *host);
+extern int mmc_power_restore_host(struct mmc_host *host);
 
 extern void mmc_detect_change(struct mmc_host *, unsigned long delay);
 extern void mmc_request_done(struct mmc_host *, struct mmc_request *);