snd_soc_dapm_new_widgets 这个函数会根据widget的信息,创建widget所需要的dapm kcontrol,这些dapm kcontrol的状态变化,代表着音频路径的变化,从而影响着各个widget的电源状态。 创建widget: snd_soc_dapm_new_controls snd_soc_dapm_new_controls函数完成widget的创建工作,并把这些创建好的widget注册到声卡的widgets链表...
struct snd_soc_dapm_path结构体用于连接两个widgets,生成path实例的入口函数是snd_soc_dapm_add_path()。 字段解释 structsnd_soc_dapm_path{constchar*name;/* source (input) and sink (output) widgets */structsnd_soc_dapm_widget*source;// 指向源部件structsnd_soc_dapm_widget*sink;// 指向目的部件...
理解snd_soc_dapm_micbias函数的作用和参数: snd_soc_dapm_micbias函数的主要作用是注册和控制麦克风偏置(Mic Bias)的widget。它允许在音频路径管理(DAPM)框架中配置和控制麦克风偏置电压。 函数原型通常如下所示: c void snd_soc_dapm_micbias(struct snd_soc_dapm_context *dapm, const char *name, int reg...
snd_soc_dapm_route用于配置音频信号的路由,包括输入和输出路径等。我们需要配置snd_soc_dapm_route以确保音频数据正确传输。 ```c static struct snd_soc_dapm_route my_routes[] = { { "Capture", NULL, "MY_DAI", 0 }, { "MY_DAI", NULL, "Playback", 0 }, // 其他路由配置 }; ``` ###...
snd_soc_dapm_sync(codec); return0; } /*Digital audio interface glue - connects codec <--> CPU*/ staticstructsnd_soc_dai_link afeb9260_dai = { .name="TLV320AIC23", .stream_name="AIC23", .cpu_dai= &atmel_ssc_dai[0],
snd_soc_dapm_new_controls(dapm, tegra_aic326x_dapm_widgets, ARRAY_SIZE(tegra_aic326x_dapm_widgets)); snd_soc_dapm_add_routes(dapm, aic326x_audio_map, ARRAY_SIZE(aic326x_audio_map)); ret = snd_soc_jack_new(codec,"Headset Jack", SND_JACK_HEADSET, ...
SOC_DAPM_SINGLE("IN3_R P Switch", AIC32X4_RMICPGAPIN,2,1,0), };staticconststructsnd_soc_dapm_widgetaic32x4_dapm_widgets[] = {SND_SOC_DAPM_DAC("Left DAC","Left Playback", AIC32X4_DACSETUP,7,0), SND_SOC_DAPM_MIXER("HPL Output Mixer", SND_SOC_NOPM,0,0, ...
if (!dapm->card || !dapm->card->instantiated) return 0; + return dapm_power_widgets(dapm->card, SND_SOC_DAPM_STREAM_NOP); +} +EXPORT_SYMBOL_GPL(snd_soc_dapm_sync_unlocked); + +/** + * snd_soc_dapm_sync - scan and power dapm paths ...
{ snd_soc_dapm_shutdown() { soc_dapm_shutdown_dapm() { mutex_lock(); mutex_unlock(); } } snd_soc_dapm_free() { debugfs_remove(); } debugfs_remove(); snd_soc_card_remove(); } mutex_unlock(); mutex_unlock(); } } devres_free() { kfree(); } } asoc_simple_clean_...
-->soc_probe_link_components// 遍历每个pcm runtime实例-->soc_probe_component// cpu dai和codec dai都是以component实例注册。probe cpu dai component-->snd_soc_dapm_new_controls// 注册component widgets。-->snd_soc_dapm_new_dai_widgets// 遍历component上的每个dai实例,创建 dai widget实例-->调用...