UPSTREAM: amba: Add support for attach/detach of PM domains

AMBA devices may on some SoCs resides in PM domains. To be able to
manage these devices from there, let's try to attach devices to their
corresponding PM domain during the probe phase.

To reverse these actions at the remove phase, we try to detach the
device from its PM domain.

BUG=chrome-os-partner:30167
TEST=Build and boot; future power domain patches can work

Change-Id: Ie09d4d80ce73dd8d9ebe52ec717b51035c33ad74
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Reviewed-by: Kevin Hilman <khilman@linaro.org>
Reviewed-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Doug Anderson <dianders@chromium.org>
(cherry picked from git.kernel.org rafael/linux-pm.git linux-next
 commit 207f1a2d29)
Reviewed-on: https://chromium-review.googlesource.com/217920
Reviewed-by: Dmitry Torokhov <dtor@chromium.org>
This commit is contained in:
Ulf Hansson
2014-09-19 20:27:42 +02:00
committed by chrome-internal-fetch
parent c81943c323
commit 87d287f036

View File

@@ -182,10 +182,16 @@ static int amba_probe(struct device *dev)
int ret;
do {
ret = amba_get_enable_pclk(pcdev);
if (ret)
ret = dev_pm_domain_attach(dev, true);
if (ret == -EPROBE_DEFER)
break;
ret = amba_get_enable_pclk(pcdev);
if (ret) {
dev_pm_domain_detach(dev, true);
break;
}
pm_runtime_get_noresume(dev);
pm_runtime_set_active(dev);
pm_runtime_enable(dev);
@@ -199,6 +205,7 @@ static int amba_probe(struct device *dev)
pm_runtime_put_noidle(dev);
amba_put_disable_pclk(pcdev);
dev_pm_domain_detach(dev, true);
} while (0);
return ret;
@@ -220,6 +227,7 @@ static int amba_remove(struct device *dev)
pm_runtime_put_noidle(dev);
amba_put_disable_pclk(pcdev);
dev_pm_domain_detach(dev, true);
return ret;
}