ASoC: Fix the device references to codec and platform drivers
[firefly-linux-kernel-4.4.55.git] / sound / soc / soc-core.c
index a233607a73c68f5ca7ed5da4ee12f7305a8bdc7f..bac7291b6ff625a131d461bd8e5123814bfb961d 100644 (file)
@@ -1259,9 +1259,6 @@ find_codec:
                if (!strcmp(codec->name, dai_link->codec_name)) {
                        rtd->codec = codec;
 
-                       if (!try_module_get(codec->dev->driver->owner))
-                               return -ENODEV;
-
                        /* CODEC found, so find CODEC DAI from registered DAIs from this CODEC*/
                        list_for_each_entry(codec_dai, &dai_list, list) {
                                if (codec->dev == codec_dai->dev &&
@@ -1287,10 +1284,6 @@ find_platform:
        /* no, then find CPU DAI from registered DAIs*/
        list_for_each_entry(platform, &platform_list, list) {
                if (!strcmp(platform->name, dai_link->platform_name)) {
-
-                       if (!try_module_get(platform->dev->driver->owner))
-                               return -ENODEV;
-
                        rtd->platform = platform;
                        goto out;
                }
@@ -1425,6 +1418,9 @@ static int soc_probe_codec(struct snd_soc_card *card,
        soc_init_codec_debugfs(codec);
 
        /* mark codec as probed and add to card codec list */
+       if (!try_module_get(codec->dev->driver->owner))
+               return -ENODEV;
+
        codec->probed = 1;
        list_add(&codec->card_list, &card->codec_dev_list);
        list_add(&codec->dapm.list, &card->dapm_list);
@@ -1556,6 +1552,10 @@ static int soc_probe_dai_link(struct snd_soc_card *card, int num)
                        }
                }
                /* mark platform as probed and add to card platform list */
+
+               if (!try_module_get(platform->dev->driver->owner))
+                       return -ENODEV;
+
                platform->probed = 1;
                list_add(&platform->card_list, &card->platform_dev_list);
        }