ASoC: Support a wider range of sample rates on Speyside WM8962
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Fri, 23 Sep 2011 15:05:00 +0000 (16:05 +0100)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Fri, 23 Sep 2011 15:59:37 +0000 (16:59 +0100)
As we've only got one audio interface and it is symmetric we can just set
SYSCLK based on the sample rate requested by the application layer. Provide
a default so bypass paths work before audio playback.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/samsung/speyside_wm8962.c

index 3820a6b057dc98fa168172b1dc9c0858c6565061..98b28eac412075c7edf97cfc616515a108d9e040 100644 (file)
@@ -16,6 +16,8 @@
 
 #include "../codecs/wm8962.h"
 
+static int sample_rate = 44100;
+
 static int speyside_wm8962_set_bias_level(struct snd_soc_card *card,
                                          struct snd_soc_dapm_context *dapm,
                                          enum snd_soc_bias_level level)
@@ -31,13 +33,13 @@ static int speyside_wm8962_set_bias_level(struct snd_soc_card *card,
                if (dapm->bias_level == SND_SOC_BIAS_STANDBY) {
                        ret = snd_soc_dai_set_pll(codec_dai, WM8962_FLL,
                                                  WM8962_FLL_MCLK, 32768,
-                                                 44100 * 512);
+                                                 sample_rate * 512);
                        if (ret < 0)
                                pr_err("Failed to start FLL: %d\n", ret);
 
                        ret = snd_soc_dai_set_sysclk(codec_dai,
                                                     WM8962_SYSCLK_FLL,
-                                                    44100 * 512,
+                                                    sample_rate * 512,
                                                     SND_SOC_CLOCK_IN);
                        if (ret < 0) {
                                pr_err("Failed to set SYSCLK: %d\n", ret);
@@ -109,6 +111,8 @@ static int speyside_wm8962_hw_params(struct snd_pcm_substream *substream,
        if (ret < 0)
                return ret;
 
+       sample_rate = params_rate(params);
+
        return 0;
 }