sound/soc/mediatek/common/mtk-afe-platform-driver.c
Source file repositories/reference/linux-study-clean/sound/soc/mediatek/common/mtk-afe-platform-driver.c
File Facts
- System
- Linux kernel
- Corpus path
sound/soc/mediatek/common/mtk-afe-platform-driver.c- Extension
.c- Size
- 5115 bytes
- Lines
- 181
- Domain
- Driver Families
- Bucket
- sound/soc
- Inferred role
- Driver Families: exported/initcall integration point
- Status
- integration 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.
- Exports symbols or registers init work; inspect boot/module ordering and who consumes the exported contract.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/module.hlinux/dma-mapping.hsound/soc.hmtk-afe-platform-driver.hmtk-base-afe.h
Detected Declarations
function Copyrightfunction list_for_each_entryfunction mtk_afe_add_sub_dai_controlfunction list_for_each_entryfunction mtk_afe_pcm_pointerfunction mtk_afe_pcm_newfunction mtk_afe_component_probeexport mtk_afe_combine_sub_daiexport mtk_afe_add_sub_dai_controlexport mtk_afe_pcm_pointerexport mtk_afe_pcm_newexport mtk_afe_pcm_platform
Annotated Snippet
if (ret) {
dev_err(dev, "%s hw_ptr_upper32 err\n", __func__);
return 0;
}
}
ret = regmap_read(regmap, memif_data->reg_ofs_base, &hw_base_lower32);
if (ret) {
dev_err(dev, "%s hw_base_lower32 err\n", __func__);
return 0;
}
if (memif_data->reg_ofs_base_msb) {
ret = regmap_read(regmap, memif_data->reg_ofs_base_msb, &hw_base_upper32);
if (ret) {
dev_err(dev, "%s hw_base_upper32 err\n", __func__);
return 0;
}
}
hw_ptr = ((unsigned long long)hw_ptr_upper32 << 32) | hw_ptr_lower32;
hw_base = ((unsigned long long)hw_base_upper32 << 32) | hw_base_lower32;
if (!hw_ptr || !hw_base) {
dev_err(dev, "hw_ptr or hw_base = 0 err\n");
return 0;
}
pcm_ptr_bytes = MTK_ALIGN_16BYTES(hw_ptr - hw_base);
return bytes_to_frames(substream->runtime, (ssize_t)pcm_ptr_bytes);
}
EXPORT_SYMBOL_GPL(mtk_afe_pcm_pointer);
int mtk_afe_pcm_new(struct snd_soc_component *component,
struct snd_soc_pcm_runtime *rtd)
{
size_t size;
struct snd_pcm *pcm = rtd->pcm;
struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);
size = afe->mtk_afe_hardware->buffer_bytes_max;
snd_pcm_set_managed_buffer_all(pcm, SNDRV_DMA_TYPE_DEV, afe->dev,
afe->preallocate_buffers ? size : 0,
size);
return 0;
}
EXPORT_SYMBOL_GPL(mtk_afe_pcm_new);
static int mtk_afe_component_probe(struct snd_soc_component *component)
{
struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component);
int ret;
snd_soc_component_init_regmap(component, afe->regmap);
/* If the list was never initialized there are no sub-DAIs */
if (afe->sub_dais.next && afe->sub_dais.prev) {
ret = mtk_afe_add_sub_dai_control(component);
if (ret)
return ret;
}
return 0;
}
const struct snd_soc_component_driver mtk_afe_pcm_platform = {
.name = AFE_PCM_NAME,
.pointer = mtk_afe_pcm_pointer,
.pcm_new = mtk_afe_pcm_new,
.probe = mtk_afe_component_probe,
};
EXPORT_SYMBOL_GPL(mtk_afe_pcm_platform);
MODULE_DESCRIPTION("Mediatek simple platform driver");
MODULE_AUTHOR("Garlic Tseng <garlic.tseng@mediatek.com>");
MODULE_LICENSE("GPL v2");
Annotation
- Immediate include surface: `linux/module.h`, `linux/dma-mapping.h`, `sound/soc.h`, `mtk-afe-platform-driver.h`, `mtk-base-afe.h`.
- Detected declarations: `function Copyright`, `function list_for_each_entry`, `function mtk_afe_add_sub_dai_control`, `function list_for_each_entry`, `function mtk_afe_pcm_pointer`, `function mtk_afe_pcm_new`, `function mtk_afe_component_probe`, `export mtk_afe_combine_sub_dai`, `export mtk_afe_add_sub_dai_control`, `export mtk_afe_pcm_pointer`.
- Atlas domain: Driver Families / sound/soc.
- Implementation status: integration 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.