Lines Matching full:settings
68 * struct clk_si544_muldiv - Multiplier/divider settings
118 struct clk_si544_muldiv *settings) in si544_get_muldiv() argument
127 settings->ls_div_bits = (reg[1] >> 4) & 0x07; in si544_get_muldiv()
128 settings->hs_div = (reg[1] & 0x07) << 8 | reg[0]; in si544_get_muldiv()
134 settings->fb_div_int = reg[4] | (reg[5] & 0x07) << 8; in si544_get_muldiv()
135 settings->fb_div_frac = reg[0] | reg[1] << 8 | reg[2] << 16 | in si544_get_muldiv()
141 struct clk_si544_muldiv *settings) in si544_set_muldiv() argument
146 reg[0] = settings->hs_div; in si544_set_muldiv()
147 reg[1] = settings->hs_div >> 8 | settings->ls_div_bits << 4; in si544_set_muldiv()
153 reg[0] = settings->fb_div_frac; in si544_set_muldiv()
154 reg[1] = settings->fb_div_frac >> 8; in si544_set_muldiv()
155 reg[2] = settings->fb_div_frac >> 16; in si544_set_muldiv()
156 reg[3] = settings->fb_div_frac >> 24; in si544_set_muldiv()
157 reg[4] = settings->fb_div_int; in si544_set_muldiv()
158 reg[5] = settings->fb_div_int >> 8; in si544_set_muldiv()
190 /* Calculate divider settings for a given frequency */
191 static int si544_calc_muldiv(struct clk_si544_muldiv *settings, in si544_calc_muldiv() argument
201 settings->ls_div_bits = 0; in si544_calc_muldiv()
204 settings->ls_div_bits = 0; in si544_calc_muldiv()
214 settings->ls_div_bits = res; in si544_calc_muldiv()
221 settings->hs_div = vco; in si544_calc_muldiv()
224 if ((settings->hs_div & 1) && in si544_calc_muldiv()
225 (settings->hs_div > HS_DIV_MAX_ODD || settings->ls_div_bits)) in si544_calc_muldiv()
226 ++settings->hs_div; in si544_calc_muldiv()
229 vco = (u64)ls_freq * settings->hs_div; in si544_calc_muldiv()
233 settings->fb_div_int = vco; in si544_calc_muldiv()
239 settings->fb_div_frac = vco; in si544_calc_muldiv()
244 /* Calculate resulting frequency given the register settings */
245 static unsigned long si544_calc_rate(struct clk_si544_muldiv *settings) in si544_calc_rate() argument
247 u32 d = settings->hs_div * BIT(settings->ls_div_bits); in si544_calc_rate()
251 vco = (u64)settings->fb_div_frac * FXO; in si544_calc_rate()
256 vco += (u64)settings->fb_div_int * FXO; in si544_calc_rate()
268 struct clk_si544_muldiv settings; in si544_recalc_rate() local
271 err = si544_get_muldiv(data, &settings); in si544_recalc_rate()
275 return si544_calc_rate(&settings); in si544_recalc_rate()
282 struct clk_si544_muldiv settings; in si544_round_rate() local
288 err = si544_calc_muldiv(&settings, rate); in si544_round_rate()
292 return si544_calc_rate(&settings); in si544_round_rate()
302 struct clk_si544_muldiv settings; in si544_set_rate() local
309 err = si544_calc_muldiv(&settings, rate); in si544_set_rate()
325 err = si544_set_muldiv(data, &settings); in si544_set_rate()