Lines Matching refs:div
40 for (clkt = table; clkt->div; clkt++) in _get_table_maxdiv()
41 if (clkt->div > maxdiv) in _get_table_maxdiv()
42 maxdiv = clkt->div; in _get_table_maxdiv()
51 for (clkt = table; clkt->div; clkt++) in _get_table_mindiv()
52 if (clkt->div < mindiv) in _get_table_mindiv()
53 mindiv = clkt->div; in _get_table_mindiv()
74 for (clkt = table; clkt->div; clkt++) in _get_table_div()
76 return clkt->div; in _get_table_div()
95 unsigned int div) in _get_table_val() argument
99 for (clkt = table; clkt->div; clkt++) in _get_table_val()
100 if (clkt->div == div) in _get_table_val()
106 unsigned int div, unsigned long flags, u8 width) in _get_val() argument
109 return div; in _get_val()
111 return __ffs(div); in _get_val()
113 return (div == div_mask(width) + 1) ? 0 : div; in _get_val()
115 return _get_table_val(table, div); in _get_val()
116 return div - 1; in _get_val()
125 unsigned int div; in divider_recalc_rate() local
127 div = _get_div(table, val, flags, divider->width); in divider_recalc_rate()
128 if (!div) { in divider_recalc_rate()
135 return DIV_ROUND_UP_ULL((u64)parent_rate, div); in divider_recalc_rate()
153 unsigned int div) in _is_valid_table_div() argument
157 for (clkt = table; clkt->div; clkt++) in _is_valid_table_div()
158 if (clkt->div == div) in _is_valid_table_div()
163 static bool _is_valid_div(const struct clk_div_table *table, unsigned int div, in _is_valid_div() argument
167 return is_power_of_2(div); in _is_valid_div()
169 return _is_valid_table_div(table, div); in _is_valid_div()
173 static int _round_up_table(const struct clk_div_table *table, int div) in _round_up_table() argument
178 for (clkt = table; clkt->div; clkt++) { in _round_up_table()
179 if (clkt->div == div) in _round_up_table()
180 return clkt->div; in _round_up_table()
181 else if (clkt->div < div) in _round_up_table()
184 if ((clkt->div - div) < (up - div)) in _round_up_table()
185 up = clkt->div; in _round_up_table()
191 static int _round_down_table(const struct clk_div_table *table, int div) in _round_down_table() argument
196 for (clkt = table; clkt->div; clkt++) { in _round_down_table()
197 if (clkt->div == div) in _round_down_table()
198 return clkt->div; in _round_down_table()
199 else if (clkt->div > div) in _round_down_table()
202 if ((div - clkt->div) < (div - down)) in _round_down_table()
203 down = clkt->div; in _round_down_table()
213 int div = DIV_ROUND_UP_ULL((u64)parent_rate, rate); in _div_round_up() local
216 div = __roundup_pow_of_two(div); in _div_round_up()
218 div = _round_up_table(table, div); in _div_round_up()
220 return div; in _div_round_up()
266 static int _next_div(const struct clk_div_table *table, int div, in _next_div() argument
269 div++; in _next_div()
272 return __roundup_pow_of_two(div); in _next_div()
274 return _round_up_table(table, div); in _next_div()
276 return div; in _next_div()
341 int div; in divider_round_rate() local
343 div = clk_divider_bestdiv(hw, rate, prate, table, width, flags); in divider_round_rate()
345 return DIV_ROUND_UP_ULL((u64)*prate, div); in divider_round_rate()
372 unsigned int div, value; in divider_get_val() local
374 div = DIV_ROUND_UP_ULL((u64)parent_rate, rate); in divider_get_val()
376 if (!_is_valid_div(table, div, flags)) in divider_get_val()
379 value = _get_val(table, div, flags, width); in divider_get_val()
437 struct clk_divider *div; in _register_divider() local
449 div = kzalloc(sizeof(*div), GFP_KERNEL); in _register_divider()
450 if (!div) in _register_divider()
463 div->reg = reg; in _register_divider()
464 div->shift = shift; in _register_divider()
465 div->width = width; in _register_divider()
466 div->flags = clk_divider_flags; in _register_divider()
467 div->lock = lock; in _register_divider()
468 div->hw.init = &init; in _register_divider()
469 div->table = table; in _register_divider()
472 clk = clk_register(dev, &div->hw); in _register_divider()
475 kfree(div); in _register_divider()
529 struct clk_divider *div; in clk_unregister_divider() local
536 div = to_clk_divider(hw); in clk_unregister_divider()
539 kfree(div); in clk_unregister_divider()