ASoC: check channel mismatch between cpu_dai and codec_dai
Lu Guanqun [Wed, 6 Apr 2011 15:25:11 +0000 (23:25 +0800)]
Suppose we have:

cpu_dai
channels_min = 1
channels_max = 1

codec_dai
channels_min = 2
channels_max = 2

This is a mismatch that should not happen, however according to the current
code, the result of runtime->hw will be:

channels_min = 2
channels_max = 1

We better spot it early. This patch checks this mismatch.

Signed-off-by: Lu Guanqun <guanqun.lu@intel.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>

sound/soc/soc-core.c

index 960718b..4f42fef 100644 (file)
@@ -640,7 +640,8 @@ static int soc_pcm_open(struct snd_pcm_substream *substream)
                        codec_dai->name, cpu_dai->name);
                goto config_err;
        }
-       if (!runtime->hw.channels_min || !runtime->hw.channels_max) {
+       if (!runtime->hw.channels_min || !runtime->hw.channels_max ||
+           runtime->hw.channels_min > runtime->hw.channels_max) {
                printk(KERN_ERR "asoc: %s <-> %s No matching channels\n",
                                codec_dai->name, cpu_dai->name);
                goto config_err;