Skip to content

Commit

Permalink
ASoC: core - Make platform probe more like codec probe.
Browse files Browse the repository at this point in the history
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: Liam Girdwood <lrg@ti.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
  • Loading branch information
Liam Girdwood authored and Mark Brown committed Jul 2, 2011
1 parent 67d0c47 commit 956245e
Showing 1 changed file with 36 additions and 15 deletions.
51 changes: 36 additions & 15 deletions sound/soc/soc-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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 */
Expand Down

0 comments on commit 956245e

Please sign in to comment.