aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/clk/clk.c')
-rw-r--r--drivers/clk/clk.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
index 6807b7f0879d..600614f2193b 100644
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -60,6 +60,7 @@ struct clk_core {
60 struct clk_core *new_child; 60 struct clk_core *new_child;
61 unsigned long flags; 61 unsigned long flags;
62 bool orphan; 62 bool orphan;
63 bool rpm_enabled;
63 bool need_sync; 64 bool need_sync;
64 bool boot_enabled; 65 bool boot_enabled;
65 unsigned int enable_count; 66 unsigned int enable_count;
@@ -97,9 +98,9 @@ struct clk {
97/*** runtime pm ***/ 98/*** runtime pm ***/
98static int clk_pm_runtime_get(struct clk_core *core) 99static int clk_pm_runtime_get(struct clk_core *core)
99{ 100{
100 int ret = 0; 101 int ret;
101 102
102 if (!core->dev) 103 if (!core->rpm_enabled)
103 return 0; 104 return 0;
104 105
105 ret = pm_runtime_get_sync(core->dev); 106 ret = pm_runtime_get_sync(core->dev);
@@ -108,7 +109,7 @@ static int clk_pm_runtime_get(struct clk_core *core)
108 109
109static void clk_pm_runtime_put(struct clk_core *core) 110static void clk_pm_runtime_put(struct clk_core *core)
110{ 111{
111 if (!core->dev) 112 if (!core->rpm_enabled)
112 return; 113 return;
113 114
114 pm_runtime_put_sync(core->dev); 115 pm_runtime_put_sync(core->dev);
@@ -228,7 +229,7 @@ static bool clk_core_is_enabled(struct clk_core *core)
228 * taking enable spinlock, but the below check is needed if one tries 229 * taking enable spinlock, but the below check is needed if one tries
229 * to call it from other places. 230 * to call it from other places.
230 */ 231 */
231 if (core->dev) { 232 if (core->rpm_enabled) {
232 pm_runtime_get_noresume(core->dev); 233 pm_runtime_get_noresume(core->dev);
233 if (!pm_runtime_active(core->dev)) { 234 if (!pm_runtime_active(core->dev)) {
234 ret = false; 235 ret = false;
@@ -238,7 +239,7 @@ static bool clk_core_is_enabled(struct clk_core *core)
238 239
239 ret = core->ops->is_enabled(core->hw); 240 ret = core->ops->is_enabled(core->hw);
240done: 241done:
241 if (core->dev) 242 if (core->rpm_enabled)
242 pm_runtime_put(core->dev); 243 pm_runtime_put(core->dev);
243 244
244 return ret; 245 return ret;
@@ -3351,7 +3352,8 @@ struct clk *clk_register(struct device *dev, struct clk_hw *hw)
3351 core->ops = hw->init->ops; 3352 core->ops = hw->init->ops;
3352 3353
3353 if (dev && pm_runtime_enabled(dev)) 3354 if (dev && pm_runtime_enabled(dev))
3354 core->dev = dev; 3355 core->rpm_enabled = true;
3356 core->dev = dev;
3355 if (dev && dev->driver) 3357 if (dev && dev->driver)
3356 core->owner = dev->driver->owner; 3358 core->owner = dev->driver->owner;
3357 core->hw = hw; 3359 core->hw = hw;