PM / Domains: Make failing pm_genpd_prepare() clean up properly
[pandora-kernel.git] / drivers / base / power / domain.c
index 0e7e91b..9a20d93 100644 (file)
@@ -367,6 +367,7 @@ static void pm_genpd_sync_poweroff(struct generic_pm_domain *genpd)
 static int pm_genpd_prepare(struct device *dev)
 {
        struct generic_pm_domain *genpd;
+       int ret;
 
        dev_dbg(dev, "%s()\n", __func__);
 
@@ -400,7 +401,16 @@ static int pm_genpd_prepare(struct device *dev)
 
        mutex_unlock(&genpd->lock);
 
-       return pm_generic_prepare(dev);
+       ret = pm_generic_prepare(dev);
+       if (ret) {
+               mutex_lock(&genpd->lock);
+
+               if (--genpd->prepared_count == 0)
+                       genpd->suspend_power_off = false;
+
+               mutex_unlock(&genpd->lock);
+       }
+       return ret;
 }
 
 /**