drivers/staging/greybus/audio_manager_module.c
Source file repositories/reference/linux-study-clean/drivers/staging/greybus/audio_manager_module.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/staging/greybus/audio_manager_module.c- Extension
.c- Size
- 6946 bytes
- Lines
- 241
- Domain
- Driver Families
- Bucket
- drivers/staging
- 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.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/slab.haudio_manager.haudio_manager_private.h
Detected Declarations
struct gb_audio_manager_module_attributefunction container_offunction gb_audio_module_attr_showfunction gb_audio_module_attr_storefunction gb_audio_module_releasefunction gb_audio_module_name_showfunction gb_audio_module_vid_showfunction gb_audio_module_pid_showfunction gb_audio_module_intf_id_showfunction gb_audio_module_ip_devices_showfunction gb_audio_module_op_devices_showfunction send_add_ueventfunction gb_audio_manager_module_createfunction gb_audio_manager_module_dump
Annotated Snippet
struct gb_audio_manager_module_attribute {
struct attribute attr;
ssize_t (*show)(struct gb_audio_manager_module *module,
struct gb_audio_manager_module_attribute *attr,
char *buf);
ssize_t (*store)(struct gb_audio_manager_module *module,
struct gb_audio_manager_module_attribute *attr,
const char *buf, size_t count);
};
static ssize_t gb_audio_module_attr_show(struct kobject *kobj,
struct attribute *attr, char *buf)
{
struct gb_audio_manager_module_attribute *attribute;
struct gb_audio_manager_module *module;
attribute = to_gb_audio_module_attr(attr);
module = to_gb_audio_module(kobj);
if (!attribute->show)
return -EIO;
return attribute->show(module, attribute, buf);
}
static ssize_t gb_audio_module_attr_store(struct kobject *kobj,
struct attribute *attr,
const char *buf, size_t len)
{
struct gb_audio_manager_module_attribute *attribute;
struct gb_audio_manager_module *module;
attribute = to_gb_audio_module_attr(attr);
module = to_gb_audio_module(kobj);
if (!attribute->store)
return -EIO;
return attribute->store(module, attribute, buf, len);
}
static const struct sysfs_ops gb_audio_module_sysfs_ops = {
.show = gb_audio_module_attr_show,
.store = gb_audio_module_attr_store,
};
static void gb_audio_module_release(struct kobject *kobj)
{
struct gb_audio_manager_module *module = to_gb_audio_module(kobj);
pr_info("Destroying audio module #%d\n", module->id);
kfree(module);
}
static ssize_t gb_audio_module_name_show(struct gb_audio_manager_module *module,
struct gb_audio_manager_module_attribute *attr, char *buf)
{
return sysfs_emit(buf, "%s", module->desc.name);
}
static struct gb_audio_manager_module_attribute gb_audio_module_name_attribute =
__ATTR(name, 0664, gb_audio_module_name_show, NULL);
static ssize_t gb_audio_module_vid_show(struct gb_audio_manager_module *module,
struct gb_audio_manager_module_attribute *attr, char *buf)
{
return sysfs_emit(buf, "%d", module->desc.vid);
}
static struct gb_audio_manager_module_attribute gb_audio_module_vid_attribute =
__ATTR(vid, 0664, gb_audio_module_vid_show, NULL);
static ssize_t gb_audio_module_pid_show(struct gb_audio_manager_module *module,
struct gb_audio_manager_module_attribute *attr, char *buf)
{
return sysfs_emit(buf, "%d", module->desc.pid);
}
static struct gb_audio_manager_module_attribute gb_audio_module_pid_attribute =
__ATTR(pid, 0664, gb_audio_module_pid_show, NULL);
static ssize_t gb_audio_module_intf_id_show(struct gb_audio_manager_module *module,
struct gb_audio_manager_module_attribute *attr,
char *buf)
{
return sysfs_emit(buf, "%d", module->desc.intf_id);
}
static struct gb_audio_manager_module_attribute
gb_audio_module_intf_id_attribute =
Annotation
- Immediate include surface: `linux/slab.h`, `audio_manager.h`, `audio_manager_private.h`.
- Detected declarations: `struct gb_audio_manager_module_attribute`, `function container_of`, `function gb_audio_module_attr_show`, `function gb_audio_module_attr_store`, `function gb_audio_module_release`, `function gb_audio_module_name_show`, `function gb_audio_module_vid_show`, `function gb_audio_module_pid_show`, `function gb_audio_module_intf_id_show`, `function gb_audio_module_ip_devices_show`.
- Atlas domain: Driver Families / drivers/staging.
- 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.