Commit 956245e9 authored by Liam Girdwood's avatar Liam Girdwood Committed by Mark Brown

ASoC: core - Make platform probe more like codec probe.

In preparation for ASoC dynamic PCM support (AKA ASoC DSP)

Platform will also support DAPM so separate out the probe function
to simplify the code (just like the codec probe).
Signed-off-by: default avatarLiam Girdwood <lrg@ti.com>
Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent 67d0c479
...@@ -986,6 +986,39 @@ static int soc_probe_codec(struct snd_soc_card *card, ...@@ -986,6 +986,39 @@ static int soc_probe_codec(struct snd_soc_card *card,
return ret; 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 void rtd_release(struct device *dev) {}
static int soc_post_component_init(struct snd_soc_card *card, 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) ...@@ -1109,21 +1142,9 @@ static int soc_probe_dai_link(struct snd_soc_card *card, int num, int order)
/* probe the platform */ /* probe the platform */
if (!platform->probed && if (!platform->probed &&
platform->driver->probe_order == order) { platform->driver->probe_order == order) {
if (!try_module_get(platform->dev->driver->owner)) ret = soc_probe_platform(card, platform);
return -ENODEV; if (ret < 0)
return ret;
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);
} }
/* probe the CODEC DAI */ /* probe the CODEC DAI */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment