diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/acpi/acpi_lpss.c | 2 | ||||
-rw-r--r-- | drivers/base/power/common.c | 2 | ||||
-rw-r--r-- | drivers/base/power/domain.c | 27 |
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 | */ |
183 | static int __genpd_poweron(struct generic_pm_domain *genpd, unsigned int depth) | 183 | static 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 | */ | ||
234 | static 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 | |||
245 | static int genpd_save_dev(struct generic_pm_domain *genpd, struct device *dev) | 230 | static 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); | ||
1826 | out: | 1813 | out: |
1827 | return ret ? -EPROBE_DEFER : 0; | 1814 | return ret ? -EPROBE_DEFER : 0; |
1828 | } | 1815 | } |