SDM845的音频路径分析

本文详细解析了SDM845处理器的Android内核代码中,从用户层到扬声器的音频播放路径,涉及dts解析、pcmfe到codec的流程,以及PA、CPU-FE、ADSP、codec等组件的静态分析。

目录

1、PA wsa991x:

2、Cpu - FE:

3、ADSP:

4、codec:

A、Cpu_be_dai:

B、codec dai:

C、dai_link:

1)、dai_link的绑定:

2)、dai widget与dai widget的链接:  

3)、dai widget与stream widget的链接:

D、codec route:

E、Codec与pa直接的widget链接


【目的】

    结合SDM845处理器的Android内核代码来静态分析deep_buffer spker的playback路径,涉及dts的解析,pcm fe->dai be->dai_link->codec->pa->spker的整个流程。 

【分析】

1、PA wsa991x:

static const struct snd_soc_dapm_route wsa881x_audio_map[] = {

{"SWR DAC_Port", "Switch", "IN"},

{"RDAC", NULL, "SWR DAC_Port"},

{"SPKR PGA", NULL, "RDAC"},

{"SPKR", NULL, "SPKR PGA"},

};

PA的widget音频路径 IN ->(switch开关)SWR DAC_PORT->RDAC->SPKR PGA->SPKR

Dts可以看到该PA的描述

Sdm845-qrd-audio-overlay.dtsi中:

qcom,wsa-max-devs = <2>;

qcom,wsa-devs = <&wsa881x_0211>, <&wsa881x_0213>;

qcom,wsa-aux-dev-prefix = "SpkrLeft", "SpkrRight";

prefix的处理在machine的drv中:

Match id_table后->msm_wsa881x_init()

解析“qcom,wsa-aux-dev-prefix”,

msm_codec_conf[n].name_prefix保存pfefix name。

msm_aux_dev[n].init = msm_wsa881x_init;

card->codec_conf = msm_codec_conf;

在aux_dev初始化函数msm_wsa881x_init()中,填充了该codec的privdate的port属性pord_id,mask,rate,nun_ch,设置SpkrLeft IN/SpkrLeft SPKR、SpkrRight IN/SpkrRight SPKR这些端点widget->ignore_suspend = 1,及整条widget路径被suspend后,端点widget不会suspend。

Kcontrol添加prefix:

snd_soc_instantiate_card();

->soc_probe_link_components();

->soc_probe_component();

->soc_set_name_prefix(card, component);设置componnet->name_prefix为codec->codec_conf->name_prefix;

创建WIDGET:

snd_soc_dapm_new_widgets(card)

->Dapm_new_mixer()

/dapm_new_mux()

/dapm_new_pga()

->dapm_create_or_share_kcontrol();

->soc_dapm_prefix(dapm);

->snd_soc_cnew(..., name, prefix);

->if (prefix)

template.name = kasprintf(GFP_KERNEL, "%s %s", prefix, name);

->snd_ctl_new1(&template, data);

可以看到,Widget创建会对prefix解析,从component->prefix获取然后添加到widget的name前缀。

所以,PA的route中的widget都要添加prefix:SpkrLeft和SpkrRight

SpkrLeft IN -(switch)-> SpkrLeft SWR DAC_Port --> SpkrLeft SWR DAC_Port RDAC --> SpkrLeft SPKR PGA -->SpkrLeft SPKR

SpkrRight IN -(switch)-> SpkrRight SWR DAC_Port --> SpkrRight SWR DAC_Port RDAC --> SpkrRight SPKR PGA -->SpkrRight SPKR

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值