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: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
@@ -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,
|
|||||||
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 {
|
|||||||
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)
|
|||||||
|
|
||||||
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]);
|
||||||
|
Reference in New Issue
Block a user