sound/soc/renesas/rcar/debugfs.c
Source file repositories/reference/linux-study-clean/sound/soc/renesas/rcar/debugfs.c
File Facts
- System
- Linux kernel
- Corpus path
sound/soc/renesas/rcar/debugfs.c- Extension
.c- Size
- 2389 bytes
- Lines
- 97
- Domain
- Driver Families
- Bucket
- sound/soc
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/debugfs.hrsnd.h
Detected Declarations
function rsnd_debugfs_showfunction for_each_rsnd_modfunction rsnd_debugfs_reg_showfunction rsnd_debugfs_mod_reg_showfunction rsnd_debugfs_probefunction for_each_rsnd_dai
Annotated Snippet
// SPDX-License-Identifier: GPL-2.0
//
// // Renesas R-Car debugfs support
//
// Copyright (c) 2021 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
//
// > mount -t debugfs none /sys/kernel/debug
// > cd /sys/kernel/debug/asoc/rcar-sound/ec500000.sound/rdai{N}/
// > cat playback/xxx
// > cat capture/xxx
//
#ifdef CONFIG_DEBUG_FS
#include <linux/debugfs.h>
#include "rsnd.h"
static int rsnd_debugfs_show(struct seq_file *m, void *v)
{
struct rsnd_dai_stream *io = m->private;
struct rsnd_mod *mod = rsnd_io_to_mod_ssi(io);
struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
int i;
/* adg is out of mods */
rsnd_adg_clk_dbg_info(priv, m);
for_each_rsnd_mod(i, mod, io) {
u32 *status = mod->ops->get_status(mod, io, mod->type);
seq_printf(m, "name: %s\n", rsnd_mod_name(mod));
seq_printf(m, "status: %08x\n", *status);
if (mod->ops->debug_info)
mod->ops->debug_info(m, io, mod);
}
return 0;
}
DEFINE_SHOW_ATTRIBUTE(rsnd_debugfs);
void rsnd_debugfs_reg_show(struct seq_file *m, phys_addr_t _addr,
void __iomem *base, int offset, int size)
{
int i, j;
for (i = 0; i < size; i += 0x10) {
phys_addr_t addr = _addr + offset + i;
seq_printf(m, "%pa:", &addr);
for (j = 0; j < 0x10; j += 0x4)
seq_printf(m, " %08x", __raw_readl(base + offset + i + j));
seq_puts(m, "\n");
}
}
void rsnd_debugfs_mod_reg_show(struct seq_file *m, struct rsnd_mod *mod,
int reg_id, int offset, int size)
{
struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
rsnd_debugfs_reg_show(m,
rsnd_gen_get_phy_addr(priv, reg_id),
rsnd_gen_get_base_addr(priv, reg_id),
offset, size);
}
int rsnd_debugfs_probe(struct snd_soc_component *component)
{
struct rsnd_priv *priv = dev_get_drvdata(component->dev);
struct rsnd_dai *rdai;
struct dentry *dir;
char name[64];
int i;
/* Gen1 is not supported */
if (rsnd_is_gen1(priv))
return 0;
for_each_rsnd_dai(rdai, priv, i) {
/*
* created debugfs will be automatically
* removed, nothing to do for _remove.
* see
* soc_cleanup_component_debugfs()
*/
snprintf(name, sizeof(name), "rdai%d", i);
dir = debugfs_create_dir(name, component->debugfs_root);
debugfs_create_file("playback", 0444, dir, &rdai->playback, &rsnd_debugfs_fops);
debugfs_create_file("capture", 0444, dir, &rdai->capture, &rsnd_debugfs_fops);
Annotation
- Immediate include surface: `linux/debugfs.h`, `rsnd.h`.
- Detected declarations: `function rsnd_debugfs_show`, `function for_each_rsnd_mod`, `function rsnd_debugfs_reg_show`, `function rsnd_debugfs_mod_reg_show`, `function rsnd_debugfs_probe`, `function for_each_rsnd_dai`.
- Atlas domain: Driver Families / sound/soc.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.