|
@@ -586,7 +586,7 @@ static int __init genpd_poweroff_unused(void)
|
|
|
}
|
|
|
late_initcall(genpd_poweroff_unused);
|
|
|
|
|
|
-#ifdef CONFIG_PM_SLEEP
|
|
|
+#if defined(CONFIG_PM_SLEEP) || defined(CONFIG_PM_GENERIC_DOMAINS_OF)
|
|
|
|
|
|
/**
|
|
|
* pm_genpd_present - Check if the given PM domain has been initialized.
|
|
@@ -606,6 +606,10 @@ static bool pm_genpd_present(const struct generic_pm_domain *genpd)
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifdef CONFIG_PM_SLEEP
|
|
|
+
|
|
|
static bool genpd_dev_active_wakeup(struct generic_pm_domain *genpd,
|
|
|
struct device *dev)
|
|
|
{
|
|
@@ -1453,7 +1457,19 @@ static int genpd_add_provider(struct device_node *np, genpd_xlate_t xlate,
|
|
|
int of_genpd_add_provider_simple(struct device_node *np,
|
|
|
struct generic_pm_domain *genpd)
|
|
|
{
|
|
|
- return genpd_add_provider(np, genpd_xlate_simple, genpd);
|
|
|
+ int ret = -EINVAL;
|
|
|
+
|
|
|
+ if (!np || !genpd)
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
+ mutex_lock(&gpd_list_lock);
|
|
|
+
|
|
|
+ if (pm_genpd_present(genpd))
|
|
|
+ ret = genpd_add_provider(np, genpd_xlate_simple, genpd);
|
|
|
+
|
|
|
+ mutex_unlock(&gpd_list_lock);
|
|
|
+
|
|
|
+ return ret;
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(of_genpd_add_provider_simple);
|
|
|
|
|
@@ -1465,7 +1481,26 @@ EXPORT_SYMBOL_GPL(of_genpd_add_provider_simple);
|
|
|
int of_genpd_add_provider_onecell(struct device_node *np,
|
|
|
struct genpd_onecell_data *data)
|
|
|
{
|
|
|
- return genpd_add_provider(np, genpd_xlate_onecell, data);
|
|
|
+ unsigned int i;
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ if (!np || !data)
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
+ mutex_lock(&gpd_list_lock);
|
|
|
+
|
|
|
+ for (i = 0; i < data->num_domains; i++) {
|
|
|
+ if (!pm_genpd_present(data->domains[i])) {
|
|
|
+ mutex_unlock(&gpd_list_lock);
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = genpd_add_provider(np, genpd_xlate_onecell, data);
|
|
|
+
|
|
|
+ mutex_unlock(&gpd_list_lock);
|
|
|
+
|
|
|
+ return ret;
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(of_genpd_add_provider_onecell);
|
|
|
|