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:
Vikram Mulukutla 2016-01-11 11:54:04 -08:00 committed by Gerrit - the friendly Code Review server
parent 687a4eb82b
commit 936388f5f5
2 changed files with 10 additions and 2 deletions

View file

@ -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;
}

View file

@ -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;