Commit 2b4d39fc authored by Mark Brown's avatar Mark Brown

ASoC: arizona: Support variable FLL VCO multipliers

Some Arizona chips have a higher frequency for the FLL VCO, support this
in the common code.
Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent a1f34af0
...@@ -734,9 +734,9 @@ static int arizona_calc_fll(struct arizona_fll *fll, ...@@ -734,9 +734,9 @@ static int arizona_calc_fll(struct arizona_fll *fll,
/* Apply the division for our remaining calculations */ /* Apply the division for our remaining calculations */
Fref /= div; Fref /= div;
/* Fvco should be 90-100MHz; don't check the upper bound */ /* Fvco should be over the targt; don't check the upper bound */
div = 1; div = 1;
while (Fout * div < 90000000) { while (Fout * div < 90000000 * fll->vco_mult) {
div++; div++;
if (div > 7) { if (div > 7) {
arizona_fll_err(fll, "No FLL_OUTDIV for Fout=%uHz\n", arizona_fll_err(fll, "No FLL_OUTDIV for Fout=%uHz\n",
...@@ -744,7 +744,7 @@ static int arizona_calc_fll(struct arizona_fll *fll, ...@@ -744,7 +744,7 @@ static int arizona_calc_fll(struct arizona_fll *fll,
return -EINVAL; return -EINVAL;
} }
} }
target = Fout * div; target = Fout * div / fll->vco_mult;
cfg->outdiv = div; cfg->outdiv = div;
arizona_fll_dbg(fll, "Fvco=%dHz\n", target); arizona_fll_dbg(fll, "Fvco=%dHz\n", target);
......
...@@ -141,6 +141,7 @@ struct arizona_fll { ...@@ -141,6 +141,7 @@ struct arizona_fll {
struct arizona *arizona; struct arizona *arizona;
int id; int id;
unsigned int base; unsigned int base;
unsigned int vco_mult;
struct completion lock; struct completion lock;
struct completion ok; struct completion ok;
......
...@@ -853,6 +853,9 @@ static int __devinit wm5102_probe(struct platform_device *pdev) ...@@ -853,6 +853,9 @@ static int __devinit wm5102_probe(struct platform_device *pdev)
wm5102->core.arizona = arizona; wm5102->core.arizona = arizona;
for (i = 0; i < ARRAY_SIZE(wm5102->fll); i++)
wm5102->fll[i].vco_mult = 1;
arizona_init_fll(arizona, 1, ARIZONA_FLL1_CONTROL_1 - 1, arizona_init_fll(arizona, 1, ARIZONA_FLL1_CONTROL_1 - 1,
ARIZONA_IRQ_FLL1_LOCK, ARIZONA_IRQ_FLL1_CLOCK_OK, ARIZONA_IRQ_FLL1_LOCK, ARIZONA_IRQ_FLL1_CLOCK_OK,
&wm5102->fll[0]); &wm5102->fll[0]);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment