diff options
| -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 */ |
