Lines Matching refs:rate
94 struct clk_pll14xx *pll, unsigned long rate) in imx_get_pll_settings() argument
100 if (rate == rate_table[i].rate) in imx_get_pll_settings()
121 unsigned long rate, unsigned long prate) in pll1443x_calc_kdiv() argument
126 kdiv = ((rate * ((pdiv * 65536) << sdiv) + prate / 2) / prate) - (mdiv * 65536); in pll1443x_calc_kdiv()
131 static void imx_pll14xx_calc_settings(struct clk_pll14xx *pll, unsigned long rate, in imx_pll14xx_calc_settings() argument
152 tt = imx_get_pll_settings(pll, rate); in imx_pll14xx_calc_settings()
155 clk_hw_get_name(&pll->hw), prate, rate); in imx_pll14xx_calc_settings()
156 t->rate = tt->rate; in imx_pll14xx_calc_settings()
174 if (rate >= rate_min && rate <= rate_max) { in imx_pll14xx_calc_settings()
175 kdiv = pll1443x_calc_kdiv(mdiv, pdiv, sdiv, rate, prate); in imx_pll14xx_calc_settings()
177 clk_hw_get_name(&pll->hw), prate, rate, in imx_pll14xx_calc_settings()
180 t->rate = (unsigned int)fvco; in imx_pll14xx_calc_settings()
192 mdiv = DIV_ROUND_CLOSEST(rate * (pdiv << sdiv), prate); in imx_pll14xx_calc_settings()
195 kdiv = pll1443x_calc_kdiv(mdiv, pdiv, sdiv, rate, prate); in imx_pll14xx_calc_settings()
199 dist = abs((long)rate - (long)fvco); in imx_pll14xx_calc_settings()
202 t->rate = (unsigned int)fvco; in imx_pll14xx_calc_settings()
215 clk_hw_get_name(&pll->hw), prate, rate, t->rate, t->pdiv, t->sdiv, in imx_pll14xx_calc_settings()
219 static long clk_pll1416x_round_rate(struct clk_hw *hw, unsigned long rate, in clk_pll1416x_round_rate() argument
228 if (rate >= rate_table[i].rate) in clk_pll1416x_round_rate()
229 return rate_table[i].rate; in clk_pll1416x_round_rate()
232 return rate_table[pll->rate_count - 1].rate; in clk_pll1416x_round_rate()
235 static long clk_pll1443x_round_rate(struct clk_hw *hw, unsigned long rate, in clk_pll1443x_round_rate() argument
241 imx_pll14xx_calc_settings(pll, rate, *prate, &t); in clk_pll1443x_round_rate()
243 return t.rate; in clk_pll1443x_round_rate()
267 static inline bool clk_pll14xx_mp_change(const struct imx_pll14xx_rate_table *rate, in clk_pll14xx_mp_change() argument
275 return rate->mdiv != old_mdiv || rate->pdiv != old_pdiv; in clk_pll14xx_mp_change()
290 const struct imx_pll14xx_rate_table *rate; in clk_pll1416x_set_rate() local
294 rate = imx_get_pll_settings(pll, drate); in clk_pll1416x_set_rate()
295 if (!rate) { in clk_pll1416x_set_rate()
303 if (!clk_pll14xx_mp_change(rate, tmp)) { in clk_pll1416x_set_rate()
305 tmp |= FIELD_PREP(SDIV_MASK, rate->sdiv); in clk_pll1416x_set_rate()
324 div_val = FIELD_PREP(MDIV_MASK, rate->mdiv) | FIELD_PREP(PDIV_MASK, rate->pdiv) | in clk_pll1416x_set_rate()
325 FIELD_PREP(SDIV_MASK, rate->sdiv); in clk_pll1416x_set_rate()
356 struct imx_pll14xx_rate_table rate; in clk_pll1443x_set_rate() local
360 imx_pll14xx_calc_settings(pll, drate, prate, &rate); in clk_pll1443x_set_rate()
364 if (!clk_pll14xx_mp_change(&rate, div_ctl0)) { in clk_pll1443x_set_rate()
367 div_ctl0 |= FIELD_PREP(SDIV_MASK, rate.sdiv); in clk_pll1443x_set_rate()
370 writel_relaxed(FIELD_PREP(KDIV_MASK, rate.kdiv), in clk_pll1443x_set_rate()
385 div_ctl0 = FIELD_PREP(MDIV_MASK, rate.mdiv) | in clk_pll1443x_set_rate()
386 FIELD_PREP(PDIV_MASK, rate.pdiv) | in clk_pll1443x_set_rate()
387 FIELD_PREP(SDIV_MASK, rate.sdiv); in clk_pll1443x_set_rate()
390 writel_relaxed(FIELD_PREP(KDIV_MASK, rate.kdiv), pll->base + DIV_CTL1); in clk_pll1443x_set_rate()