ASoC: ak4613: disable asymmetric audio interface format
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Mon, 8 May 2017 02:28:13 +0000 (02:28 +0000)
committerMark Brown <broonie@kernel.org>
Sun, 14 May 2017 09:38:54 +0000 (18:38 +0900)
Asymmetric audio interface formats exist in ak4613 by same
register settings.

Capture Playback
24bit LEFT_J 16bit RIGHT_J
24bit LEFT_J 20bit RIGHT_J
24bit LEFT_J 24bit RIGHT_J
24bit LEFT_J 24bit LEFT_J
24bit I2S 24bit I2S

These asymmetric formats makes driver / behavior difficult.
It is not HW limitation, but SW limitation. To makes code reading
easy, this patch removes asymmetric format support.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/ak4613.c

index b2dfddead22774cc85a9b4612b8edbfd3ceffa5c..557ac16d43e2881377c82b0bbe0a48b308c96737 100644 (file)
@@ -139,9 +139,7 @@ static const struct reg_default ak4613_reg[] = {
 #define AUDIO_IFACE(b, fmt) { b, SND_SOC_DAIFMT_##fmt }
 static const struct ak4613_interface ak4613_iface[] = {
        /* capture */                           /* playback */
-       [0] = { AUDIO_IFACE(24, LEFT_J),        AUDIO_IFACE(16, RIGHT_J) },
-       [1] = { AUDIO_IFACE(24, LEFT_J),        AUDIO_IFACE(20, RIGHT_J) },
-       [2] = { AUDIO_IFACE(24, LEFT_J),        AUDIO_IFACE(24, RIGHT_J) },
+       /* [0] - [2] are not supported */
        [3] = { AUDIO_IFACE(24, LEFT_J),        AUDIO_IFACE(24, LEFT_J) },
        [4] = { AUDIO_IFACE(24, I2S),           AUDIO_IFACE(24, I2S) },
 };
@@ -262,11 +260,9 @@ static int ak4613_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
        fmt &= SND_SOC_DAIFMT_FORMAT_MASK;
 
        switch (fmt) {
-       case SND_SOC_DAIFMT_RIGHT_J:
        case SND_SOC_DAIFMT_LEFT_J:
        case SND_SOC_DAIFMT_I2S:
                priv->fmt = fmt;
-
                break;
        default:
                return -EINVAL;
@@ -286,13 +282,8 @@ static bool ak4613_dai_fmt_matching(const struct ak4613_interface *iface,
        if (fmts->fmt != fmt)
                return false;
 
-       if (fmt == SND_SOC_DAIFMT_RIGHT_J) {
-               if (fmts->width != width)
-                       return false;
-       } else {
-               if (fmts->width < width)
-                       return false;
-       }
+       if (fmts->width != width)
+               return false;
 
        return true;
 }
@@ -420,8 +411,7 @@ static const struct snd_soc_dai_ops ak4613_dai_ops = {
                                 SNDRV_PCM_RATE_96000  |\
                                 SNDRV_PCM_RATE_176400 |\
                                 SNDRV_PCM_RATE_192000)
-#define AK4613_PCM_FMTBIT      (SNDRV_PCM_FMTBIT_S16_LE |\
-                                SNDRV_PCM_FMTBIT_S24_LE)
+#define AK4613_PCM_FMTBIT      (SNDRV_PCM_FMTBIT_S24_LE)
 
 static struct snd_soc_dai_driver ak4613_dai = {
        .name = "ak4613-hifi",