drivers/media/platform/rockchip/rkisp1/rkisp1-debug.c
Source file repositories/reference/linux-study-clean/drivers/media/platform/rockchip/rkisp1/rkisp1-debug.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/media/platform/rockchip/rkisp1/rkisp1-debug.c- Extension
.c- Size
- 7721 bytes
- Lines
- 250
- Domain
- Driver Families
- Bucket
- drivers/media
- 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.hlinux/delay.hlinux/device.hlinux/minmax.hlinux/pm_runtime.hlinux/seq_file.hlinux/string.hrkisp1-common.hrkisp1-regs.h
Detected Declarations
struct rkisp1_debug_registerfunction rkisp1_debug_dump_regsfunction rkisp1_debug_dump_core_regs_showfunction rkisp1_debug_dump_isp_regs_showfunction rkisp1_debug_dump_rsz_regs_showfunction rkisp1_debug_dump_mi_mp_showfunction rkisp1_debug_input_status_showfunction rkisp1_debug_initfunction rkisp1_debug_cleanup
Annotated Snippet
struct rkisp1_debug_register {
u32 reg;
u32 shd;
const char * const name;
};
#define RKISP1_DEBUG_REG(name) { RKISP1_CIF_##name, 0, #name }
#define RKISP1_DEBUG_SHD_REG(name) { \
RKISP1_CIF_##name, RKISP1_CIF_##name##_SHD, #name \
}
/* Keep this up-to-date when adding new registers. */
#define RKISP1_MAX_REG_LENGTH 21
static int rkisp1_debug_dump_regs(struct rkisp1_device *rkisp1,
struct seq_file *m, unsigned int offset,
const struct rkisp1_debug_register *regs)
{
const int width = RKISP1_MAX_REG_LENGTH;
u32 val, shd;
int ret;
ret = pm_runtime_get_if_in_use(rkisp1->dev);
if (ret <= 0)
return ret ? : -ENODATA;
for (; regs->name; ++regs) {
val = rkisp1_read(rkisp1, offset + regs->reg);
if (regs->shd) {
shd = rkisp1_read(rkisp1, offset + regs->shd);
seq_printf(m, "%*s: 0x%08x/0x%08x\n", width, regs->name,
val, shd);
} else {
seq_printf(m, "%*s: 0x%08x\n", width, regs->name, val);
}
}
pm_runtime_put(rkisp1->dev);
return 0;
}
static int rkisp1_debug_dump_core_regs_show(struct seq_file *m, void *p)
{
static const struct rkisp1_debug_register registers[] = {
RKISP1_DEBUG_REG(VI_CCL),
RKISP1_DEBUG_REG(VI_ICCL),
RKISP1_DEBUG_REG(VI_IRCL),
RKISP1_DEBUG_REG(VI_DPCL),
RKISP1_DEBUG_REG(MI_CTRL),
RKISP1_DEBUG_REG(MI_BYTE_CNT),
RKISP1_DEBUG_REG(MI_CTRL_SHD),
RKISP1_DEBUG_REG(MI_RIS),
RKISP1_DEBUG_REG(MI_STATUS),
RKISP1_DEBUG_REG(MI_DMA_CTRL),
RKISP1_DEBUG_REG(MI_DMA_STATUS),
{ /* Sentinel */ },
};
struct rkisp1_device *rkisp1 = m->private;
return rkisp1_debug_dump_regs(rkisp1, m, 0, registers);
}
DEFINE_SHOW_ATTRIBUTE(rkisp1_debug_dump_core_regs);
static int rkisp1_debug_dump_isp_regs_show(struct seq_file *m, void *p)
{
static const struct rkisp1_debug_register registers[] = {
RKISP1_DEBUG_REG(ISP_CTRL),
RKISP1_DEBUG_REG(ISP_ACQ_PROP),
RKISP1_DEBUG_REG(ISP_FLAGS_SHD),
RKISP1_DEBUG_REG(ISP_RIS),
RKISP1_DEBUG_REG(ISP_ERR),
RKISP1_DEBUG_SHD_REG(ISP_IS_H_OFFS),
RKISP1_DEBUG_SHD_REG(ISP_IS_V_OFFS),
RKISP1_DEBUG_SHD_REG(ISP_IS_H_SIZE),
RKISP1_DEBUG_SHD_REG(ISP_IS_V_SIZE),
{ /* Sentinel */ },
};
struct rkisp1_device *rkisp1 = m->private;
return rkisp1_debug_dump_regs(rkisp1, m, 0, registers);
}
DEFINE_SHOW_ATTRIBUTE(rkisp1_debug_dump_isp_regs);
static int rkisp1_debug_dump_rsz_regs_show(struct seq_file *m, void *p)
{
static const struct rkisp1_debug_register registers[] = {
RKISP1_DEBUG_SHD_REG(RSZ_CTRL),
RKISP1_DEBUG_SHD_REG(RSZ_SCALE_HY),
Annotation
- Immediate include surface: `linux/debugfs.h`, `linux/delay.h`, `linux/device.h`, `linux/minmax.h`, `linux/pm_runtime.h`, `linux/seq_file.h`, `linux/string.h`, `rkisp1-common.h`.
- Detected declarations: `struct rkisp1_debug_register`, `function rkisp1_debug_dump_regs`, `function rkisp1_debug_dump_core_regs_show`, `function rkisp1_debug_dump_isp_regs_show`, `function rkisp1_debug_dump_rsz_regs_show`, `function rkisp1_debug_dump_mi_mp_show`, `function rkisp1_debug_input_status_show`, `function rkisp1_debug_init`, `function rkisp1_debug_cleanup`.
- Atlas domain: Driver Families / drivers/media.
- 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.