aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/amba
diff options
context:
space:
mode:
authorUlf Hansson <ulf.hansson@linaro.org>2014-09-19 14:27:42 -0400
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2014-09-22 09:57:40 -0400
commit207f1a2d294e3781b56d1acecd48aaa3b4b7b2ad (patch)
treee056e2f1e8638fadd81c7b0cca87a7348a3026b3 /drivers/amba
parent676e7c257a339b44b8a613be145b22b85cf2ffc4 (diff)
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. 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>
Diffstat (limited to 'drivers/amba')
-rw-r--r--drivers/amba/bus.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c
index 3cf61a127ee5..8f5239377f91 100644
--- a/drivers/amba/bus.c
+++ b/drivers/amba/bus.c
@@ -182,9 +182,15 @@ static int amba_probe(struct device *dev)
182 int ret; 182 int ret;
183 183
184 do { 184 do {
185 ret = dev_pm_domain_attach(dev, true);
186 if (ret == -EPROBE_DEFER)
187 break;
188
185 ret = amba_get_enable_pclk(pcdev); 189 ret = amba_get_enable_pclk(pcdev);
186 if (ret) 190 if (ret) {
191 dev_pm_domain_detach(dev, true);
187 break; 192 break;
193 }
188 194
189 pm_runtime_get_noresume(dev); 195 pm_runtime_get_noresume(dev);
190 pm_runtime_set_active(dev); 196 pm_runtime_set_active(dev);
@@ -199,6 +205,7 @@ static int amba_probe(struct device *dev)
199 pm_runtime_put_noidle(dev); 205 pm_runtime_put_noidle(dev);
200 206
201 amba_put_disable_pclk(pcdev); 207 amba_put_disable_pclk(pcdev);
208 dev_pm_domain_detach(dev, true);
202 } while (0); 209 } while (0);
203 210
204 return ret; 211 return ret;
@@ -220,6 +227,7 @@ static int amba_remove(struct device *dev)
220 pm_runtime_put_noidle(dev); 227 pm_runtime_put_noidle(dev);
221 228
222 amba_put_disable_pclk(pcdev); 229 amba_put_disable_pclk(pcdev);
230 dev_pm_domain_detach(dev, true);
223 231
224 return ret; 232 return ret;
225} 233}