ASoC: Intel: cht-bsw-rt5645: fix DAI formats
authorPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Thu, 26 Jan 2017 20:09:45 +0000 (14:09 -0600)
committerMark Brown <broonie@kernel.org>
Tue, 31 Jan 2017 20:14:30 +0000 (20:14 +0000)
Remove default and set I2S mode correctly both on codec and
cpu sides

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/intel/boards/cht_bsw_rt5645.c

index a97eef6860ff142dfaaa8edc7601fe5a0df83672..b972b65261764b0be4e5b48c84c0bdd49ca0900b 100644 (file)
@@ -304,13 +304,6 @@ static int cht_codec_init(struct snd_soc_pcm_runtime *runtime)
        if (ret)
                return ret;
 
-       /* TDM 4 slots 24 bit, set Rx & Tx bitmask to 4 active slots */
-       ret = snd_soc_dai_set_tdm_slot(codec_dai, 0xF, 0xF, 4, 24);
-       if (ret < 0) {
-               dev_err(runtime->dev, "can't set codec TDM slot %d\n", ret);
-               return ret;
-       }
-
        if (ctx->acpi_card->codec_type == CODEC_TYPE_RT5650)
                jack_type = SND_JACK_HEADPHONE | SND_JACK_MICROPHONE |
                                        SND_JACK_BTN_0 | SND_JACK_BTN_1 |
@@ -377,7 +370,17 @@ static int cht_codec_fixup(struct snd_soc_pcm_runtime *rtd,
                 */
                ret = snd_soc_dai_set_fmt(rtd->cpu_dai,
                                        SND_SOC_DAIFMT_I2S     |
-                                       SND_SOC_DAIFMT_NB_IF   |
+                                       SND_SOC_DAIFMT_NB_NF   |
+                                       SND_SOC_DAIFMT_CBS_CFS
+                       );
+               if (ret < 0) {
+                       dev_err(rtd->dev, "can't set format to I2S, err %d\n", ret);
+                       return ret;
+               }
+
+               ret = snd_soc_dai_set_fmt(rtd->codec_dai,
+                                       SND_SOC_DAIFMT_I2S     |
+                                       SND_SOC_DAIFMT_NB_NF   |
                                        SND_SOC_DAIFMT_CBS_CFS
                        );
                if (ret < 0) {
@@ -396,6 +399,24 @@ static int cht_codec_fixup(struct snd_soc_pcm_runtime *rtd,
                /* set SSP2 to 24-bit */
                params_set_format(params, SNDRV_PCM_FORMAT_S24_LE);
 
+               /*
+                * Default mode for SSP configuration is TDM 4 slot
+                */
+               ret = snd_soc_dai_set_fmt(rtd->codec_dai,
+                                       SND_SOC_DAIFMT_DSP_B |
+                                       SND_SOC_DAIFMT_IB_NF |
+                                       SND_SOC_DAIFMT_CBS_CFS);
+               if (ret < 0) {
+                       dev_err(rtd->dev, "can't set format to TDM %d\n", ret);
+                       return ret;
+               }
+
+               /* TDM 4 slots 24 bit, set Rx & Tx bitmask to 4 active slots */
+               ret = snd_soc_dai_set_tdm_slot(rtd->codec_dai, 0xF, 0xF, 4, 24);
+               if (ret < 0) {
+                       dev_err(rtd->dev, "can't set codec TDM slot %d\n", ret);
+                       return ret;
+               }
        }
        return 0;
 }
@@ -458,8 +479,6 @@ static struct snd_soc_dai_link cht_dailink[] = {
                .no_pcm = 1,
                .codec_dai_name = "rt5645-aif1",
                .codec_name = "i2c-10EC5645:00",
-               .dai_fmt = SND_SOC_DAIFMT_DSP_B | SND_SOC_DAIFMT_IB_NF
-                                       | SND_SOC_DAIFMT_CBS_CFS,
                .init = cht_codec_init,
                .be_hw_params_fixup = cht_codec_fixup,
                .nonatomic = true,