Subject: [alsa-devel] [PATCH 1/7] ASoC: fix debugfs directory creation bug

From: [email-masked] (Lars-Peter Clausen)
Date: Fri, 27 Jun 2014 04:45:11 +0200

On 06/26/2014 04:22 PM, Russell King wrote:
> 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.

Do we actually want to create debugfs entries for the snd-soc-dummies? There 
shouldn't be any meaningful information in there.

If we want to and if we change the naming scheme of the debugfs entries 
anyway we should also add the component name to the entry name. This fixes a 
issue with devices that register multiple components.

The other thing is that we are working on generalizing the ASoC code and 
getting rid of the distinction between CODECs and platforms. Which means 
there won't really a way to get the prefix anymore soon.

- Lars

>
> Signed-off-by: Russell King <[email-masked]>
> ---
>   sound/soc/soc-core.c | 28 ++++++++++++++++++++++++----
>   1 file 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 = {
>   	.llseek = default_llseek,
>   };
>
> +static struct dentry *soc_debugfs_create_dir(struct dentry *parent,
> +	const char *fmt, ...)
> +{
> +	struct dentry *de;
> +	va_list ap;
> +	char *s;
> +
> +	va_start(ap, fmt);
> +	s = kvasprintf(GFP_KERNEL, fmt, ap);
> +	va_end(ap);
> +
> +	if (!s)
> +		return NULL;
> +
> +	de = debugfs_create_dir(s, parent);
> +	kfree(s);
> +
> +	return de;
> +}
> +
>   static void soc_init_codec_debugfs(struct snd_soc_codec *codec)
>   {
>   	struct dentry *debugfs_card_root = codec->card->debugfs_card_root;
>
> -	codec->debugfs_codec_root = debugfs_create_dir(codec->name,
> -						       debugfs_card_root);
> +	codec->debugfs_codec_root = soc_debugfs_create_dir(debugfs_card_root,
> +						"codec:%s", codec->name);
>   	if (!codec->debugfs_codec_root) {
>   		dev_warn(codec->dev,
>   			"ASoC: Failed to create codec debugfs directory\n");
> @@ -306,8 +326,8 @@ static void soc_init_platform_debugfs(struct snd_soc_platform *platform)
>   {
>   	struct dentry *debugfs_card_root = platform->card->debugfs_card_root;
>
> -	platform->debugfs_platform_root = debugfs_create_dir(platform->name,
> -						       debugfs_card_root);
> +	platform->debugfs_platform_root = soc_debugfs_create_dir(debugfs_card_root,
> +						"platform:%s", platform->name);
>   	if (!platform->debugfs_platform_root) {
>   		dev_warn(platform->dev,
>   			"ASoC: Failed to create platform debugfs directory\n");
>