diff options
author | 2015-01-27 21:13:45 +0100 | |
---|---|---|
committer | 2015-02-03 22:56:54 +0100 | |
commit | b472c2faf471b72e7f3ffe35200dfb3d227487b7 (patch) | |
tree | 5dd778d65af07b3f4ae74d931e3bd4ac7a03ad5d /drivers/base/power | |
parent | PM / Domains: Re-order initialization of generic_pm_domain_data (diff) | |
download | linux-b472c2faf471b72e7f3ffe35200dfb3d227487b7.tar.gz linux-b472c2faf471b72e7f3ffe35200dfb3d227487b7.tar.bz2 linux-b472c2faf471b72e7f3ffe35200dfb3d227487b7.zip |
PM / Domains: Handle errors from genpd's ->attach_dev() callback
The optional genpd's ->attach_dev() callback is invoked from
__pm_genpd_add_device(). Let's add error handling from the response
from this callback and propagate the error code.
When __pm_genpd_add_device() is invoked through the generic OF-based PM
domain look-up path, the device is being probed. Returning an error
will mean the device won't be attached to its PM domain. Errors of
-EPROBE_DEFER get special treatment and is propagated to the driver
core.
Therefore this change also enables the ->attach_dev() callback to
be able to request for a deferred probe sequence.
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'drivers/base/power')
-rw-r--r-- | drivers/base/power/domain.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index 0fd5ee127c30..ba4abbe4693c 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -1467,8 +1467,9 @@ int __pm_genpd_add_device(struct generic_pm_domain *genpd, struct device *dev, goto out; } - if (genpd->attach_dev) - genpd->attach_dev(genpd, dev); + ret = genpd->attach_dev ? genpd->attach_dev(genpd, dev) : 0; + if (ret) + goto out; genpd->device_count++; genpd->max_off_time_changed = true; |