diff options
author | Romain Perier <romain.perier@collabora.com> | 2017-02-03 15:37:57 +0100 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2017-02-04 13:16:31 +0100 |
commit | b9b044e2967dd47f0ffe98b5a989fc99c684f6d2 (patch) | |
tree | b0869396c77ee65adda6933c5aef9260bafc99c1 /sound/soc/codecs/es8328.c | |
parent | 5f166156dbd4c0cf85632799ee7330d24deeec4e (diff) | |
download | linux-stable-b9b044e2967dd47f0ffe98b5a989fc99c684f6d2.tar.gz linux-stable-b9b044e2967dd47f0ffe98b5a989fc99c684f6d2.tar.bz2 linux-stable-b9b044e2967dd47f0ffe98b5a989fc99c684f6d2.zip |
ASoC: es8328: Add support for slave mode
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>
Diffstat (limited to 'sound/soc/codecs/es8328.c')
-rw-r--r-- | sound/soc/codecs/es8328.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/sound/soc/codecs/es8328.c b/sound/soc/codecs/es8328.c index 37722194b107..3f84fbd071e2 100644 --- a/sound/soc/codecs/es8328.c +++ b/sound/soc/codecs/es8328.c @@ -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; } |