aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/soc-core.c
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@arm.linux.org.uk>2014-06-26 10:22:50 -0400
committerMark Brown <broonie@linaro.org>2014-06-28 08:45:39 -0400
commite73f3de5c5eb5285a1b1d8eed111eb229702b20f (patch)
tree08a88e895b6cb1b9664b71c95b712e67114a755b /sound/soc/soc-core.c
parent7171511eaec5bf23fb06078f59784a3a0626b38f (diff)
ASoC: fix debugfs directory creation bug
Avoid creating duplicate directories by prefixing codecs and platforms with their separate identifiers. This avoids snd-soc-dummy (which can appear both as a dummy platform and a dummy codec on the same card) from clashing. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> Tested-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: Mark Brown <broonie@linaro.org>
Diffstat (limited to 'sound/soc/soc-core.c')
-rw-r--r--sound/soc/soc-core.c28
1 files changed, 24 insertions, 4 deletions
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index b87d7d882e6d..91120b8e283e 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -270,12 +270,32 @@ static const struct file_operations codec_reg_fops = {
270 .llseek = default_llseek, 270 .llseek = default_llseek,
271}; 271};
272 272
273static struct dentry *soc_debugfs_create_dir(struct dentry *parent,
274 const char *fmt, ...)
275{
276 struct dentry *de;
277 va_list ap;
278 char *s;
279
280 va_start(ap, fmt);
281 s = kvasprintf(GFP_KERNEL, fmt, ap);
282 va_end(ap);
283
284 if (!s)
285 return NULL;
286
287 de = debugfs_create_dir(s, parent);
288 kfree(s);
289
290 return de;
291}
292
273static void soc_init_codec_debugfs(struct snd_soc_codec *codec) 293static void soc_init_codec_debugfs(struct snd_soc_codec *codec)
274{ 294{
275 struct dentry *debugfs_card_root = codec->card->debugfs_card_root; 295 struct dentry *debugfs_card_root = codec->card->debugfs_card_root;
276 296
277 codec->debugfs_codec_root = debugfs_create_dir(codec->name, 297 codec->debugfs_codec_root = soc_debugfs_create_dir(debugfs_card_root,
278 debugfs_card_root); 298 "codec:%s", codec->name);
279 if (!codec->debugfs_codec_root) { 299 if (!codec->debugfs_codec_root) {
280 dev_warn(codec->dev, 300 dev_warn(codec->dev,
281 "ASoC: Failed to create codec debugfs directory\n"); 301 "ASoC: Failed to create codec debugfs directory\n");
@@ -306,8 +326,8 @@ static void soc_init_platform_debugfs(struct snd_soc_platform *platform)
306{ 326{
307 struct dentry *debugfs_card_root = platform->card->debugfs_card_root; 327 struct dentry *debugfs_card_root = platform->card->debugfs_card_root;
308 328
309 platform->debugfs_platform_root = debugfs_create_dir(platform->name, 329 platform->debugfs_platform_root = soc_debugfs_create_dir(debugfs_card_root,
310 debugfs_card_root); 330 "platform:%s", platform->name);
311 if (!platform->debugfs_platform_root) { 331 if (!platform->debugfs_platform_root) {
312 dev_warn(platform->dev, 332 dev_warn(platform->dev,
313 "ASoC: Failed to create platform debugfs directory\n"); 333 "ASoC: Failed to create platform debugfs directory\n");