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>
This commit is contained in:
parent
687a4eb82b
commit
936388f5f5
2 changed files with 10 additions and 2 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue