aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/soc-dapm.c
diff options
context:
space:
mode:
authorLars-Peter Clausen <lars@metafoo.de>2011-04-30 13:45:49 -0400
committerMark Brown <broonie@opensource.wolfsonmicro.com>2011-05-03 13:43:44 -0400
commitd5d1e0bef4385a0cd726613c0fc1909cd23efd39 (patch)
tree13942d02a969bfe93a8c32f2449282a475c7ceef /sound/soc/soc-dapm.c
parent8eecaf62445e175572ffabaab090b471001c5a2c (diff)
ASoC: Move DAPM widget debugfs entry creation to snd_soc_dapm_new_widgets
Currently debugfs entries for a DAPM widgets are only added in snd_soc_dapm_debugfs_init. If a widget is added later (for example in the dai_link's probe callback) it will not show up in debugfs. This patch moves the creation of the widget debugfs entry to snd_soc_dapm_new_widgets where it will be added after the widget has been properly instantiated. As a side-effect this will also reduce the number of times the DAPM widget list is iterated during a card's instantiation. Since it is possible that snd_soc_dapm_new_widgets is invoked form the codecs or cards probe callbacks, the creation of the debugfs dapm directory has to be moved before these are called. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Acked-by: Liam Girdwood <lrg@ti.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound/soc/soc-dapm.c')
-rw-r--r--sound/soc/soc-dapm.c35
1 files changed, 23 insertions, 12 deletions
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
index ffed456b2142..8454cc2967d6 100644
--- a/sound/soc/soc-dapm.c
+++ b/sound/soc/soc-dapm.c
@@ -1257,7 +1257,6 @@ static const struct file_operations dapm_bias_fops = {
1257void snd_soc_dapm_debugfs_init(struct snd_soc_dapm_context *dapm, 1257void snd_soc_dapm_debugfs_init(struct snd_soc_dapm_context *dapm,
1258 struct dentry *parent) 1258 struct dentry *parent)
1259{ 1259{
1260 struct snd_soc_dapm_widget *w;
1261 struct dentry *d; 1260 struct dentry *d;
1262 1261
1263 dapm->debugfs_dapm = debugfs_create_dir("dapm", parent); 1262 dapm->debugfs_dapm = debugfs_create_dir("dapm", parent);
@@ -1274,25 +1273,35 @@ void snd_soc_dapm_debugfs_init(struct snd_soc_dapm_context *dapm,
1274 if (!d) 1273 if (!d)
1275 dev_warn(dapm->dev, 1274 dev_warn(dapm->dev,
1276 "ASoC: Failed to create bias level debugfs file\n"); 1275 "ASoC: Failed to create bias level debugfs file\n");
1276}
1277 1277
1278 list_for_each_entry(w, &dapm->card->widgets, list) { 1278static void dapm_debugfs_add_widget(struct snd_soc_dapm_widget *w)
1279 if (!w->name || w->dapm != dapm) 1279{
1280 continue; 1280 struct snd_soc_dapm_context *dapm = w->dapm;
1281 struct dentry *d;
1281 1282
1282 d = debugfs_create_file(w->name, 0444, 1283 if (!dapm->debugfs_dapm || !w->name)
1283 dapm->debugfs_dapm, w, 1284 return;
1284 &dapm_widget_power_fops); 1285
1285 if (!d) 1286 d = debugfs_create_file(w->name, 0444,
1286 dev_warn(w->dapm->dev, 1287 dapm->debugfs_dapm, w,
1287 "ASoC: Failed to create %s debugfs file\n", 1288 &dapm_widget_power_fops);
1288 w->name); 1289 if (!d)
1289 } 1290 dev_warn(w->dapm->dev,
1291 "ASoC: Failed to create %s debugfs file\n",
1292 w->name);
1290} 1293}
1294
1291#else 1295#else
1292void snd_soc_dapm_debugfs_init(struct snd_soc_dapm_context *dapm, 1296void snd_soc_dapm_debugfs_init(struct snd_soc_dapm_context *dapm,
1293 struct dentry *parent) 1297 struct dentry *parent)
1294{ 1298{
1295} 1299}
1300
1301static inline void dapm_debugfs_add_widget(struct snd_soc_dapm_widget *w)
1302{
1303}
1304
1296#endif 1305#endif
1297 1306
1298/* test and update the power status of a mux widget */ 1307/* test and update the power status of a mux widget */
@@ -1765,6 +1774,8 @@ int snd_soc_dapm_new_widgets(struct snd_soc_dapm_context *dapm)
1765 } 1774 }
1766 1775
1767 w->new = 1; 1776 w->new = 1;
1777
1778 dapm_debugfs_add_widget(w);
1768 } 1779 }
1769 1780
1770 dapm_power_widgets(dapm, SND_SOC_DAPM_STREAM_NOP); 1781 dapm_power_widgets(dapm, SND_SOC_DAPM_STREAM_NOP);