diff options
| author | Vikram Mulukutla <markivx@codeaurora.org> | 2016-01-11 11:54:04 -0800 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2017-03-28 02:06:49 -0700 |
| commit | d5fdefbeb5985d669e591a58be40847f53d9f8ce (patch) | |
| tree | 2721bb91ed72386c42d63cccea29b29f590b0138 | |
| parent | 40a081e38b3706b91200ba2ba7ab6c7ce3fdcc51 (diff) | |
clk: msm: clock-alpha-pll: Allow interrupts to be enabled during set_rate
Some PLL implementations depend on the CPU being able to handle
certain interrupts in order for the set_rate operation to
complete. Allow interrupts to be handled in the set_rate op.
CRs-Fixed: 960701
Change-Id: I6fda5ed9eb7d6f2e2cd91c58ebabfd7bc1c8a2fc
Signed-off-by: Vikram Mulukutla <markivx@codeaurora.org>
| -rw-r--r-- | drivers/clk/msm/clock-alpha-pll.c | 11 | ||||
| -rw-r--r-- | include/soc/qcom/clock-alpha-pll.h | 1 |
2 files changed, 10 insertions, 2 deletions
diff --git a/drivers/clk/msm/clock-alpha-pll.c b/drivers/clk/msm/clock-alpha-pll.c index b9a1167a790d..834315aa4993 100644 --- a/drivers/clk/msm/clock-alpha-pll.c +++ b/drivers/clk/msm/clock-alpha-pll.c @@ -612,13 +612,17 @@ static int alpha_pll_set_rate(struct clk *c, unsigned long rate) return -EINVAL; } + if (pll->no_irq_dis) + spin_lock(&c->lock); + else + spin_lock_irqsave(&c->lock, flags); + /* * For PLLs that do not support dynamic programming (dynamic_update * is not set), ensure PLL is off before changing rate. For * optimization reasons, assume no downstream clock is actively * using it. */ - spin_lock_irqsave(&c->lock, flags); if (c->count && !pll->dynamic_update) c->ops->disable(c); @@ -644,7 +648,10 @@ static int alpha_pll_set_rate(struct clk *c, unsigned long rate) if (c->count && !pll->dynamic_update) c->ops->enable(c); - spin_unlock_irqrestore(&c->lock, flags); + if (pll->no_irq_dis) + spin_unlock(&c->lock); + else + spin_unlock_irqrestore(&c->lock, flags); return 0; } diff --git a/include/soc/qcom/clock-alpha-pll.h b/include/soc/qcom/clock-alpha-pll.h index 0b5329ba817c..acffe33dc4f3 100644 --- a/include/soc/qcom/clock-alpha-pll.h +++ b/include/soc/qcom/clock-alpha-pll.h @@ -79,6 +79,7 @@ struct alpha_pll_clk { * that the workaround is required. */ bool offline_bit_workaround; + bool no_irq_dis; bool is_fabia; unsigned long min_supported_freq; struct clk c; |
