ASoC: rt5670: check if asrc is useable
authorBard Liao <bardliao@realtek.com>
Mon, 17 Nov 2014 07:27:21 +0000 (15:27 +0800)
committerMark Brown <broonie@kernel.org>
Tue, 25 Nov 2014 12:12:53 +0000 (12:12 +0000)
To use ASRC, the sysclk should be faster than 384 times sample rate of I2S1.

Signed-off-by: Bard Liao <bardliao@realtek.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/rt5670.c

index 5e54ac957e47462a4f6103d215ed15f3b2c931eb..3ddb34ef77d7e57cc80c74240626b87b53318dcf 100644 (file)
@@ -576,6 +576,18 @@ static int is_using_asrc(struct snd_soc_dapm_widget *source,
 
 }
 
+static int can_use_asrc(struct snd_soc_dapm_widget *source,
+                        struct snd_soc_dapm_widget *sink)
+{
+       struct snd_soc_codec *codec = snd_soc_dapm_to_codec(source->dapm);
+       struct rt5670_priv *rt5670 = snd_soc_codec_get_drvdata(codec);
+
+       if (rt5670->sysclk > rt5670->lrck[RT5670_AIF1] * 384)
+               return 1;
+
+       return 0;
+}
+
 /* Digital Mixer */
 static const struct snd_kcontrol_new rt5670_sto1_adc_l_mix[] = {
        SOC_DAPM_SINGLE("ADC1 Switch", RT5670_STO1_ADC_MIXER,
@@ -1639,8 +1651,8 @@ static const struct snd_soc_dapm_route rt5670_dapm_routes[] = {
        { "DAC Mono Right Filter", NULL, "DAC MONO R ASRC", is_using_asrc },
        { "DAC Stereo1 Filter", NULL, "DAC STO ASRC", is_using_asrc },
 
-       { "I2S1", NULL, "I2S1 ASRC" },
-       { "I2S2", NULL, "I2S2 ASRC" },
+       { "I2S1", NULL, "I2S1 ASRC", can_use_asrc},
+       { "I2S2", NULL, "I2S2 ASRC", can_use_asrc},
 
        { "DMIC1", NULL, "DMIC L1" },
        { "DMIC1", NULL, "DMIC R1" },