summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/sound/soc.h7
-rw-r--r--sound/soc/soc-core.c36
2 files changed, 17 insertions, 26 deletions
diff --git a/include/sound/soc.h b/include/sound/soc.h
index 85ad971e9432..fd6ecea48fc0 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
@@ -941,6 +941,7 @@ struct snd_soc_dai_link {
#define COMP_CPU(_dai) { .dai_name = _dai, }
#define COMP_CODEC(_name, _dai) { .name = _name, .dai_name = _dai, }
#define COMP_PLATFORM(_name) { .name = _name }
+#define COMP_AUX(_name) { .name = _name }
#define COMP_DUMMY() { .name = "snd-soc-dummy", .dai_name = "snd-soc-dummy-dai", }
extern struct snd_soc_dai_link_component null_dailink_component[0];
@@ -971,6 +972,12 @@ struct snd_soc_aux_dev {
const char *codec_name;
struct device_node *codec_of_node;
+ /*
+ * name, codec_name, codec_of_node will be replaced
+ * into dlc. don't use both in the same time
+ */
+ struct snd_soc_dai_link_component dlc;
+
/* codec/machine specific init - e.g. add machine controls */
int (*init)(struct snd_soc_component *component);
};
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index bf45e60eb34f..56b99e340dda 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -1537,38 +1537,22 @@ static int soc_bind_aux_dev(struct snd_soc_card *card, int num)
{
struct snd_soc_aux_dev *aux_dev = &card->aux_dev[num];
struct snd_soc_component *component;
- struct snd_soc_dai_link_component dlc;
- if (aux_dev->codec_of_node || aux_dev->codec_name) {
- /* codecs, usually analog devices */
- dlc.name = aux_dev->codec_name;
- dlc.of_node = aux_dev->codec_of_node;
- component = soc_find_component(&dlc);
- if (!component) {
- if (dlc.of_node)
- dlc.name = of_node_full_name(dlc.of_node);
- goto err_defer;
- }
- } else if (aux_dev->name) {
- /* generic components */
- dlc.name = aux_dev->name;
- dlc.of_node = NULL;
- component = soc_find_component(&dlc);
- if (!component)
- goto err_defer;
- } else {
- dev_err(card->dev, "ASoC: Invalid auxiliary device\n");
- return -EINVAL;
- }
+ /* remove me */
+ if (aux_dev->codec_name)
+ aux_dev->dlc.name = aux_dev->codec_name;
+ if (aux_dev->codec_of_node)
+ aux_dev->dlc.of_node = aux_dev->codec_of_node;
+
+ /* codecs, usually analog devices */
+ component = soc_find_component(&aux_dev->dlc);
+ if (!component)
+ return -EPROBE_DEFER;
component->init = aux_dev->init;
list_add(&component->card_aux_list, &card->aux_comp_list);
return 0;
-
-err_defer:
- dev_err(card->dev, "ASoC: %s not registered\n", dlc.name);
- return -EPROBE_DEFER;
}
static int soc_probe_aux_devices(struct snd_soc_card *card)