ASoC: TWL4030: Check the interface format for 4 channel mode
authorPeter Ujfalusi <peter.ujfalusi@nokia.com>
Mon, 1 Jun 2009 11:06:40 +0000 (14:06 +0300)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Mon, 1 Jun 2009 22:46:08 +0000 (23:46 +0100)
In addition to the operating mode check, also check the
codec's interface format in case of four channel mode.
If the codec is not in TDM (DSP_A) mode, return with error.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@nokia.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/codecs/twl4030.c

index df474a5dd357cba556fa3ea72c69fd9621d08dc2..c53c7cabbd2739a31723b7b986e8db6eb5504999 100644 (file)
@@ -1608,9 +1608,15 @@ static int twl4030_hw_params(struct snd_pcm_substream *substream,
 
         /* If the substream has 4 channel, do the necessary setup */
        if (params_channels(params) == 4) {
-               /* Safety check: are we in the correct operating mode? */
-               if ((twl4030_read_reg_cache(codec, TWL4030_REG_CODEC_MODE) &
-                       TWL4030_OPTION_1))
+               u8 format, mode;
+
+               format = twl4030_read_reg_cache(codec, TWL4030_REG_AUDIO_IF);
+               mode = twl4030_read_reg_cache(codec, TWL4030_REG_CODEC_MODE);
+
+               /* Safety check: are we in the correct operating mode and
+                * the interface is in TDM mode? */
+               if ((mode & TWL4030_OPTION_1) &&
+                   ((format & TWL4030_AIF_FORMAT) == TWL4030_AIF_FORMAT_TDM))
                        twl4030_tdm_enable(codec, substream->stream, 1);
                else
                        return -EINVAL;