aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sound/soc/codecs/wm8994.c17
-rw-r--r--sound/soc/codecs/wm8994.h5
2 files changed, 20 insertions, 2 deletions
diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c
index 29c4cfccd6b9..a27b2ff769d9 100644
--- a/sound/soc/codecs/wm8994.c
+++ b/sound/soc/codecs/wm8994.c
@@ -2843,6 +2843,16 @@ static int wm8994_set_fll(struct snd_soc_dai *dai, int id, int src,
2843 return -EINVAL; 2843 return -EINVAL;
2844 } 2844 }
2845 2845
2846 switch (src) {
2847 case WM8994_FLL_SRC_MCLK1:
2848 case WM8994_FLL_SRC_MCLK2:
2849 case WM8994_FLL_SRC_LRCLK:
2850 case WM8994_FLL_SRC_BCLK:
2851 break;
2852 default:
2853 return -EINVAL;
2854 }
2855
2846 /* Are we changing anything? */ 2856 /* Are we changing anything? */
2847 if (wm8994->fll[id].src == src && 2857 if (wm8994->fll[id].src == src &&
2848 wm8994->fll[id].in == freq_in && wm8994->fll[id].out == freq_out) 2858 wm8994->fll[id].in == freq_in && wm8994->fll[id].out == freq_out)
@@ -2883,8 +2893,10 @@ static int wm8994_set_fll(struct snd_soc_dai *dai, int id, int src,
2883 fll.n << WM8994_FLL1_N_SHIFT); 2893 fll.n << WM8994_FLL1_N_SHIFT);
2884 2894
2885 snd_soc_update_bits(codec, WM8994_FLL1_CONTROL_5 + reg_offset, 2895 snd_soc_update_bits(codec, WM8994_FLL1_CONTROL_5 + reg_offset,
2886 WM8994_FLL1_REFCLK_DIV_MASK, 2896 WM8994_FLL1_REFCLK_DIV_MASK |
2887 fll.clk_ref_div << WM8994_FLL1_REFCLK_DIV_SHIFT); 2897 WM8994_FLL1_REFCLK_SRC_MASK,
2898 (fll.clk_ref_div << WM8994_FLL1_REFCLK_DIV_SHIFT) |
2899 (src - 1));
2888 2900
2889 /* Enable (with fractional mode if required) */ 2901 /* Enable (with fractional mode if required) */
2890 if (freq_out) { 2902 if (freq_out) {
@@ -2899,6 +2911,7 @@ static int wm8994_set_fll(struct snd_soc_dai *dai, int id, int src,
2899 2911
2900 wm8994->fll[id].in = freq_in; 2912 wm8994->fll[id].in = freq_in;
2901 wm8994->fll[id].out = freq_out; 2913 wm8994->fll[id].out = freq_out;
2914 wm8994->fll[id].src = src;
2902 2915
2903 /* Enable any gated AIF clocks */ 2916 /* Enable any gated AIF clocks */
2904 snd_soc_update_bits(codec, WM8994_AIF1_CLOCKING_1, 2917 snd_soc_update_bits(codec, WM8994_AIF1_CLOCKING_1,
diff --git a/sound/soc/codecs/wm8994.h b/sound/soc/codecs/wm8994.h
index 79d5915ae4b3..7072dc539354 100644
--- a/sound/soc/codecs/wm8994.h
+++ b/sound/soc/codecs/wm8994.h
@@ -23,6 +23,11 @@ extern struct snd_soc_dai wm8994_dai[];
23#define WM8994_FLL1 1 23#define WM8994_FLL1 1
24#define WM8994_FLL2 2 24#define WM8994_FLL2 2
25 25
26#define WM8994_FLL_SRC_MCLK1 1
27#define WM8994_FLL_SRC_MCLK2 2
28#define WM8994_FLL_SRC_LRCLK 3
29#define WM8994_FLL_SRC_BCLK 4
30
26int wm8994_mic_detect(struct snd_soc_codec *codec, struct snd_soc_jack *jack, 31int wm8994_mic_detect(struct snd_soc_codec *codec, struct snd_soc_jack *jack,
27 int micbias, int det, int shrt); 32 int micbias, int det, int shrt);
28 33