brintos

brintos / linux-shallow public Read only

0
0
Text · 2.3 KiB · 26d3b31 Raw
97 lines · c
1// SPDX-License-Identifier: GPL-2.02//3// // Renesas R-Car debugfs support4//5// Copyright (c) 2021 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>6//7//	> mount -t debugfs none /sys/kernel/debug8//	> cd /sys/kernel/debug/asoc/rcar-sound/ec500000.sound/rdai{N}/9//	> cat playback/xxx10//	> cat capture/xxx11//12#ifdef CONFIG_DEBUG_FS13 14#include <linux/debugfs.h>15#include "rsnd.h"16 17static int rsnd_debugfs_show(struct seq_file *m, void *v)18{19	struct rsnd_dai_stream *io = m->private;20	struct rsnd_mod *mod = rsnd_io_to_mod_ssi(io);21	struct rsnd_priv *priv = rsnd_mod_to_priv(mod);22	int i;23 24	/* adg is out of mods */25	rsnd_adg_clk_dbg_info(priv, m);26 27	for_each_rsnd_mod(i, mod, io) {28		u32 *status = mod->ops->get_status(mod, io, mod->type);29 30		seq_printf(m, "name: %s\n", rsnd_mod_name(mod));31		seq_printf(m, "status: %08x\n", *status);32 33		if (mod->ops->debug_info)34			mod->ops->debug_info(m, io, mod);35	}36 37	return 0;38}39DEFINE_SHOW_ATTRIBUTE(rsnd_debugfs);40 41void rsnd_debugfs_reg_show(struct seq_file *m, phys_addr_t _addr,42			   void __iomem *base, int offset, int size)43{44	int i, j;45 46	for (i = 0; i < size; i += 0x10) {47		phys_addr_t addr = _addr + offset + i;48 49		seq_printf(m, "%pa:", &addr);50		for (j = 0; j < 0x10; j += 0x4)51			seq_printf(m, " %08x", __raw_readl(base + offset + i + j));52		seq_puts(m, "\n");53	}54}55 56void rsnd_debugfs_mod_reg_show(struct seq_file *m, struct rsnd_mod *mod,57			       int reg_id, int offset, int size)58{59	struct rsnd_priv *priv = rsnd_mod_to_priv(mod);60 61	rsnd_debugfs_reg_show(m,62			      rsnd_gen_get_phy_addr(priv, reg_id),63			      rsnd_gen_get_base_addr(priv, reg_id),64			      offset, size);65}66 67int rsnd_debugfs_probe(struct snd_soc_component *component)68{69	struct rsnd_priv *priv = dev_get_drvdata(component->dev);70	struct rsnd_dai *rdai;71	struct dentry *dir;72	char name[64];73	int i;74 75	/* Gen1 is not supported */76	if (rsnd_is_gen1(priv))77		return 0;78 79	for_each_rsnd_dai(rdai, priv, i) {80		/*81		 * created debugfs will be automatically82		 * removed, nothing to do for _remove.83		 * see84		 *	soc_cleanup_component_debugfs()85		 */86		snprintf(name, sizeof(name), "rdai%d", i);87		dir = debugfs_create_dir(name, component->debugfs_root);88 89		debugfs_create_file("playback", 0444, dir, &rdai->playback, &rsnd_debugfs_fops);90		debugfs_create_file("capture",  0444, dir, &rdai->capture,  &rsnd_debugfs_fops);91	}92 93	return 0;94}95 96#endif /* CONFIG_DEBUG_FS */97