ASoC: ak4642: add SND_SOC_DAIFMT_FORMAT support
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Thu, 20 Jan 2011 02:45:34 +0000 (11:45 +0900)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Fri, 21 Jan 2011 19:01:46 +0000 (19:01 +0000)
This patch support LEFT_J / I2S only for now

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/codecs/ak4642.c
sound/soc/sh/fsi-ak4642.c

index f00eba313dfd6ffdf502452b8491e8e0963534a3..4be0570e3f1fc167fad8682e27f33dd7c810dd30 100644 (file)
 #define BCKO_MASK      (1 << 3)
 #define BCKO_64                BCKO_MASK
 
+#define DIF_MASK       (3 << 0)
+#define DSP            (0 << 0)
+#define RIGHT_J                (1 << 0)
+#define LEFT_J         (2 << 0)
+#define I2S            (3 << 0)
+
 /* MD_CTL2 */
 #define FS0            (1 << 0)
 #define FS1            (1 << 1)
@@ -354,6 +360,24 @@ static int ak4642_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
        snd_soc_update_bits(codec, PW_MGMT2, MS, data);
        snd_soc_update_bits(codec, MD_CTL1, BCKO_MASK, bcko);
 
+       /* format type */
+       data = 0;
+       switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
+       case SND_SOC_DAIFMT_LEFT_J:
+               data = LEFT_J;
+               break;
+       case SND_SOC_DAIFMT_I2S:
+               data = I2S;
+               break;
+       /* FIXME
+        * Please add RIGHT_J / DSP support here
+        */
+       default:
+               return -EINVAL;
+               break;
+       }
+       snd_soc_update_bits(codec, MD_CTL1, DIF_MASK, data);
+
        return 0;
 }
 
index 56cd34223100a3d31ae99db6d1719e23884fb43e..a722a4c661ffb6f716948c5ca17b139983e17ed2 100644 (file)
@@ -26,7 +26,8 @@ static int fsi_ak4642_dai_init(struct snd_soc_pcm_runtime *rtd)
        struct snd_soc_dai *dai = rtd->codec_dai;
        int ret;
 
-       ret = snd_soc_dai_set_fmt(dai, SND_SOC_DAIFMT_CBM_CFM);
+       ret = snd_soc_dai_set_fmt(dai, SND_SOC_DAIFMT_LEFT_J |
+                                      SND_SOC_DAIFMT_CBM_CFM);
        if (ret < 0)
                return ret;