ASoC: zx-i2s: flip I2S master/slave mode
authorShawn Guo <shawn.guo@linaro.org>
Sat, 17 Jun 2017 14:25:28 +0000 (22:25 +0800)
committerMark Brown <broonie@kernel.org>
Mon, 19 Jun 2017 16:19:39 +0000 (17:19 +0100)
The SND_SOC_DAIFMT_MASTER bits are defined to specify the master/slave
mode for Codec, not I2S.  So the I2S master/slave mode should be flipped
according to SND_SOC_DAIFMT_MASTER bits.

Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
Signed-off-by: Mark Brown <broonie@kernel.org>
Cc: stable@vger.kernel.org
sound/soc/zte/zx-i2s.c

index a7f7a56e0a2d69c5b09bf4062210df6a48dda591..8bbad1d72bc560deae51537af1eec50b83186812 100644 (file)
@@ -203,13 +203,15 @@ static int zx_i2s_set_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt)
 
        switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
        case SND_SOC_DAIFMT_CBM_CFM:
 
        switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
        case SND_SOC_DAIFMT_CBM_CFM:
-               i2s->master = 1;
-               val |= ZX_I2S_TIMING_MAST;
-               break;
-       case SND_SOC_DAIFMT_CBS_CFS:
+               /* Codec is master, and I2S is slave. */
                i2s->master = 0;
                val |= ZX_I2S_TIMING_SLAVE;
                break;
                i2s->master = 0;
                val |= ZX_I2S_TIMING_SLAVE;
                break;
+       case SND_SOC_DAIFMT_CBS_CFS:
+               /* Codec is slave, and I2S is master. */
+               i2s->master = 1;
+               val |= ZX_I2S_TIMING_MAST;
+               break;
        default:
                dev_err(cpu_dai->dev, "Unknown master/slave format\n");
                return -EINVAL;
        default:
                dev_err(cpu_dai->dev, "Unknown master/slave format\n");
                return -EINVAL;