Lines Matching refs:pll

38 #include "clk-pll.h"
46 static int __pll_round_closest_mult(struct meson_clk_pll_data *pll)
48 if ((pll->flags & CLK_MESON_PLL_ROUND_CLOSEST) &&
49 !MESON_PARM_APPLICABLE(&pll->frac))
58 struct meson_clk_pll_data *pll)
62 if (frac && MESON_PARM_APPLICABLE(&pll->frac)) {
66 (1 << pll->frac.width));
76 struct meson_clk_pll_data *pll = meson_clk_pll_data(clk);
79 n = meson_parm_read(clk->map, &pll->n);
89 m = meson_parm_read(clk->map, &pll->m);
91 frac = MESON_PARM_APPLICABLE(&pll->frac) ?
92 meson_parm_read(clk->map, &pll->frac) :
95 return __pll_params_to_rate(parent_rate, m, n, frac, pll);
102 struct meson_clk_pll_data *pll)
104 unsigned int frac_max = (1 << pll->frac.width);
111 if (pll->flags & CLK_MESON_PLL_ROUND_CLOSEST)
124 struct meson_clk_pll_data *pll)
126 if (__pll_round_closest_mult(pll)) {
142 struct meson_clk_pll_data *pll)
144 if (!pll->table[index].n)
147 *m = pll->table[index].m;
148 *n = pll->table[index].n;
156 struct meson_clk_pll_data *pll)
160 if (__pll_round_closest_mult(pll))
171 struct meson_clk_pll_data *pll)
176 if (*n >= (1 << pll->n.width))
181 if (rate <= pll->range->min * parent_rate) {
182 *m = pll->range->min;
184 } else if (rate >= pll->range->max * parent_rate) {
185 *m = pll->range->max;
190 *m = meson_clk_get_pll_range_m(rate, parent_rate, *n, pll);
193 if (*m >= (1 << pll->m.width))
204 struct meson_clk_pll_data *pll)
206 if (pll->range)
208 index, m, n, pll);
209 else if (pll->table)
210 return meson_clk_get_pll_table_index(index, m, n, pll);
219 struct meson_clk_pll_data *pll)
227 i, &m, &n, pll);
231 now = __pll_params_to_rate(parent_rate, m, n, 0, pll);
232 if (meson_clk_pll_is_better(rate, best, now, pll)) {
249 struct meson_clk_pll_data *pll = meson_clk_pll_data(clk);
254 ret = meson_clk_get_pll_settings(rate, *parent_rate, &m, &n, pll);
258 round = __pll_params_to_rate(*parent_rate, m, n, 0, pll);
260 if (!MESON_PARM_APPLICABLE(&pll->frac) || rate == round)
267 frac = __pll_params_with_frac(rate, *parent_rate, m, n, pll);
269 return __pll_params_to_rate(*parent_rate, m, n, frac, pll);
275 struct meson_clk_pll_data *pll = meson_clk_pll_data(clk);
280 if (meson_parm_read(clk->map, &pll->l))
292 struct meson_clk_pll_data *pll = meson_clk_pll_data(clk);
294 if (pll->init_count) {
295 meson_parm_write(clk->map, &pll->rst, 1);
296 regmap_multi_reg_write(clk->map, pll->init_regs,
297 pll->init_count);
298 meson_parm_write(clk->map, &pll->rst, 0);
307 struct meson_clk_pll_data *pll = meson_clk_pll_data(clk);
309 if (meson_parm_read(clk->map, &pll->rst) ||
310 !meson_parm_read(clk->map, &pll->en) ||
311 !meson_parm_read(clk->map, &pll->l))
330 struct meson_clk_pll_data *pll = meson_clk_pll_data(clk);
336 /* Make sure the pll is in reset */
337 meson_parm_write(clk->map, &pll->rst, 1);
339 /* Enable the pll */
340 meson_parm_write(clk->map, &pll->en, 1);
342 /* Take the pll out reset */
343 meson_parm_write(clk->map, &pll->rst, 0);
354 struct meson_clk_pll_data *pll = meson_clk_pll_data(clk);
356 /* Put the pll is in reset */
357 meson_parm_write(clk->map, &pll->rst, 1);
359 /* Disable the pll */
360 meson_parm_write(clk->map, &pll->en, 0);
367 struct meson_clk_pll_data *pll = meson_clk_pll_data(clk);
377 ret = meson_clk_get_pll_settings(rate, parent_rate, &m, &n, pll);
381 enabled = meson_parm_read(clk->map, &pll->en);
385 meson_parm_write(clk->map, &pll->n, n);
386 meson_parm_write(clk->map, &pll->m, m);
388 if (MESON_PARM_APPLICABLE(&pll->frac)) {
389 frac = __pll_params_with_frac(rate, parent_rate, m, n, pll);
390 meson_parm_write(clk->map, &pll->frac, frac);
393 /* If the pll is stopped, bail out now */
399 pr_warn("%s: pll did not lock, trying to restore old rate %lu\n",