Lines Matching refs:settings

74  * struct clk_si544_muldiv - Multiplier/divider settings
126 struct clk_si544_muldiv *settings)
135 settings->ls_div_bits = (reg[1] >> 4) & 0x07;
136 settings->hs_div = (reg[1] & 0x07) << 8 | reg[0];
142 settings->fb_div_int = reg[4] | (reg[5] & 0x07) << 8;
143 settings->fb_div_frac = reg[0] | reg[1] << 8 | reg[2] << 16 |
151 settings->delta_m = reg[0] << 8 | reg[1] << 16 | reg[2] << 24;
152 settings->delta_m >>= 8;
170 struct clk_si544_muldiv *settings)
175 reg[0] = settings->hs_div;
176 reg[1] = settings->hs_div >> 8 | settings->ls_div_bits << 4;
182 reg[0] = settings->fb_div_frac;
183 reg[1] = settings->fb_div_frac >> 8;
184 reg[2] = settings->fb_div_frac >> 16;
185 reg[3] = settings->fb_div_frac >> 24;
186 reg[4] = settings->fb_div_int;
187 reg[5] = settings->fb_div_int >> 8;
219 /* Calculate divider settings for a given frequency */
220 static int si544_calc_muldiv(struct clk_si544_muldiv *settings,
230 settings->ls_div_bits = 0;
233 settings->ls_div_bits = 0;
243 settings->ls_div_bits = res;
250 settings->hs_div = vco;
253 if ((settings->hs_div & 1) &&
254 (settings->hs_div > HS_DIV_MAX_ODD || settings->ls_div_bits))
255 ++settings->hs_div;
258 vco = (u64)ls_freq * settings->hs_div;
262 settings->fb_div_int = vco;
268 settings->fb_div_frac = vco;
271 settings->delta_m = 0;
276 /* Calculate resulting frequency given the register settings */
278 const struct clk_si544_muldiv *settings)
280 u32 d = settings->hs_div * BIT(settings->ls_div_bits);
284 vco = (u64)settings->fb_div_frac * FXO;
289 vco += (u64)settings->fb_div_int * FXO;
297 static unsigned long si544_calc_rate(const struct clk_si544_muldiv *settings)
299 unsigned long rate = si544_calc_center_rate(settings);
300 s64 delta = (s64)rate * (DELTA_M_FRAC_NUM * settings->delta_m);
307 if (settings->delta_m < 0)
320 struct clk_si544_muldiv settings;
323 err = si544_get_muldiv(data, &settings);
327 return si544_calc_rate(&settings);
364 struct clk_si544_muldiv settings;
375 err = si544_get_muldiv(data, &settings);
379 center = si544_calc_center_rate(&settings);
388 err = si544_calc_muldiv(&settings, rate);
403 err = si544_set_delta_m(data, settings.delta_m);
407 err = si544_set_muldiv(data, &settings);