ASoC: core: Add function for ac97 codec registration
authorMisael Lopez Cruz <misael.lopez@ti.com>
Fri, 21 Mar 2014 15:27:28 +0000 (16:27 +0100)
committerMark Brown <broonie@linaro.org>
Mon, 14 Apr 2014 19:37:25 +0000 (20:37 +0100)
Add codec registration specific function in preparation
for DAI-multicodec support.

No functional change.

Signed-off-by: Misael Lopez Cruz <misael.lopez@ti.com>
[fparent@baylibre.com: Adapt to 3.14+]
Signed-off-by: Fabien Parent <fparent@baylibre.com>
Signed-off-by: Benoit Cousson <bcousson@baylibre.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
sound/soc/soc-core.c

index 4c0f7dccbd835c21103d8d6cc8c9347ed80c48a8..42c5835ba92f8e92ec8a9fab47a962b13abd91ed 100644 (file)
@@ -1552,14 +1552,15 @@ static int soc_probe_link_dais(struct snd_soc_card *card, int num, int order)
 }
 
 #ifdef CONFIG_SND_SOC_AC97_BUS
-static int soc_register_ac97_dai_link(struct snd_soc_pcm_runtime *rtd)
+static int soc_register_ac97_codec(struct snd_soc_codec *codec,
+                                  struct snd_soc_dai *codec_dai)
 {
        int ret;
 
        /* Only instantiate AC97 if not already done by the adaptor
         * for the generic AC97 subsystem.
         */
-       if (rtd->codec_dai->driver->ac97_control && !rtd->codec->ac97_registered) {
+       if (codec_dai->driver->ac97_control && !codec->ac97_registered) {
                /*
                 * It is possible that the AC97 device is already registered to
                 * the device subsystem. This happens when the device is created
@@ -1568,28 +1569,38 @@ static int soc_register_ac97_dai_link(struct snd_soc_pcm_runtime *rtd)
                 *
                 * In those cases we don't try to register the device again.
                 */
-               if (!rtd->codec->ac97_created)
+               if (!codec->ac97_created)
                        return 0;
 
-               ret = soc_ac97_dev_register(rtd->codec);
+               ret = soc_ac97_dev_register(codec);
                if (ret < 0) {
-                       dev_err(rtd->codec->dev,
+                       dev_err(codec->dev,
                                "ASoC: AC97 device register failed: %d\n", ret);
                        return ret;
                }
 
-               rtd->codec->ac97_registered = 1;
+               codec->ac97_registered = 1;
        }
        return 0;
 }
 
-static void soc_unregister_ac97_dai_link(struct snd_soc_codec *codec)
+static int soc_register_ac97_dai_link(struct snd_soc_pcm_runtime *rtd)
+{
+       return soc_register_ac97_codec(rtd->codec, rtd->codec_dai);
+}
+
+static void soc_unregister_ac97_codec(struct snd_soc_codec *codec)
 {
        if (codec->ac97_registered) {
                soc_ac97_dev_unregister(codec);
                codec->ac97_registered = 0;
        }
 }
+
+static void soc_unregister_ac97_dai_link(struct snd_soc_pcm_runtime *rtd)
+{
+       soc_unregister_ac97_codec(rtd->codec);
+}
 #endif
 
 static int soc_check_aux_dev(struct snd_soc_card *card, int num)
@@ -1888,7 +1899,7 @@ static int snd_soc_instantiate_card(struct snd_soc_card *card)
                        dev_err(card->dev,
                                "ASoC: failed to register AC97: %d\n", ret);
                        while (--i >= 0)
-                               soc_unregister_ac97_dai_link(card->rtd[i].codec);
+                               soc_unregister_ac97_dai_link(&card->rtd[i]);
                        goto probe_aux_dev_err;
                }
        }
@@ -2324,7 +2335,7 @@ void snd_soc_free_ac97_codec(struct snd_soc_codec *codec)
 {
        mutex_lock(&codec->mutex);
 #ifdef CONFIG_SND_SOC_AC97_BUS
-       soc_unregister_ac97_dai_link(codec);
+       soc_unregister_ac97_codec(codec);
 #endif
        kfree(codec->ac97->bus);
        kfree(codec->ac97);