Lines Matching full:settings
62 /* Multiplier/divider settings */
106 struct clk_si514_muldiv *settings) in si514_get_muldiv() argument
116 settings->m_frac = reg[0] | reg[1] << 8 | reg[2] << 16 | in si514_get_muldiv()
118 settings->m_int = (reg[4] & 0x3f) << 3 | reg[3] >> 5; in si514_get_muldiv()
119 settings->ls_div_bits = (reg[6] >> 4) & 0x07; in si514_get_muldiv()
120 settings->hs_div = (reg[6] & 0x03) << 8 | reg[5]; in si514_get_muldiv()
125 struct clk_si514_muldiv *settings) in si514_set_muldiv() argument
133 if (settings->m_int < 65 || in si514_set_muldiv()
134 (settings->m_int == 65 && settings->m_frac <= 139575831)) in si514_set_muldiv()
137 else if (settings->m_int < 67 || in si514_set_muldiv()
138 (settings->m_int == 67 && settings->m_frac <= 461581994)) in si514_set_muldiv()
141 else if (settings->m_int < 72 || in si514_set_muldiv()
142 (settings->m_int == 72 && settings->m_frac <= 503383578)) in si514_set_muldiv()
145 else if (settings->m_int < 75 || in si514_set_muldiv()
146 (settings->m_int == 75 && settings->m_frac <= 452724474)) in si514_set_muldiv()
155 reg[0] = settings->m_frac; in si514_set_muldiv()
156 reg[1] = settings->m_frac >> 8; in si514_set_muldiv()
157 reg[2] = settings->m_frac >> 16; in si514_set_muldiv()
158 reg[3] = settings->m_frac >> 24 | settings->m_int << 5; in si514_set_muldiv()
159 reg[4] = settings->m_int >> 3; in si514_set_muldiv()
160 reg[5] = settings->hs_div; in si514_set_muldiv()
161 reg[6] = (settings->hs_div >> 8) | (settings->ls_div_bits << 4); in si514_set_muldiv()
173 /* Calculate divider settings for a given frequency */
174 static int si514_calc_muldiv(struct clk_si514_muldiv *settings, in si514_calc_muldiv() argument
188 settings->ls_div_bits = 0; in si514_calc_muldiv()
198 settings->ls_div_bits = res; in si514_calc_muldiv()
203 settings->hs_div = DIV_ROUND_UP(FVCO_MIN >> 1, ls_freq) << 1; in si514_calc_muldiv()
206 m = ((u64)(ls_freq * settings->hs_div) << 29) + (FXO / 2); in si514_calc_muldiv()
208 settings->m_frac = (u32)m & (BIT(29) - 1); in si514_calc_muldiv()
209 settings->m_int = (u32)(m >> 29); in si514_calc_muldiv()
214 /* Calculate resulting frequency given the register settings */
215 static unsigned long si514_calc_rate(struct clk_si514_muldiv *settings) in si514_calc_rate() argument
217 u64 m = settings->m_frac | ((u64)settings->m_int << 29); in si514_calc_rate()
218 u32 d = settings->hs_div * BIT(settings->ls_div_bits); in si514_calc_rate()
227 struct clk_si514_muldiv settings; in si514_recalc_rate() local
230 err = si514_get_muldiv(data, &settings); in si514_recalc_rate()
232 dev_err(&data->i2c_client->dev, "unable to retrieve settings\n"); in si514_recalc_rate()
236 return si514_calc_rate(&settings); in si514_recalc_rate()
242 struct clk_si514_muldiv settings; in si514_round_rate() local
248 err = si514_calc_muldiv(&settings, rate); in si514_round_rate()
252 return si514_calc_rate(&settings); in si514_round_rate()
264 struct clk_si514_muldiv settings; in si514_set_rate() local
268 err = si514_calc_muldiv(&settings, rate); in si514_set_rate()
278 err = si514_set_muldiv(data, &settings); in si514_set_rate()