diff options
Diffstat (limited to 'drivers/clk/clk.c')
-rw-r--r-- | drivers/clk/clk.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index 037035a46b33..ea67ac81c6f9 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c | |||
@@ -2311,8 +2311,11 @@ static int clk_core_set_phase_nolock(struct clk_core *core, int degrees) | |||
2311 | 2311 | ||
2312 | trace_clk_set_phase(core, degrees); | 2312 | trace_clk_set_phase(core, degrees); |
2313 | 2313 | ||
2314 | if (core->ops->set_phase) | 2314 | if (core->ops->set_phase) { |
2315 | ret = core->ops->set_phase(core->hw, degrees); | 2315 | ret = core->ops->set_phase(core->hw, degrees); |
2316 | if (!ret) | ||
2317 | core->phase = degrees; | ||
2318 | } | ||
2316 | 2319 | ||
2317 | trace_clk_set_phase_complete(core, degrees); | 2320 | trace_clk_set_phase_complete(core, degrees); |
2318 | 2321 | ||
@@ -2372,6 +2375,9 @@ static int clk_core_get_phase(struct clk_core *core) | |||
2372 | int ret; | 2375 | int ret; |
2373 | 2376 | ||
2374 | clk_prepare_lock(); | 2377 | clk_prepare_lock(); |
2378 | /* Always try to update cached phase if possible */ | ||
2379 | if (core->ops->get_phase) | ||
2380 | core->phase = core->ops->get_phase(core->hw); | ||
2375 | ret = core->phase; | 2381 | ret = core->phase; |
2376 | clk_prepare_unlock(); | 2382 | clk_prepare_unlock(); |
2377 | 2383 | ||