Skip to content

Commit

Permalink
ASoC: core: Add helpers for dai link and aux dev init
Browse files Browse the repository at this point in the history
Separate DAI link and aux dev initialization in preparation for
DAI multicodec support.
Since aux dev will remain using single codecs but DAI links
will be able to support multiple codecs.

No functional change.

Signed-off-by: Misael Lopez Cruz <misael.lopez@ti.com>
[fparent@baylibre.com: Adapt to 3.14+]
Signed-off-by: Fabien Parent <fparent@baylibre.com>
Signed-off-by: Benoit Cousson <bcousson@baylibre.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
  • Loading branch information
Misael Lopez Cruz authored and Mark Brown committed Apr 24, 2014
1 parent 02c9c7b commit 503ae5e
Showing 1 changed file with 59 additions and 8 deletions.
67 changes: 59 additions & 8 deletions sound/soc/soc-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1268,6 +1268,63 @@ static void rtd_release(struct device *dev)
kfree(dev);
}

static int soc_aux_dev_init(struct snd_soc_card *card,
struct snd_soc_codec *codec,
int num)
{
struct snd_soc_aux_dev *aux_dev = &card->aux_dev[num];
struct snd_soc_pcm_runtime *rtd = &card->rtd_aux[num];
const char *temp;
int ret;

rtd->card = card;

temp = codec->name_prefix;
codec->name_prefix = NULL;

/* do machine specific initialization */
if (aux_dev->init) {
ret = aux_dev->init(&codec->dapm);
if (ret < 0)
return ret;
}

codec->name_prefix = temp;

rtd->codec = codec;

return 0;
}

static int soc_dai_link_init(struct snd_soc_card *card,
struct snd_soc_codec *codec,
int num)
{
struct snd_soc_dai_link *dai_link = &card->dai_link[num];
struct snd_soc_pcm_runtime *rtd = &card->rtd[num];
const char *temp;
int ret;

rtd->card = card;

/* machine controls, routes and widgets are not prefixed */
temp = codec->name_prefix;
codec->name_prefix = NULL;

/* do machine specific initialization */
if (dai_link->init) {
ret = dai_link->init(rtd);
if (ret < 0)
return ret;
}

codec->name_prefix = temp;

rtd->codec = codec;

return 0;
}

static int soc_post_component_init(struct snd_soc_card *card,
struct snd_soc_codec *codec,
int num, int dailess)
Expand All @@ -1282,26 +1339,20 @@ static int soc_post_component_init(struct snd_soc_card *card,
dai_link = &card->dai_link[num];
rtd = &card->rtd[num];
name = dai_link->name;
ret = soc_dai_link_init(card, codec, num);
} else {
aux_dev = &card->aux_dev[num];
rtd = &card->rtd_aux[num];
name = aux_dev->name;
ret = soc_aux_dev_init(card, codec, num);
}
rtd->card = card;

/* do machine specific initialization */
if (!dailess && dai_link->init)
ret = dai_link->init(rtd);
else if (dailess && aux_dev->init)
ret = aux_dev->init(&codec->dapm);
if (ret < 0) {
dev_err(card->dev, "ASoC: failed to init %s: %d\n", name, ret);
return ret;
}

/* register the rtd device */
rtd->codec = codec;

rtd->dev = kzalloc(sizeof(struct device), GFP_KERNEL);
if (!rtd->dev)
return -ENOMEM;
Expand Down

0 comments on commit 503ae5e

Please sign in to comment.