ASoC: es8328: Add support for slave mode
authorRomain Perier <romain.perier@collabora.com>
Fri, 3 Feb 2017 14:37:57 +0000 (15:37 +0100)
committerMark Brown <broonie@kernel.org>
Sat, 4 Feb 2017 12:16:31 +0000 (13:16 +0100)
Currently, the function that changes the DAI format only supports master
mode. Trying to use a slave mode exits the function with -EINVAL and
leave the codec misconfigured. This commits adds support for enabling
the slave mode.

Signed-off-by: Romain Perier <romain.perier@collabora.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/es8328.c

index 37722194b107e8a733bb124be480ff46b63749ef..3f84fbd071e275e52d8c004ae10d7474035c1fc7 100644 (file)
@@ -589,9 +589,21 @@ static int es8328_set_dai_fmt(struct snd_soc_dai *codec_dai,
        u8 dac_mode = 0;
        u8 adc_mode = 0;
 
-       /* set master/slave audio interface */
-       if ((fmt & SND_SOC_DAIFMT_MASTER_MASK) != SND_SOC_DAIFMT_CBM_CFM)
+       switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
+       case SND_SOC_DAIFMT_CBM_CFM:
+               /* Master serial port mode, with BCLK generated automatically */
+               snd_soc_update_bits(codec, ES8328_MASTERMODE,
+                                   ES8328_MASTERMODE_MSC,
+                                   ES8328_MASTERMODE_MSC);
+               break;
+       case SND_SOC_DAIFMT_CBS_CFS:
+               /* Slave serial port mode */
+               snd_soc_update_bits(codec, ES8328_MASTERMODE,
+                                   ES8328_MASTERMODE_MSC, 0);
+               break;
+       default:
                return -EINVAL;
+       }
 
        /* interface format */
        switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
@@ -620,10 +632,6 @@ static int es8328_set_dai_fmt(struct snd_soc_dai *codec_dai,
        snd_soc_update_bits(codec, ES8328_ADCCONTROL4,
                        ES8328_ADCCONTROL4_ADCFORMAT_MASK, adc_mode);
 
-       /* Master serial port mode, with BCLK generated automatically */
-       snd_soc_update_bits(codec, ES8328_MASTERMODE,
-                       ES8328_MASTERMODE_MSC, ES8328_MASTERMODE_MSC);
-
        return 0;
 }