Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -734,9 +734,9 @@ static int arizona_calc_fll(struct arizona_fll *fll,
	/* Apply the division for our remaining calculations */
	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;
	while (Fout * div < 90000000) {
	while (Fout * div < 90000000 * fll->vco_mult) {
		div++;
		if (div > 7) {
			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;
		}
	}
	target = Fout * div;
	target = Fout * div / fll->vco_mult;
	cfg->outdiv = div;

	arizona_fll_dbg(fll, "Fvco=%dHz\n", target);
+1 −0
Original line number Diff line number Diff line
@@ -141,6 +141,7 @@ struct arizona_fll {
	struct arizona *arizona;
	int id;
	unsigned int base;
	unsigned int vco_mult;
	struct completion lock;
	struct completion ok;

+3 −0
Original line number Diff line number Diff line
@@ -853,6 +853,9 @@ static int __devinit wm5102_probe(struct platform_device *pdev)

	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_IRQ_FLL1_LOCK, ARIZONA_IRQ_FLL1_CLOCK_OK,
			 &wm5102->fll[0]);