diff options
author | Daniel Baluta <daniel.baluta@nxp.com> | 2017-04-26 09:09:51 -0400 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2017-04-30 09:14:27 -0400 |
commit | 66772eda0edbfbbbe7767a6b5d07e09dae84403d (patch) | |
tree | 52f10d0c2ddecb38a7040ab5b219537693e88767 | |
parent | 303e8954af8daa087e4f42788672d280337071ab (diff) |
ASoC: codec: wm9860: avoid maybe-uninitialized warning
The new PLL configuration code triggers a harmless warning:
sound/soc/codecs/wm8960.c: In function 'wm8960_configure_clocking':
sound/soc/codecs/wm8960.c:735:3: error: 'best_freq_out' may be used
uninitialized in this function [-Werror=maybe-uninitialized]
wm8960_set_pll(codec, freq_in, best_freq_out);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
sound/soc/codecs/wm8960.c:699:12: note: 'best_freq_out' was declared
here
Fix this by reworking the code such that:
1) When there is no PLL freq available return -EINVAL and make
sure *bclk_idx, *dac_idx, *sysclk_idx are initialized with
invalid values.
2) When there is a PLL freq available initialize *bclk_idx,
*dac_idx and *sysclk_idx with correct values and immediately
return the freq available.
Fixes: 84fdc00d519f ("ASoC: codec: wm9860: Refactor PLL out freq search")
Fixes: 303e8954af8d ("ASoC: codec: wm8960: Stop when a matching PLL freq is found")
Suggested-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Daniel Baluta <daniel.baluta@nxp.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r-- | sound/soc/codecs/wm8960.c | 26 |
1 files changed, 9 insertions, 17 deletions
diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c index ace69da97cb8..d899623fb101 100644 --- a/sound/soc/codecs/wm8960.c +++ b/sound/soc/codecs/wm8960.c | |||
@@ -686,7 +686,7 @@ int wm8960_configure_sysclk(struct wm8960_priv *wm8960, int mclk, | |||
686 | * @bclk_idx: bclk_divs index for found bclk | 686 | * @bclk_idx: bclk_divs index for found bclk |
687 | * | 687 | * |
688 | * Returns: | 688 | * Returns: |
689 | * -1, in case no PLL frequency out available was found | 689 | * < 0, in case no PLL frequency out available was found |
690 | * >=0, in case we could derive bclk, lrclk, sysclk from PLL out using | 690 | * >=0, in case we could derive bclk, lrclk, sysclk from PLL out using |
691 | * (@sysclk_idx, @dac_idx, @bclk_idx) dividers | 691 | * (@sysclk_idx, @dac_idx, @bclk_idx) dividers |
692 | */ | 692 | */ |
@@ -696,13 +696,13 @@ int wm8960_configure_pll(struct snd_soc_codec *codec, int freq_in, | |||
696 | { | 696 | { |
697 | struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec); | 697 | struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec); |
698 | int sysclk, bclk, lrclk, freq_out; | 698 | int sysclk, bclk, lrclk, freq_out; |
699 | int diff, best_freq_out; | 699 | int diff; |
700 | int i, j, k; | 700 | int i, j, k; |
701 | 701 | ||
702 | bclk = wm8960->bclk; | 702 | bclk = wm8960->bclk; |
703 | lrclk = wm8960->lrclk; | 703 | lrclk = wm8960->lrclk; |
704 | 704 | ||
705 | *bclk_idx = -1; | 705 | *sysclk_idx = *dac_idx = *bclk_idx = -1; |
706 | 706 | ||
707 | for (i = 0; i < ARRAY_SIZE(sysclk_divs); ++i) { | 707 | for (i = 0; i < ARRAY_SIZE(sysclk_divs); ++i) { |
708 | if (sysclk_divs[i] == -1) | 708 | if (sysclk_divs[i] == -1) |
@@ -720,21 +720,12 @@ int wm8960_configure_pll(struct snd_soc_codec *codec, int freq_in, | |||
720 | *sysclk_idx = i; | 720 | *sysclk_idx = i; |
721 | *dac_idx = j; | 721 | *dac_idx = j; |
722 | *bclk_idx = k; | 722 | *bclk_idx = k; |
723 | best_freq_out = freq_out; | 723 | return freq_out; |
724 | break; | ||
725 | } | 724 | } |
726 | } | 725 | } |
727 | if (k != ARRAY_SIZE(bclk_divs)) | ||
728 | break; | ||
729 | } | 726 | } |
730 | if (j != ARRAY_SIZE(dac_divs)) | ||
731 | break; | ||
732 | } | 727 | } |
733 | 728 | return -EINVAL; | |
734 | if (*bclk_idx != -1) | ||
735 | wm8960_set_pll(codec, freq_in, best_freq_out); | ||
736 | |||
737 | return *bclk_idx; | ||
738 | } | 729 | } |
739 | static int wm8960_configure_clocking(struct snd_soc_codec *codec) | 730 | static int wm8960_configure_clocking(struct snd_soc_codec *codec) |
740 | { | 731 | { |
@@ -783,11 +774,12 @@ static int wm8960_configure_clocking(struct snd_soc_codec *codec) | |||
783 | } | 774 | } |
784 | } | 775 | } |
785 | 776 | ||
786 | ret = wm8960_configure_pll(codec, freq_in, &i, &j, &k); | 777 | freq_out = wm8960_configure_pll(codec, freq_in, &i, &j, &k); |
787 | if (ret < 0) { | 778 | if (freq_out < 0) { |
788 | dev_err(codec->dev, "failed to configure clock via PLL\n"); | 779 | dev_err(codec->dev, "failed to configure clock via PLL\n"); |
789 | return -EINVAL; | 780 | return freq_out; |
790 | } | 781 | } |
782 | wm8960_set_pll(codec, freq_in, freq_out); | ||
791 | 783 | ||
792 | configure_clock: | 784 | configure_clock: |
793 | /* configure sysclk clock */ | 785 | /* configure sysclk clock */ |