aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/acpi/acpi_lpss.c2
-rw-r--r--drivers/base/power/common.c2
-rw-r--r--drivers/base/power/domain.c27
3 files changed, 9 insertions, 22 deletions
diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c
index c570b1d9f094..0872d5fecb82 100644
--- a/drivers/acpi/acpi_lpss.c
+++ b/drivers/acpi/acpi_lpss.c
@@ -880,7 +880,7 @@ static int acpi_lpss_platform_notify(struct notifier_block *nb,
880 break; 880 break;
881 case BUS_NOTIFY_DRIVER_NOT_BOUND: 881 case BUS_NOTIFY_DRIVER_NOT_BOUND:
882 case BUS_NOTIFY_UNBOUND_DRIVER: 882 case BUS_NOTIFY_UNBOUND_DRIVER:
883 pdev->dev.pm_domain = NULL; 883 dev_pm_domain_set(&pdev->dev, NULL);
884 break; 884 break;
885 case BUS_NOTIFY_ADD_DEVICE: 885 case BUS_NOTIFY_ADD_DEVICE:
886 dev_pm_domain_set(&pdev->dev, &acpi_lpss_pm_domain); 886 dev_pm_domain_set(&pdev->dev, &acpi_lpss_pm_domain);
diff --git a/drivers/base/power/common.c b/drivers/base/power/common.c
index 93ed14cc2252..f6a9ad52cbbf 100644
--- a/drivers/base/power/common.c
+++ b/drivers/base/power/common.c
@@ -146,7 +146,7 @@ void dev_pm_domain_set(struct device *dev, struct dev_pm_domain *pd)
146 if (dev->pm_domain == pd) 146 if (dev->pm_domain == pd)
147 return; 147 return;
148 148
149 WARN(device_is_bound(dev), 149 WARN(pd && device_is_bound(dev),
150 "PM domains can only be changed for unbound devices\n"); 150 "PM domains can only be changed for unbound devices\n");
151 dev->pm_domain = pd; 151 dev->pm_domain = pd;
152 device_pm_check_callbacks(dev); 152 device_pm_check_callbacks(dev);
diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c
index 784dbe897a5e..301b785f9f56 100644
--- a/drivers/base/power/domain.c
+++ b/drivers/base/power/domain.c
@@ -173,14 +173,14 @@ static void genpd_queue_power_off_work(struct generic_pm_domain *genpd)
173} 173}
174 174
175/** 175/**
176 * __genpd_poweron - Restore power to a given PM domain and its masters. 176 * genpd_poweron - Restore power to a given PM domain and its masters.
177 * @genpd: PM domain to power up. 177 * @genpd: PM domain to power up.
178 * @depth: nesting count for lockdep. 178 * @depth: nesting count for lockdep.
179 * 179 *
180 * Restore power to @genpd and all of its masters so that it is possible to 180 * Restore power to @genpd and all of its masters so that it is possible to
181 * resume a device belonging to it. 181 * resume a device belonging to it.
182 */ 182 */
183static int __genpd_poweron(struct generic_pm_domain *genpd, unsigned int depth) 183static int genpd_poweron(struct generic_pm_domain *genpd, unsigned int depth)
184{ 184{
185 struct gpd_link *link; 185 struct gpd_link *link;
186 int ret = 0; 186 int ret = 0;
@@ -200,7 +200,7 @@ static int __genpd_poweron(struct generic_pm_domain *genpd, unsigned int depth)
200 genpd_sd_counter_inc(master); 200 genpd_sd_counter_inc(master);
201 201
202 mutex_lock_nested(&master->lock, depth + 1); 202 mutex_lock_nested(&master->lock, depth + 1);
203 ret = __genpd_poweron(master, depth + 1); 203 ret = genpd_poweron(master, depth + 1);
204 mutex_unlock(&master->lock); 204 mutex_unlock(&master->lock);
205 205
206 if (ret) { 206 if (ret) {
@@ -227,21 +227,6 @@ static int __genpd_poweron(struct generic_pm_domain *genpd, unsigned int depth)
227 return ret; 227 return ret;
228} 228}
229 229
230/**
231 * genpd_poweron - Restore power to a given PM domain and its masters.
232 * @genpd: PM domain to power up.
233 */
234static int genpd_poweron(struct generic_pm_domain *genpd)
235{
236 int ret;
237
238 mutex_lock(&genpd->lock);
239 ret = __genpd_poweron(genpd, 0);
240 mutex_unlock(&genpd->lock);
241 return ret;
242}
243
244
245static int genpd_save_dev(struct generic_pm_domain *genpd, struct device *dev) 230static int genpd_save_dev(struct generic_pm_domain *genpd, struct device *dev)
246{ 231{
247 return GENPD_DEV_CALLBACK(genpd, int, save_state, dev); 232 return GENPD_DEV_CALLBACK(genpd, int, save_state, dev);
@@ -489,7 +474,7 @@ static int pm_genpd_runtime_resume(struct device *dev)
489 } 474 }
490 475
491 mutex_lock(&genpd->lock); 476 mutex_lock(&genpd->lock);
492 ret = __genpd_poweron(genpd, 0); 477 ret = genpd_poweron(genpd, 0);
493 mutex_unlock(&genpd->lock); 478 mutex_unlock(&genpd->lock);
494 479
495 if (ret) 480 if (ret)
@@ -1821,8 +1806,10 @@ int genpd_dev_pm_attach(struct device *dev)
1821 1806
1822 dev->pm_domain->detach = genpd_dev_pm_detach; 1807 dev->pm_domain->detach = genpd_dev_pm_detach;
1823 dev->pm_domain->sync = genpd_dev_pm_sync; 1808 dev->pm_domain->sync = genpd_dev_pm_sync;
1824 ret = genpd_poweron(pd);
1825 1809
1810 mutex_lock(&pd->lock);
1811 ret = genpd_poweron(pd, 0);
1812 mutex_unlock(&pd->lock);
1826out: 1813out:
1827 return ret ? -EPROBE_DEFER : 0; 1814 return ret ? -EPROBE_DEFER : 0;
1828} 1815}