ASoC: core: missing set_fmt should not be complaint
Shawn Guo [Thu, 8 Mar 2012 16:59:40 +0000 (00:59 +0800)]
Not having a DAI link set_fmt operation is perfectly normal and
should not be complaint.

Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>

sound/soc/soc-core.c

index c90bb01..93a0daa 100644 (file)
@@ -1531,14 +1531,14 @@ static void snd_soc_instantiate_card(struct snd_soc_card *card)
                if (dai_link->dai_fmt) {
                        ret = snd_soc_dai_set_fmt(card->rtd[i].codec_dai,
                                                  dai_link->dai_fmt);
-                       if (ret != 0)
+                       if (ret != 0 && ret != -ENOTSUPP)
                                dev_warn(card->rtd[i].codec_dai->dev,
                                         "Failed to set DAI format: %d\n",
                                         ret);
 
                        ret = snd_soc_dai_set_fmt(card->rtd[i].cpu_dai,
                                                  dai_link->dai_fmt);
-                       if (ret != 0)
+                       if (ret != 0 && ret != -ENOTSUPP)
                                dev_warn(card->rtd[i].cpu_dai->dev,
                                         "Failed to set DAI format: %d\n",
                                         ret);
@@ -2971,10 +2971,11 @@ EXPORT_SYMBOL_GPL(snd_soc_codec_set_pll);
  */
 int snd_soc_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
 {
-       if (dai->driver && dai->driver->ops->set_fmt)
-               return dai->driver->ops->set_fmt(dai, fmt);
-       else
+       if (dai->driver == NULL)
                return -EINVAL;
+       if (dai->driver->ops->set_fmt == NULL)
+               return -ENOTSUPP;
+       return dai->driver->ops->set_fmt(dai, fmt);
 }
 EXPORT_SYMBOL_GPL(snd_soc_dai_set_fmt);