drivers/bus/mhi/host/debugfs.c

Source file repositories/reference/linux-study-clean/drivers/bus/mhi/host/debugfs.c

File Facts

System
Linux kernel
Corpus path
drivers/bus/mhi/host/debugfs.c
Extension
.c
Size
11540 bytes
Lines
415
Domain
Driver Families
Bucket
drivers/bus
Inferred role
Driver Families: operation-table or driver-model contract
Status
pattern 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.

Dependency Surface

Detected Declarations

Annotated Snippet

static const struct file_operations debugfs_states_fops = {
	.open = mhi_debugfs_states_open,
	.release = single_release,
	.read = seq_read,
};

static const struct file_operations debugfs_events_fops = {
	.open = mhi_debugfs_events_open,
	.release = single_release,
	.read = seq_read,
};

static const struct file_operations debugfs_channels_fops = {
	.open = mhi_debugfs_channels_open,
	.release = single_release,
	.read = seq_read,
};

static const struct file_operations debugfs_devices_fops = {
	.open = mhi_debugfs_devices_open,
	.release = single_release,
	.read = seq_read,
};

static const struct file_operations debugfs_regdump_fops = {
	.open = mhi_debugfs_regdump_open,
	.release = single_release,
	.read = seq_read,
};

static const struct file_operations debugfs_device_wake_fops = {
	.open = mhi_debugfs_device_wake_open,
	.write = mhi_debugfs_device_wake_write,
	.release = single_release,
	.read = seq_read,
};

static const struct file_operations debugfs_timeout_ms_fops = {
	.open = mhi_debugfs_timeout_ms_open,
	.write = mhi_debugfs_timeout_ms_write,
	.release = single_release,
	.read = seq_read,
};

static struct dentry *mhi_debugfs_root;

void mhi_create_debugfs(struct mhi_controller *mhi_cntrl)
{
	mhi_cntrl->debugfs_dentry =
			debugfs_create_dir(dev_name(&mhi_cntrl->mhi_dev->dev),
					   mhi_debugfs_root);

	debugfs_create_file("states", 0444, mhi_cntrl->debugfs_dentry,
			    mhi_cntrl, &debugfs_states_fops);
	debugfs_create_file("events", 0444, mhi_cntrl->debugfs_dentry,
			    mhi_cntrl, &debugfs_events_fops);
	debugfs_create_file("channels", 0444, mhi_cntrl->debugfs_dentry,
			    mhi_cntrl, &debugfs_channels_fops);
	debugfs_create_file("devices", 0444, mhi_cntrl->debugfs_dentry,
			    mhi_cntrl, &debugfs_devices_fops);
	debugfs_create_file("regdump", 0444, mhi_cntrl->debugfs_dentry,
			    mhi_cntrl, &debugfs_regdump_fops);
	debugfs_create_file("device_wake", 0644, mhi_cntrl->debugfs_dentry,
			    mhi_cntrl, &debugfs_device_wake_fops);
	debugfs_create_file("timeout_ms", 0644, mhi_cntrl->debugfs_dentry,
			    mhi_cntrl, &debugfs_timeout_ms_fops);
}

void mhi_destroy_debugfs(struct mhi_controller *mhi_cntrl)
{
	debugfs_remove_recursive(mhi_cntrl->debugfs_dentry);
	mhi_cntrl->debugfs_dentry = NULL;
}

void mhi_debugfs_init(void)
{
	mhi_debugfs_root = debugfs_create_dir(mhi_bus_type.name, NULL);
}

void mhi_debugfs_exit(void)
{
	debugfs_remove_recursive(mhi_debugfs_root);
}

Annotation

Implementation Notes