All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/4] ASoC: soc-core: Increment codec and platform driver refcounts before probing
@ 2011-01-26 11:58 Jarkko Nikula
  2011-01-26 11:58 ` [PATCH 2/4] ASoC: Add optional pointer to machine audio routes to snd_soc_card Jarkko Nikula
                   ` (3 more replies)
  0 siblings, 4 replies; 12+ messages in thread
From: Jarkko Nikula @ 2011-01-26 11:58 UTC (permalink / raw)
  To: alsa-devel; +Cc: Vinod Koul, Mark Brown, Harsha Priya, Liam Girdwood

Commit f6c2ed5 "ASoC: Fix the device references to codec and platform drivers"
moved codec and platform driver refcount increments from soc_bind_dai_link
to more appropriate places.

Adjust a little them so that refcounts are incremented before executing the
driver probe functions.

Signed-off-by: Jarkko Nikula <jhnikula@gmail.com>
Cc: Vinod Koul <vinod.koul@intel.com>
Cc: Harsha Priya <priya.harsha@intel.com>
---
I don't know any regression with this so probably 2.6.39 material.
---
 sound/soc/soc-core.c |   21 +++++++++++++--------
 1 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index 14861f9..4da185f 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -1408,26 +1408,31 @@ static int soc_probe_codec(struct snd_soc_card *card,
 	codec->dapm.card = card;
 	soc_set_name_prefix(card, codec);
 
+	if (!try_module_get(codec->dev->driver->owner))
+		return -ENODEV;
+
 	if (codec->driver->probe) {
 		ret = codec->driver->probe(codec);
 		if (ret < 0) {
 			dev_err(codec->dev,
 				"asoc: failed to probe CODEC %s: %d\n",
 				codec->name, ret);
-			return ret;
+			goto err_probe;
 		}
 	}
 
 	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);
 
+	return 0;
+
+err_probe:
+	module_put(codec->dev->driver->owner);
+
 	return ret;
 }
 
@@ -1545,19 +1550,19 @@ static int soc_probe_dai_link(struct snd_soc_card *card, int num)
 
 	/* probe the platform */
 	if (!platform->probed) {
+		if (!try_module_get(platform->dev->driver->owner))
+			return -ENODEV;
+
 		if (platform->driver->probe) {
 			ret = platform->driver->probe(platform);
 			if (ret < 0) {
 				printk(KERN_ERR "asoc: failed to probe platform %s\n",
 						platform->name);
+				module_put(platform->dev->driver->owner);
 				return ret;
 			}
 		}
 		/* 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);
 	}
-- 
1.7.2.3

^ permalink raw reply related	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2011-01-27 10:23 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-01-26 11:58 [PATCH 1/4] ASoC: soc-core: Increment codec and platform driver refcounts before probing Jarkko Nikula
2011-01-26 11:58 ` [PATCH 2/4] ASoC: Add optional pointer to machine audio routes to snd_soc_card Jarkko Nikula
2011-01-26 13:35   ` Mark Brown
2011-01-26 11:58 ` [PATCH 3/4] ASoC: Add optional pointer to codec interconnects to snd_soc_codec_driver Jarkko Nikula
2011-01-26 13:41   ` Mark Brown
2011-01-26 11:58 ` [PATCH 4/4] ASoC: Convert bunch of codecs to use soc-core interconnect registration Jarkko Nikula
2011-01-26 13:28   ` Mark Brown
2011-01-26 13:41     ` Jarkko Nikula
2011-01-27  6:57   ` Peter Ujfalusi
2011-01-27  7:21     ` Jarkko Nikula
2011-01-27  9:58       ` Mark Brown
2011-01-26 14:28 ` [PATCH 1/4] ASoC: soc-core: Increment codec and platform driver refcounts before probing Jarkko Nikula

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.