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

Commit 6bb74514 authored by Stuart Henderson's avatar Stuart Henderson Committed by Mark Brown
Browse files

ASoC: wm8960: Fix WM8960_SYSCLK_PLL mode



With the introduction of WM8960_SYSCLK_AUTO mode, WM8960_SYSCLK_PLL mode was
made unusable.  Ensure we're not PLL mode before trying to use MCLK.

Fixes: 3176bf2d ("ASoC: wm8960: update pll and clock setting function")
Signed-off-by: default avatarStuart Henderson <stuart.henderson@cirrus.com>
Reviewed-by: default avatarCharles Keepax <ckeepax@opensource.wolfsonmicro.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 95826a37
Loading
Loading
Loading
Loading
+17 −15
Original line number Diff line number Diff line
@@ -631,20 +631,21 @@ static int wm8960_configure_clocking(struct snd_soc_codec *codec)
		return -EINVAL;
	}

	if (wm8960->clk_id != WM8960_SYSCLK_PLL) {
		/* check if the sysclk frequency is available. */
		for (i = 0; i < ARRAY_SIZE(sysclk_divs); ++i) {
			if (sysclk_divs[i] == -1)
				continue;
			sysclk = freq_out / sysclk_divs[i];
			for (j = 0; j < ARRAY_SIZE(dac_divs); ++j) {
			if (sysclk == dac_divs[j] * lrclk) {
				if (sysclk != dac_divs[j] * lrclk)
					continue;
				for (k = 0; k < ARRAY_SIZE(bclk_divs); ++k)
					if (sysclk == bclk * bclk_divs[k] / 10)
						break;
				if (k != ARRAY_SIZE(bclk_divs))
					break;
			}
		}
			if (j != ARRAY_SIZE(dac_divs))
				break;
		}
@@ -655,6 +656,7 @@ static int wm8960_configure_clocking(struct snd_soc_codec *codec)
			dev_err(codec->dev, "failed to configure clock\n");
			return -EINVAL;
		}
	}
	/* get a available pll out frequency and set pll */
	for (i = 0; i < ARRAY_SIZE(sysclk_divs); ++i) {
		if (sysclk_divs[i] == -1)