From d28054020f97c7c9f15327a53945f0f40ffc5d7a Mon Sep 17 00:00:00 2001 From: "Rafael J. Wysocki" Date: Thu, 14 Jul 2011 20:59:20 +0200 Subject: PM / Domains: Take .power_off() error code into account Currently pm_genpd_poweroff() discards error codes returned by the PM domain's .power_off() callback, because it's safer to always regard the domain as inaccessible to drivers after a failing .power_off(). Still, there are situations in which the low-level code may want to indicate that it doesn't want to power off the domain, so allow it to do that by returning -EBUSY from .power_off(). Signed-off-by: Rafael J. Wysocki Acked-by: Magnus Damm --- drivers/base/power/domain.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'drivers/base/power/domain.c') diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index 00ed4f32a4d..be8714aa9dd 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -312,8 +312,16 @@ static int pm_genpd_poweroff(struct generic_pm_domain *genpd) } } - if (genpd->power_off) - genpd->power_off(genpd); + if (genpd->power_off) { + ret = genpd->power_off(genpd); + if (ret == -EBUSY) { + genpd_set_active(genpd); + if (parent) + genpd_release_lock(parent); + + goto out; + } + } genpd->status = GPD_STATE_POWER_OFF; -- cgit v1.2.3