]> rtime.felk.cvut.cz Git - lisovros/linux_canprio.git/blobdiff - sound/soc/omap/omap3pandora.c
ASoC: Pandora: Pass SRG input clock frequency to the OMAP McBSP DAI
[lisovros/linux_canprio.git] / sound / soc / omap / omap3pandora.c
index ad219aaf7cb80678ae80c1263f41df565803cfe0..cace5f13792df8956e57fd79ff6049ad705ba6a4 100644 (file)
 
 #define PREFIX "ASoC omap3pandora: "
 
-static int omap3pandora_cmn_hw_params(struct snd_soc_dai *codec_dai,
-       struct snd_soc_dai *cpu_dai, unsigned int fmt)
+static int omap3pandora_cmn_hw_params(struct snd_pcm_substream *substream,
+       struct snd_pcm_hw_params *params, unsigned int fmt)
 {
+       struct snd_soc_pcm_runtime *rtd = substream->private_data;
+       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
        int ret;
 
        /* Set codec DAI configuration */
@@ -68,8 +71,9 @@ static int omap3pandora_cmn_hw_params(struct snd_soc_dai *codec_dai,
        }
 
        /* Set McBSP clock to external */
-       ret = snd_soc_dai_set_sysclk(cpu_dai, OMAP_MCBSP_SYSCLK_CLKS_EXT, 0,
-                                           SND_SOC_CLOCK_IN);
+       ret = snd_soc_dai_set_sysclk(cpu_dai, OMAP_MCBSP_SYSCLK_CLKS_EXT,
+                                    256 * params_rate(params),
+                                    SND_SOC_CLOCK_IN);
        if (ret < 0) {
                pr_err(PREFIX "can't set cpu system clock\n");
                return ret;
@@ -87,11 +91,7 @@ static int omap3pandora_cmn_hw_params(struct snd_soc_dai *codec_dai,
 static int omap3pandora_out_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
-
-       return omap3pandora_cmn_hw_params(codec_dai, cpu_dai,
+       return omap3pandora_cmn_hw_params(substream, params,
                                          SND_SOC_DAIFMT_I2S |
                                          SND_SOC_DAIFMT_IB_NF |
                                          SND_SOC_DAIFMT_CBS_CFS);
@@ -100,11 +100,7 @@ static int omap3pandora_out_hw_params(struct snd_pcm_substream *substream,
 static int omap3pandora_in_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
-
-       return omap3pandora_cmn_hw_params(codec_dai, cpu_dai,
+       return omap3pandora_cmn_hw_params(substream, params,
                                          SND_SOC_DAIFMT_I2S |
                                          SND_SOC_DAIFMT_NB_NF |
                                          SND_SOC_DAIFMT_CBS_CFS);