Lines Matching refs:settings
79 struct clk_si514_muldiv *settings) in si514_get_muldiv() argument
89 settings->m_frac = reg[0] | reg[1] << 8 | reg[2] << 16 | in si514_get_muldiv()
91 settings->m_int = (reg[4] & 0x3f) << 3 | reg[3] >> 5; in si514_get_muldiv()
92 settings->ls_div_bits = (reg[6] >> 4) & 0x07; in si514_get_muldiv()
93 settings->hs_div = (reg[6] & 0x03) << 8 | reg[5]; in si514_get_muldiv()
98 struct clk_si514_muldiv *settings) in si514_set_muldiv() argument
106 if (settings->m_int < 65 || in si514_set_muldiv()
107 (settings->m_int == 65 && settings->m_frac <= 139575831)) in si514_set_muldiv()
110 else if (settings->m_int < 67 || in si514_set_muldiv()
111 (settings->m_int == 67 && settings->m_frac <= 461581994)) in si514_set_muldiv()
114 else if (settings->m_int < 72 || in si514_set_muldiv()
115 (settings->m_int == 72 && settings->m_frac <= 503383578)) in si514_set_muldiv()
118 else if (settings->m_int < 75 || in si514_set_muldiv()
119 (settings->m_int == 75 && settings->m_frac <= 452724474)) in si514_set_muldiv()
128 reg[0] = settings->m_frac; in si514_set_muldiv()
129 reg[1] = settings->m_frac >> 8; in si514_set_muldiv()
130 reg[2] = settings->m_frac >> 16; in si514_set_muldiv()
131 reg[3] = settings->m_frac >> 24 | settings->m_int << 5; in si514_set_muldiv()
132 reg[4] = settings->m_int >> 3; in si514_set_muldiv()
133 reg[5] = settings->hs_div; in si514_set_muldiv()
134 reg[6] = (settings->hs_div >> 8) | (settings->ls_div_bits << 4); in si514_set_muldiv()
147 static int si514_calc_muldiv(struct clk_si514_muldiv *settings, in si514_calc_muldiv() argument
161 settings->ls_div_bits = 0; in si514_calc_muldiv()
171 settings->ls_div_bits = res; in si514_calc_muldiv()
176 settings->hs_div = DIV_ROUND_UP(FVCO_MIN >> 1, ls_freq) << 1; in si514_calc_muldiv()
179 m = ((u64)(ls_freq * settings->hs_div) << 29) + (FXO / 2); in si514_calc_muldiv()
181 settings->m_frac = (u32)m & (BIT(29) - 1); in si514_calc_muldiv()
182 settings->m_int = (u32)(m >> 29); in si514_calc_muldiv()
188 static unsigned long si514_calc_rate(struct clk_si514_muldiv *settings) in si514_calc_rate() argument
190 u64 m = settings->m_frac | ((u64)settings->m_int << 29); in si514_calc_rate()
191 u32 d = settings->hs_div * BIT(settings->ls_div_bits); in si514_calc_rate()
200 struct clk_si514_muldiv settings; in si514_recalc_rate() local
203 err = si514_get_muldiv(data, &settings); in si514_recalc_rate()
209 return si514_calc_rate(&settings); in si514_recalc_rate()
215 struct clk_si514_muldiv settings; in si514_round_rate() local
221 err = si514_calc_muldiv(&settings, rate); in si514_round_rate()
225 return si514_calc_rate(&settings); in si514_round_rate()
237 struct clk_si514_muldiv settings; in si514_set_rate() local
240 err = si514_calc_muldiv(&settings, rate); in si514_set_rate()
246 err = si514_set_muldiv(data, &settings); in si514_set_rate()