sound/soc/intel/atom/sst/sst_acpi.c
Source file repositories/reference/linux-study-clean/sound/soc/intel/atom/sst/sst_acpi.c
File Facts
- System
- Linux kernel
- Corpus path
sound/soc/intel/atom/sst/sst_acpi.c- Extension
.c- Size
- 11832 bytes
- Lines
- 418
- 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/module.hlinux/fs.hlinux/interrupt.hlinux/slab.hlinux/string.hlinux/io.hlinux/platform_device.hlinux/firmware.hlinux/pm_qos.hlinux/dmi.hlinux/acpi.hasm/platform_sst_audio.hsound/core.hsound/intel-dsp-config.hsound/soc.hsound/compress_driver.hacpi/acbuffer.hacpi/platform/acenv.hacpi/platform/aclinux.hacpi/actypes.hacpi/acpi_bus.hsound/soc-acpi.hsound/soc-acpi-intel-match.h../sst-mfld-platform.h../../common/soc-intel-quirks.hsst.h
Detected Declarations
function sst_platform_get_resourcesfunction sst_acpi_probefunction sst_acpi_remove
Annotated Snippet
if (!rsrc) {
dev_err(dev, "Invalid SHIM base\n");
return -EIO;
}
rsrc->start -= pdata->res_info->shim_offset;
rsrc->end = rsrc->start + 0x200000 - 1;
} else {
ret = kstrtouint(id->id, 16, &dev_id);
if (ret < 0) {
dev_err(dev, "Unique device id conversion error: %d\n", ret);
return ret;
}
if (soc_intel_is_byt_cr(pdev))
byt_rvp_platform_data.res_info = &bytcr_res_info;
}
dev_dbg(dev, "ACPI device id: %x\n", dev_id);
ret = sst_alloc_drv_context(&ctx, dev, dev_id);
if (ret < 0)
return ret;
/* update machine parameters */
mach->mach_params.acpi_ipc_irq_index =
pdata->res_info->acpi_ipc_irq_index;
plat_dev = platform_device_register_data(dev, pdata->platform, -1,
NULL, 0);
if (IS_ERR(plat_dev)) {
dev_err(dev, "Failed to create machine device: %s\n",
pdata->platform);
return PTR_ERR(plat_dev);
}
/*
* Create platform device for sst machine driver,
* pass machine info as pdata
*/
mdev = platform_device_register_data(dev, mach->drv_name, -1,
(const void *)mach, sizeof(*mach));
if (IS_ERR(mdev)) {
dev_err(dev, "Failed to create machine device: %s\n",
mach->drv_name);
return PTR_ERR(mdev);
}
/* Fill sst platform data */
ctx->pdata = pdata;
strscpy(ctx->firmware_name, mach->fw_filename);
ret = sst_platform_get_resources(ctx);
if (ret)
return ret;
ret = sst_context_init(ctx);
if (ret < 0)
return ret;
sst_configure_runtime_pm(ctx);
platform_set_drvdata(pdev, ctx);
return ret;
}
/**
* sst_acpi_remove - remove function
*
* @pdev: platform device structure
*
* This function is called by OS when a device is unloaded
* This frees the interrupt etc
*/
static void sst_acpi_remove(struct platform_device *pdev)
{
struct intel_sst_drv *ctx;
ctx = platform_get_drvdata(pdev);
sst_context_cleanup(ctx);
platform_set_drvdata(pdev, NULL);
}
static const struct acpi_device_id sst_acpi_ids[] = {
{ "LPE0F28", (unsigned long)&snd_soc_acpi_intel_baytrail_machines},
{ "80860F28", (unsigned long)&snd_soc_acpi_intel_baytrail_machines},
{ "808622A8", (unsigned long)&snd_soc_acpi_intel_cherrytrail_machines},
{ },
};
MODULE_DEVICE_TABLE(acpi, sst_acpi_ids);
Annotation
- Immediate include surface: `linux/module.h`, `linux/fs.h`, `linux/interrupt.h`, `linux/slab.h`, `linux/string.h`, `linux/io.h`, `linux/platform_device.h`, `linux/firmware.h`.
- Detected declarations: `function sst_platform_get_resources`, `function sst_acpi_probe`, `function sst_acpi_remove`.
- 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.