From ed7011203a33d970fb7897c977794cdb151c7ff8 Mon Sep 17 00:00:00 2001 From: Liam Girdwood Date: Fri, 1 Jul 2011 16:54:08 +0100 Subject: [PATCH] --- yaml --- r: 257565 b: refs/heads/master c: 956245e9cd229138ad26521c326650eed8b88333 h: refs/heads/master i: 257563: 5098d82c999b4c53106a163178b67db0809ef48c v: v3 --- [refs] | 2 +- trunk/sound/soc/soc-core.c | 51 +++++++++++++++++++++++++++----------- 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/[refs] b/[refs] index 4cf5435680d5..0485a65529df 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 67d0c479d9392a89dd9ecf9d7b92148cc2251b00 +refs/heads/master: 956245e9cd229138ad26521c326650eed8b88333 diff --git a/trunk/sound/soc/soc-core.c b/trunk/sound/soc/soc-core.c index 32bc50387f61..d49f0ed56f9c 100644 --- a/trunk/sound/soc/soc-core.c +++ b/trunk/sound/soc/soc-core.c @@ -986,6 +986,39 @@ static int soc_probe_codec(struct snd_soc_card *card, return ret; } +static int soc_probe_platform(struct snd_soc_card *card, + struct snd_soc_platform *platform) +{ + int ret = 0; + const struct snd_soc_platform_driver *driver = platform->driver; + + platform->card = card; + + if (!try_module_get(platform->dev->driver->owner)) + return -ENODEV; + + if (driver->probe) { + ret = driver->probe(platform); + if (ret < 0) { + dev_err(platform->dev, + "asoc: failed to probe platform %s: %d\n", + platform->name, ret); + goto err_probe; + } + } + + /* mark platform as probed and add to card platform list */ + platform->probed = 1; + list_add(&platform->card_list, &card->platform_dev_list); + + return 0; + +err_probe: + module_put(platform->dev->driver->owner); + + return ret; +} + static void rtd_release(struct device *dev) {} static int soc_post_component_init(struct snd_soc_card *card, @@ -1109,21 +1142,9 @@ static int soc_probe_dai_link(struct snd_soc_card *card, int num, int order) /* probe the platform */ if (!platform->probed && platform->driver->probe_order == order) { - 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 */ - platform->probed = 1; - list_add(&platform->card_list, &card->platform_dev_list); + ret = soc_probe_platform(card, platform); + if (ret < 0) + return ret; } /* probe the CODEC DAI */