summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCharles Keepax <ckeepax@opensource.wolfsonmicro.com>2014-07-09 17:41:44 +0100
committerMark Brown <broonie@linaro.org>2014-07-10 12:09:15 +0200
commit29fee829408117624efcd478f6f228d77039b969 (patch)
tree9492d1ff80ba2a6e6943b9ec679ac801fb3fa97f
parent4714bc015de147c2da5248762b2772c6dbf160eb (diff)
downloadop-kernel-dev-29fee829408117624efcd478f6f228d77039b969.zip
op-kernel-dev-29fee829408117624efcd478f6f228d77039b969.tar.gz
ASoC: arizona: Correct checking of FLL ratio limitations
The check to ensure the Fref frequency is within the bounds for the current ratio, was placed in the wrong loop. The initial configuration will always be valid and the loop lowering the ratio will only reinforce this validity. The check should be on the loop increasing the ratio. This could on occasion cause an invalid ratio/Fref combination to be selected. Reported-by: Ryo Tsutsui <ryo.tsutsui@wolfsonmicro.com> Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com> Signed-off-by: Mark Brown <broonie@linaro.org>
-rw-r--r--sound/soc/codecs/arizona.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/sound/soc/codecs/arizona.c b/sound/soc/codecs/arizona.c
index b03974e..4c4727f 100644
--- a/sound/soc/codecs/arizona.c
+++ b/sound/soc/codecs/arizona.c
@@ -1578,6 +1578,10 @@ static int arizona_calc_fratio(struct arizona_fll *fll,
while (div <= ARIZONA_FLL_MAX_REFDIV) {
for (ratio = init_ratio; ratio <= ARIZONA_FLL_MAX_FRATIO;
ratio++) {
+ if (ARIZONA_FLL_VCO_CORNER / (fll->vco_mult * ratio) <
+ Fref)
+ break;
+
if (target % (ratio * Fref)) {
cfg->refdiv = refdiv;
cfg->fratio = ratio - 1;
@@ -1586,10 +1590,6 @@ static int arizona_calc_fratio(struct arizona_fll *fll,
}
for (ratio = init_ratio - 1; ratio > 0; ratio--) {
- if (ARIZONA_FLL_VCO_CORNER / (fll->vco_mult * ratio) <
- Fref)
- break;
-
if (target % (ratio * Fref)) {
cfg->refdiv = refdiv;
cfg->fratio = ratio - 1;
OpenPOWER on IntegriCloud