ASoC: Add a per-card DAPM context
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Wed, 2 Mar 2011 18:21:57 +0000 (18:21 +0000)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Thu, 3 Mar 2011 11:15:16 +0000 (11:15 +0000)
This means that rather than adding the board specific DAPM widgets to a
random CODEC DAPM context they can be added to the card itself which is
a bit cleaner. Previously there only was one DAPM context and it was
tied to the single supported CODEC.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
include/sound/soc.h
sound/soc/soc-core.c

index 65d865f7e8c0617157d202bc79ba842295b306d3..8064cd130356fdb40c73c4c8cb5209804e0501aa 100644 (file)
@@ -729,6 +729,9 @@ struct snd_soc_card {
        struct list_head paths;
        struct list_head dapm_list;
 
+       /* Generic DAPM context for the card */
+       struct snd_soc_dapm_context dapm;
+
 #ifdef CONFIG_DEBUG_FS
        struct dentry *debugfs_card_root;
        struct dentry *debugfs_pop_time;
index 64befac3f9c3a276f3f75f321c074a1e3d960e49..24bfc3ff8e1740017de969736ff7de4e1396c526 100644 (file)
@@ -1837,6 +1837,11 @@ static void snd_soc_instantiate_card(struct snd_soc_card *card)
        }
        card->snd_card->dev = card->dev;
 
+       card->dapm.bias_level = SND_SOC_BIAS_OFF;
+       card->dapm.dev = card->dev;
+       card->dapm.card = card;
+       list_add(&card->dapm.list, &card->dapm_list);
+
 #ifdef CONFIG_PM_SLEEP
        /* deferred resume work */
        INIT_WORK(&card->deferred_resume_work, soc_resume_deferred);
@@ -1867,6 +1872,14 @@ static void snd_soc_instantiate_card(struct snd_soc_card *card)
                }
        }
 
+       card->dapm.debugfs_dapm = debugfs_create_dir("dapm",
+                                                    card->debugfs_card_root);
+       if (!card->dapm.debugfs_dapm)
+               printk(KERN_WARNING
+                      "Failed to create card DAPM debugfs directory\n");
+
+       snd_soc_dapm_debugfs_init(&card->dapm);
+
        snprintf(card->snd_card->shortname, sizeof(card->snd_card->shortname),
                 "%s",  card->name);
        snprintf(card->snd_card->longname, sizeof(card->snd_card->longname),