diff options
Diffstat (limited to 'drivers/base/dd.c')
-rw-r--r-- | drivers/base/dd.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/base/dd.c b/drivers/base/dd.c index 49a4a12fafef..e843fdbe4925 100644 --- a/drivers/base/dd.c +++ b/drivers/base/dd.c | |||
@@ -298,6 +298,12 @@ static int really_probe(struct device *dev, struct device_driver *drv) | |||
298 | goto probe_failed; | 298 | goto probe_failed; |
299 | } | 299 | } |
300 | 300 | ||
301 | if (dev->pm_domain && dev->pm_domain->activate) { | ||
302 | ret = dev->pm_domain->activate(dev); | ||
303 | if (ret) | ||
304 | goto probe_failed; | ||
305 | } | ||
306 | |||
301 | if (dev->bus->probe) { | 307 | if (dev->bus->probe) { |
302 | ret = dev->bus->probe(dev); | 308 | ret = dev->bus->probe(dev); |
303 | if (ret) | 309 | if (ret) |
@@ -308,6 +314,9 @@ static int really_probe(struct device *dev, struct device_driver *drv) | |||
308 | goto probe_failed; | 314 | goto probe_failed; |
309 | } | 315 | } |
310 | 316 | ||
317 | if (dev->pm_domain && dev->pm_domain->sync) | ||
318 | dev->pm_domain->sync(dev); | ||
319 | |||
311 | driver_bound(dev); | 320 | driver_bound(dev); |
312 | ret = 1; | 321 | ret = 1; |
313 | pr_debug("bus: '%s': %s: bound device %s to driver %s\n", | 322 | pr_debug("bus: '%s': %s: bound device %s to driver %s\n", |
@@ -319,6 +328,8 @@ probe_failed: | |||
319 | driver_sysfs_remove(dev); | 328 | driver_sysfs_remove(dev); |
320 | dev->driver = NULL; | 329 | dev->driver = NULL; |
321 | dev_set_drvdata(dev, NULL); | 330 | dev_set_drvdata(dev, NULL); |
331 | if (dev->pm_domain && dev->pm_domain->dismiss) | ||
332 | dev->pm_domain->dismiss(dev); | ||
322 | 333 | ||
323 | switch (ret) { | 334 | switch (ret) { |
324 | case -EPROBE_DEFER: | 335 | case -EPROBE_DEFER: |
@@ -529,6 +540,9 @@ static void __device_release_driver(struct device *dev) | |||
529 | devres_release_all(dev); | 540 | devres_release_all(dev); |
530 | dev->driver = NULL; | 541 | dev->driver = NULL; |
531 | dev_set_drvdata(dev, NULL); | 542 | dev_set_drvdata(dev, NULL); |
543 | if (dev->pm_domain && dev->pm_domain->dismiss) | ||
544 | dev->pm_domain->dismiss(dev); | ||
545 | |||
532 | klist_remove(&dev->p->knode_driver); | 546 | klist_remove(&dev->p->knode_driver); |
533 | if (dev->bus) | 547 | if (dev->bus) |
534 | blocking_notifier_call_chain(&dev->bus->p->bus_notifier, | 548 | blocking_notifier_call_chain(&dev->bus->p->bus_notifier, |