Thread (27 messages) 27 messages, 4 authors, 2013-01-17

[PATCH v4 2/9] clk: tegra: Add tegra specific clocks

From: Sivaram Nair <hidden>
Date: 2013-01-14 07:29:17
Also in: linux-tegra, lkml

On Fri, Jan 11, 2013 at 08:46:20AM +0100, Prashant Gaikwad wrote:
+static int _program_pll(struct clk_hw *hw, struct tegra_clk_pll_freq_table *cfg,
+                       unsigned long rate)
+{
+       struct tegra_clk_pll *pll = to_clk_pll(hw);
+       unsigned long flags = 0;
+       u32 divp, val, old_base;
+       int state;
+
+       divp = __ffs(cfg->p);
+
+       if (pll->flags & TEGRA_PLLU)
+               divp ^= 1;
+
+       if (pll->lock)
+               spin_lock_irqsave(pll->lock, flags);
+
+       old_base = val = pll_readl_base(pll);
+       val &= ~((divm_mask(pll) << pll->divm_shift) |
+                (divn_mask(pll) << pll->divn_shift) |
+                (divp_mask(pll) << pll->divp_shift));
+       val |= ((cfg->m << pll->divm_shift) |
+               (cfg->n << pll->divn_shift) |
+               (divp << pll->divp_shift));
+       if (val == old_base) {
+               if (pll->lock)
+                       spin_unlock_irqrestore(pll->lock, flags);
+               return 0;
+       }
+
+       state = clk_pll_is_enabled(hw);
+
+       if (state) {
+               if (pll->lock)
+                       spin_unlock_irqrestore(pll->lock, flags);
+
+               clk_pll_disable(hw);
+               val &= ~(PLL_BASE_BYPASS | PLL_BASE_ENABLE);
+
+               if (pll->lock)
+                       spin_lock_irqsave(pll->lock, flags);
Instead of doing spin_unlock, disable and spin_lock, can't we use
_clk_pll_disable here, without the locks?

regards,
Sivaram
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help