Lines Matching refs:settings

53 /* Multiplier/divider settings */
97 struct clk_si514_muldiv *settings)
107 settings->m_frac = reg[0] | reg[1] << 8 | reg[2] << 16 |
109 settings->m_int = (reg[4] & 0x3f) << 3 | reg[3] >> 5;
110 settings->ls_div_bits = (reg[6] >> 4) & 0x07;
111 settings->hs_div = (reg[6] & 0x03) << 8 | reg[5];
116 struct clk_si514_muldiv *settings)
124 if (settings->m_int < 65 ||
125 (settings->m_int == 65 && settings->m_frac <= 139575831))
128 else if (settings->m_int < 67 ||
129 (settings->m_int == 67 && settings->m_frac <= 461581994))
132 else if (settings->m_int < 72 ||
133 (settings->m_int == 72 && settings->m_frac <= 503383578))
136 else if (settings->m_int < 75 ||
137 (settings->m_int == 75 && settings->m_frac <= 452724474))
146 reg[0] = settings->m_frac;
147 reg[1] = settings->m_frac >> 8;
148 reg[2] = settings->m_frac >> 16;
149 reg[3] = settings->m_frac >> 24 | settings->m_int << 5;
150 reg[4] = settings->m_int >> 3;
151 reg[5] = settings->hs_div;
152 reg[6] = (settings->hs_div >> 8) | (settings->ls_div_bits << 4);
164 /* Calculate divider settings for a given frequency */
165 static int si514_calc_muldiv(struct clk_si514_muldiv *settings,
179 settings->ls_div_bits = 0;
189 settings->ls_div_bits = res;
194 settings->hs_div = DIV_ROUND_UP(FVCO_MIN >> 1, ls_freq) << 1;
197 m = ((u64)(ls_freq * settings->hs_div) << 29) + (FXO / 2);
199 settings->m_frac = (u32)m & (BIT(29) - 1);
200 settings->m_int = (u32)(m >> 29);
205 /* Calculate resulting frequency given the register settings */
206 static unsigned long si514_calc_rate(struct clk_si514_muldiv *settings)
208 u64 m = settings->m_frac | ((u64)settings->m_int << 29);
209 u32 d = settings->hs_div * BIT(settings->ls_div_bits);
218 struct clk_si514_muldiv settings;
221 err = si514_get_muldiv(data, &settings);
223 dev_err(&data->i2c_client->dev, "unable to retrieve settings\n");
227 return si514_calc_rate(&settings);
233 struct clk_si514_muldiv settings;
239 err = si514_calc_muldiv(&settings, rate);
243 return si514_calc_rate(&settings);
255 struct clk_si514_muldiv settings;
259 err = si514_calc_muldiv(&settings, rate);
269 err = si514_set_muldiv(data, &settings);