ASoC: rt5670: add set_bclk_ratio in dai ops
authorBard Liao <bardliao@realtek.com>
Wed, 13 Sep 2017 06:50:17 +0000 (14:50 +0800)
committerMark Brown <broonie@kernel.org>
Thu, 28 Sep 2017 16:42:37 +0000 (09:42 -0700)
We need to set a specific bit for 50 bclk rate. So add set_bclk_ratio
function to set the bit.

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

index be945b3..c5094b4 100644 (file)
@@ -2600,6 +2600,24 @@ static int rt5670_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
        return 0;
 }
 
+static int rt5670_set_bclk_ratio(struct snd_soc_dai *dai, unsigned int ratio)
+{
+       struct snd_soc_codec *codec = dai->codec;
+
+       dev_dbg(codec->dev, "%s ratio=%d\n", __func__, ratio);
+       if (dai->id != RT5670_AIF1)
+               return 0;
+
+       if ((ratio % 50) == 0)
+               snd_soc_update_bits(codec, RT5670_GEN_CTRL3,
+                       RT5670_TDM_DATA_MODE_SEL, RT5670_TDM_DATA_MODE_50FS);
+       else
+               snd_soc_update_bits(codec, RT5670_GEN_CTRL3,
+                       RT5670_TDM_DATA_MODE_SEL, RT5670_TDM_DATA_MODE_NOR);
+
+       return 0;
+}
+
 static int rt5670_set_bias_level(struct snd_soc_codec *codec,
                        enum snd_soc_bias_level level)
 {
@@ -2730,6 +2748,7 @@ static const struct snd_soc_dai_ops rt5670_aif_dai_ops = {
        .set_fmt = rt5670_set_dai_fmt,
        .set_tdm_slot = rt5670_set_tdm_slot,
        .set_pll = rt5670_set_dai_pll,
+       .set_bclk_ratio = rt5670_set_bclk_ratio,
 };
 
 static struct snd_soc_dai_driver rt5670_dai[] = {
index 5ba485c..265df80 100644 (file)
 #define RT5670_ZCD_HP_DIS                      (0x0 << 15)
 #define RT5670_ZCD_HP_EN                       (0x1 << 15)
 
+/* General Control 3 (0xfc) */
+#define RT5670_TDM_DATA_MODE_SEL               (0x1 << 11)
+#define RT5670_TDM_DATA_MODE_NOR               (0x0 << 11)
+#define RT5670_TDM_DATA_MODE_50FS              (0x1 << 11)
 
 /* Codec Private Register definition */
 /* 3D Speaker Control (0x63) */