aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/base/power/clock_ops.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/base/power/clock_ops.c')
-rw-r--r--drivers/base/power/clock_ops.c43
1 files changed, 41 insertions, 2 deletions
diff --git a/drivers/base/power/clock_ops.c b/drivers/base/power/clock_ops.c
index 7fdd0172605a..acef9f9f759a 100644
--- a/drivers/base/power/clock_ops.c
+++ b/drivers/base/power/clock_ops.c
@@ -15,6 +15,7 @@
15#include <linux/clkdev.h> 15#include <linux/clkdev.h>
16#include <linux/slab.h> 16#include <linux/slab.h>
17#include <linux/err.h> 17#include <linux/err.h>
18#include <linux/pm_runtime.h>
18 19
19#ifdef CONFIG_PM 20#ifdef CONFIG_PM
20 21
@@ -67,7 +68,8 @@ static void pm_clk_acquire(struct device *dev, struct pm_clock_entry *ce)
67 } else { 68 } else {
68 clk_prepare(ce->clk); 69 clk_prepare(ce->clk);
69 ce->status = PCE_STATUS_ACQUIRED; 70 ce->status = PCE_STATUS_ACQUIRED;
70 dev_dbg(dev, "Clock %s managed by runtime PM.\n", ce->con_id); 71 dev_dbg(dev, "Clock %pC con_id %s managed by runtime PM.\n",
72 ce->clk, ce->con_id);
71 } 73 }
72} 74}
73 75
@@ -93,7 +95,7 @@ static int __pm_clk_add(struct device *dev, const char *con_id,
93 return -ENOMEM; 95 return -ENOMEM;
94 } 96 }
95 } else { 97 } else {
96 if (IS_ERR(ce->clk) || !__clk_get(clk)) { 98 if (IS_ERR(clk) || !__clk_get(clk)) {
97 kfree(ce); 99 kfree(ce);
98 return -ENOENT; 100 return -ENOENT;
99 } 101 }
@@ -367,6 +369,43 @@ static int pm_clk_notify(struct notifier_block *nb,
367 return 0; 369 return 0;
368} 370}
369 371
372int pm_clk_runtime_suspend(struct device *dev)
373{
374 int ret;
375
376 dev_dbg(dev, "%s\n", __func__);
377
378 ret = pm_generic_runtime_suspend(dev);
379 if (ret) {
380 dev_err(dev, "failed to suspend device\n");
381 return ret;
382 }
383
384 ret = pm_clk_suspend(dev);
385 if (ret) {
386 dev_err(dev, "failed to suspend clock\n");
387 pm_generic_runtime_resume(dev);
388 return ret;
389 }
390
391 return 0;
392}
393
394int pm_clk_runtime_resume(struct device *dev)
395{
396 int ret;
397
398 dev_dbg(dev, "%s\n", __func__);
399
400 ret = pm_clk_resume(dev);
401 if (ret) {
402 dev_err(dev, "failed to resume clock\n");
403 return ret;
404 }
405
406 return pm_generic_runtime_resume(dev);
407}
408
370#else /* !CONFIG_PM */ 409#else /* !CONFIG_PM */
371 410
372/** 411/**