Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 88439ac7 authored by Peter Ujfalusi's avatar Peter Ujfalusi Committed by Mark Brown
Browse files

ASoC: add support for multiple cards/codecs in debugfs



In order to support multiple codecs on the same system in the debugfs
the directory hierarchy need to be changed by adding directory per codec
under the asoc direcorty:

debugfs/asoc/{dev_name(socdev->dev)}-{codec->name}/codec_reg
                                                  /dapm_pop_time
                                                  /dapm/{widgets}

With the original implementation only the debugfs files are only
created for the first codec, other codecs loaded later would fail to
create the debugfs files (since they are already exist).
Furthermore in this situation any of the codecs has been removed, would
cause the debugfs entries to disappear, regardless if the codec, which
created them are still loaded (the one which loaded first).

Signed-off-by: default avatarPeter Ujfalusi <peter.ujfalusi@nokia.com>
Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent 17c86a32
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -413,6 +413,7 @@ struct snd_soc_codec {
	unsigned int num_dai;
	unsigned int num_dai;


#ifdef CONFIG_DEBUG_FS
#ifdef CONFIG_DEBUG_FS
	struct dentry *debugfs_codec_root;
	struct dentry *debugfs_reg;
	struct dentry *debugfs_reg;
	struct dentry *debugfs_pop_time;
	struct dentry *debugfs_pop_time;
	struct dentry *debugfs_dapm;
	struct dentry *debugfs_dapm;
+19 −7
Original line number Original line Diff line number Diff line
@@ -1254,21 +1254,35 @@ static const struct file_operations codec_reg_fops = {


static void soc_init_codec_debugfs(struct snd_soc_codec *codec)
static void soc_init_codec_debugfs(struct snd_soc_codec *codec)
{
{
	char codec_root[128];

	snprintf(codec_root, sizeof(codec_root),
		 "%s-%s", dev_name(codec->socdev->dev), codec->name);

	codec->debugfs_codec_root = debugfs_create_dir(codec_root,
						       debugfs_root);
	if (!codec->debugfs_codec_root) {
		printk(KERN_WARNING
		       "ASoC: Failed to create codec debugfs directory\n");
		return;
	}

	codec->debugfs_reg = debugfs_create_file("codec_reg", 0644,
	codec->debugfs_reg = debugfs_create_file("codec_reg", 0644,
						 debugfs_root, codec,
						 codec->debugfs_codec_root,
						 &codec_reg_fops);
						 codec, &codec_reg_fops);
	if (!codec->debugfs_reg)
	if (!codec->debugfs_reg)
		printk(KERN_WARNING
		printk(KERN_WARNING
		       "ASoC: Failed to create codec register debugfs file\n");
		       "ASoC: Failed to create codec register debugfs file\n");


	codec->debugfs_pop_time = debugfs_create_u32("dapm_pop_time", 0744,
	codec->debugfs_pop_time = debugfs_create_u32("dapm_pop_time", 0744,
						     debugfs_root,
						     codec->debugfs_codec_root,
						     &codec->pop_time);
						     &codec->pop_time);
	if (!codec->debugfs_pop_time)
	if (!codec->debugfs_pop_time)
		printk(KERN_WARNING
		printk(KERN_WARNING
		       "Failed to create pop time debugfs file\n");
		       "Failed to create pop time debugfs file\n");


	codec->debugfs_dapm = debugfs_create_dir("dapm", debugfs_root);
	codec->debugfs_dapm = debugfs_create_dir("dapm",
						 codec->debugfs_codec_root);
	if (!codec->debugfs_dapm)
	if (!codec->debugfs_dapm)
		printk(KERN_WARNING
		printk(KERN_WARNING
		       "Failed to create DAPM debugfs directory\n");
		       "Failed to create DAPM debugfs directory\n");
@@ -1278,9 +1292,7 @@ static void soc_init_codec_debugfs(struct snd_soc_codec *codec)


static void soc_cleanup_codec_debugfs(struct snd_soc_codec *codec)
static void soc_cleanup_codec_debugfs(struct snd_soc_codec *codec)
{
{
	debugfs_remove_recursive(codec->debugfs_dapm);
	debugfs_remove_recursive(codec->debugfs_codec_root);
	debugfs_remove(codec->debugfs_pop_time);
	debugfs_remove(codec->debugfs_reg);
}
}


#else
#else