audio驱动之platform驱动

平台 os版本 内核
MT6765 Android 9.0 kernel-4.9

概述

Platform驱动的主要作用是完成音频数据的管理,最终通过CPU的数字音频接口(DAI)把音频数据传输到Codec中进行处理,最终由Codec进行编解码处理后将音频数据输出到耳机或者是喇叭。在具体实现上,ASoC又把Platform驱动分为两个部分:snd_soc_platform_driversnd_soc_dai_driver。其中,platform_driver负责管理音频数据,把音频数据通过dma或其他操作传送至cpu dai中,dai_driver则主要完成cpu一侧的dai的参数配置,同时也会通过一定的途径把必要的dma等参数与snd_soc_platform_driver进行交互。

我们知道kernel中是存在多个平台的,比如atmelqcommtk等等,但是与平台相关的结构体mtk_soc_platform最终是通过snd_soc_register_platform来完成相应注册的。

audio驱动相关结构体 注释
snd_soc_dai_driver 音频数据接口描述及操作函数,根据 codec 端和 soc 端,分为 codec_dai 和 cpu_dai
snd_soc_platform_driver 音频平台设备描述及操作函数

platform驱动注册及加载流程分析

这里以录音为例分析audio驱动里platform驱动的加载流程。在kernel中有多个同名的函数位于不同的文件目录中,比如函数mtk_capture_probe(),在./sound/soc/mediatek/mt_soc_audio_8163/mt_soc_pcm_capture.c./sound/soc/mediatek/common_init/mtk-soc-pcm-capture.c都存在。 那么如何确认具体使用是哪个文件夹下的函数mtk_capture_probe()呢? 办法很简单,查看mt_soc_audio_8163common_init所在文件目录mediatekMakefile即可,打开Makefile可以找到如下内容:

obj-$(CONFIG_SND_SOC_MEDIATEK) += common/
obj-$(CONFIG_SND_SOC_MTK_BTCVSD) += common_int/
obj-$(CONFIG_SND_SOC_MT8163) += mt_soc_audio_8163/

具体哪个Config被设置为y,可以在./kernel-4.9/arch/arm64/configs/xxx_debug_defconfig文件中确认,比如任意打开一个deconfig,比如k65v1_64_bsp_debug_defconfigCONFIG_SND_SOC_MTK_BTCVSD被设置成y的。

CONFIG_SND_SOC_MTK_BTCVSD=y

由此我么可以知道,使用的是common_init文件夹里的内容。

mtk_soc_capture_platform_init

入口函数所在文件:
./kernel-4.9/sound/souc/mediatek/common_init/mtk-soc-pcm-capture.c

module_init(mtk_soc_capture_platform_init);

static int __init mtk_soc_capture_platform_init(void)
{
   
	int ret = 0;

	pr_warn("%s\n", __func__);

    ... /* 省略非关键代码 */
    
	ret = platform_driver_register(&mtk_afe_capture_driver);
	return ret;
}

通过模块入口函数注册平台 driver ,通过 device namedriver name匹配

mtk_afe_capture_driver

需要被注册的结构体所在文件:
./kernel-4.9/sound/souc/mediatek/common_init/mtk-soc-pcm-capture.c

#ifdef CONFIG_OF
static const struct of_device_id mt_soc_pcm_capture_of_ids[] = {
   
	{
   
		.compatible = "mediatek,mt_soc_pcm_capture",
	},
	{
   } };
#endif

static struct platform_driver mtk_afe_capture_driver = {
   
	.driver = {
   
		
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值