Lines Matching refs:clk

61 static const struct clksel *_get_clksel_by_parent(struct clk_hw_omap *clk,  in _get_clksel_by_parent()  argument
62 struct clk *src_clk) in _get_clksel_by_parent()
69 for (clks = clk->clksel; clks->parent; clks++) in _get_clksel_by_parent()
76 __clk_get_name(clk->hw.clk), __clk_get_name(src_clk)); in _get_clksel_by_parent()
96 static void _write_clksel_reg(struct clk_hw_omap *clk, u32 field_val) in _write_clksel_reg() argument
100 v = omap2_clk_readl(clk, clk->clksel_reg); in _write_clksel_reg()
101 v &= ~clk->clksel_mask; in _write_clksel_reg()
102 v |= field_val << __ffs(clk->clksel_mask); in _write_clksel_reg()
103 omap2_clk_writel(v, clk, clk->clksel_reg); in _write_clksel_reg()
105 v = omap2_clk_readl(clk, clk->clksel_reg); /* OCP barrier */ in _write_clksel_reg()
119 static u32 _clksel_to_divisor(struct clk_hw_omap *clk, u32 field_val) in _clksel_to_divisor() argument
123 struct clk *parent; in _clksel_to_divisor()
125 parent = __clk_get_parent(clk->hw.clk); in _clksel_to_divisor()
127 clks = _get_clksel_by_parent(clk, parent); in _clksel_to_divisor()
142 __clk_get_name(clk->hw.clk), field_val, in _clksel_to_divisor()
160 static u32 _divisor_to_clksel(struct clk_hw_omap *clk, u32 div) in _divisor_to_clksel() argument
164 struct clk *parent; in _divisor_to_clksel()
169 parent = __clk_get_parent(clk->hw.clk); in _divisor_to_clksel()
170 clks = _get_clksel_by_parent(clk, parent); in _divisor_to_clksel()
184 __clk_get_name(clk->hw.clk), div, in _divisor_to_clksel()
200 static u32 _read_divisor(struct clk_hw_omap *clk) in _read_divisor() argument
204 if (!clk->clksel || !clk->clksel_mask) in _read_divisor()
207 v = omap2_clk_readl(clk, clk->clksel_reg); in _read_divisor()
208 v &= clk->clksel_mask; in _read_divisor()
209 v >>= __ffs(clk->clksel_mask); in _read_divisor()
211 return _clksel_to_divisor(clk, v); in _read_divisor()
228 u32 omap2_clksel_round_rate_div(struct clk_hw_omap *clk, in omap2_clksel_round_rate_div() argument
236 struct clk *parent; in omap2_clksel_round_rate_div()
240 parent = __clk_get_parent(clk->hw.clk); in omap2_clksel_round_rate_div()
241 clk_name = __clk_get_name(clk->hw.clk); in omap2_clksel_round_rate_div()
244 if (!clk->clksel || !clk->clksel_mask) in omap2_clksel_round_rate_div()
252 clks = _get_clksel_by_parent(clk, parent); in omap2_clksel_round_rate_div()
308 struct clk_hw_omap *clk = to_clk_hw_omap(hw); in omap2_clksel_find_parent_index() local
312 struct clk *parent; in omap2_clksel_find_parent_index()
316 parent = __clk_get_parent(hw->clk); in omap2_clksel_find_parent_index()
317 clk_name = __clk_get_name(hw->clk); in omap2_clksel_find_parent_index()
320 WARN((!clk->clksel || !clk->clksel_mask), in omap2_clksel_find_parent_index()
323 r = omap2_clk_readl(clk, clk->clksel_reg) & clk->clksel_mask; in omap2_clksel_find_parent_index()
324 r >>= __ffs(clk->clksel_mask); in omap2_clksel_find_parent_index()
326 for (clks = clk->clksel; clks->parent && !found; clks++) { in omap2_clksel_find_parent_index()
360 struct clk_hw_omap *clk = to_clk_hw_omap(hw); in omap2_clksel_recalc() local
365 div = _read_divisor(clk); in omap2_clksel_recalc()
372 __clk_get_name(hw->clk), rate, div); in omap2_clksel_recalc()
391 struct clk_hw_omap *clk = to_clk_hw_omap(hw); in omap2_clksel_round_rate() local
394 return omap2_clksel_round_rate_div(clk, target_rate, &new_div); in omap2_clksel_round_rate()
415 struct clk_hw_omap *clk = to_clk_hw_omap(hw); in omap2_clksel_set_rate() local
418 if (!clk->clksel || !clk->clksel_mask) in omap2_clksel_set_rate()
421 validrate = omap2_clksel_round_rate_div(clk, rate, &new_div); in omap2_clksel_set_rate()
425 field_val = _divisor_to_clksel(clk, new_div); in omap2_clksel_set_rate()
429 _write_clksel_reg(clk, field_val); in omap2_clksel_set_rate()
431 pr_debug("clock: %s: set rate to %ld\n", __clk_get_name(hw->clk), in omap2_clksel_set_rate()
432 __clk_get_rate(hw->clk)); in omap2_clksel_set_rate()
459 struct clk_hw_omap *clk = to_clk_hw_omap(hw); in omap2_clksel_set_parent() local
461 if (!clk->clksel || !clk->clksel_mask) in omap2_clksel_set_parent()
464 _write_clksel_reg(clk, field_val); in omap2_clksel_set_parent()