/** * rl6231_get_pre_div - Return the value of pre divider. * * @map: map for setting. * @reg: register. * @sft: shift. * * Return the value of pre divider from given register value. * Return negative error code for unexpected register value.
*/ int rl6231_get_pre_div(struct regmap *map, unsignedint reg, int sft)
{ int pd, val;
regmap_read(map, reg, &val);
val = (val >> sft) & 0x7;
switch (val) { case 0: case 1: case 2: case 3:
pd = val + 1; break; case 4:
pd = 6; break; case 5:
pd = 8; break; case 6:
pd = 12; break; case 7:
pd = 16; break; default:
pd = -EINVAL; break;
}
/** * rl6231_calc_dmic_clk - Calculate the frequency divider parameter of dmic. * * @rate: base clock rate. * * Choose divider parameter that gives the highest possible DMIC frequency in * 1MHz - 3MHz range.
*/ int rl6231_calc_dmic_clk(int rate)
{ staticconstint div[] = {2, 3, 4, 6, 8, 12}; int i;
if (rate < 1000000 * div[0]) {
pr_warn("Base clock rate %d is too low\n", rate); return -EINVAL;
}
for (i = 0; i < ARRAY_SIZE(div); i++) { if ((div[i] % 3) == 0) continue; /* find divider that gives DMIC frequency below 1.536MHz */ if (1536000 * div[i] >= rate) return i;
}
pr_warn("Base clock rate %d is too high\n", rate); return -EINVAL;
}
EXPORT_SYMBOL_GPL(rl6231_calc_dmic_clk);
struct pll_calc_map { unsignedint pll_in; unsignedint pll_out; int k; int n; int m; bool m_bp; bool k_bp;
};
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.