ALSA ASoC 简单声卡驱动程序中的 DAPM 路由是啥意思?
Posted
技术标签:
【中文标题】ALSA ASoC 简单声卡驱动程序中的 DAPM 路由是啥意思?【英文标题】:What does DAPM routing in ALSA ASoC simple-audio-card driver mean?ALSA ASoC 简单声卡驱动程序中的 DAPM 路由是什么意思? 【发布时间】:2020-05-21 20:39:02 【问题描述】:内核文档doc/Documentation/devicetree/bindings/sound/simple-card.txt
给出了如何在设备树中使用它的示例:
sound
compatible = "simple-audio-card";
...
simple-audio-card,widgets =
"Microphone", "Microphone Jack",
"Headphone", "Headphone Jack",
"Speaker", "External Speaker";
simple-audio-card,routing =
"MIC_IN", "Microphone Jack",
"Headphone Jack", "HP_OUT",
"External Speaker", "LINE_OUT";
...
“麦克风”、“耳机”和“扬声器”只是标识符(允许的只有“麦克风”、“耳机”、“扬声器”、“线路”)。名称“MIC_IN”、“HP_OUT”和“LINE_OUT”是其驱动程序报告的硬件编解码器的真实内容。
“麦克风插孔”、“耳机插孔”和“外接扬声器”等别名是什么?它们出现在哪里以及它们有多重要(它们不会将 1 对 1 映射到用户空间 ALSA 设备,这些名称从未出现在用户空间中)?它们如何影响硬件编解码器?
【问题讨论】:
【参考方案1】:简而言之,“simple-audio-card,routing”中使用的名称实际上就是您在“simple-audio-card,widgets”中定义并重命名的名称。
另一个重要说明是“简单的声卡,小部件”可能定义例如两个扬声器小部件:
"Speaker", "External Speaker";
"Speaker", "Internal Speaker";
第一个“Speaker”是模板名称,第二个是实例名称。
TL;DR:
我最近也遇到了这个问题。读了一些代码后,我的理解如下:
按照 DTS 定义做两件事:
simple-audio-card,widgets =
"Microphone", "Microphone Jack",
"Headphone", "Headphone Jack",
"Speaker", "External Speaker";
-
它定义/创建机器级别(声卡级别)小部件,例如“扬声器”、“麦克风”、“耳机”。
DTS 还允许将其重命名为自定义名称。所以“麦克风”被重命名为“麦克风插孔”等等。
这可以从如下所示的代码中读取。所以从“simple-audio-card,routing”引用的未来widget名称应该是重命名后的。
在文件 kernel/sound/soc/soc-core.c:
static const struct snd_soc_dapm_widget simple_widgets[] =
SND_SOC_DAPM_MIC("Microphone", NULL),
SND_SOC_DAPM_LINE("Line", NULL),
SND_SOC_DAPM_HP("Headphone", NULL),
SND_SOC_DAPM_SPK("Speaker", NULL),
;
上面定义了一个小部件模板。
int snd_soc_of_parse_audio_simple_widgets(struct snd_soc_card *card,
const char *propname)
在上面的函数中,它会尝试通过名称将DT中显示的名称与模板匹配,然后将名称更改为第二列中的名称(在DTS中)
文档widget.txt其实也是重复的:
kernel/Documentation/devicetree/bindings/sound/widgets.txt
小部件:
这主要指定音频off-codec DAPM小部件。
每个条目是DT中的一对字符串:
"template-wname", "user-supplied-wname"
“template-wname”是模板小部件名称,当前 包括:“麦克风”、“线路”、“耳机”和“扬声器”。
“user-supplied-wname”是用户指定的小部件名称。
例如: 简单的音频小部件 = “麦克风”、“麦克风插孔”、 “线”,“杰克线”, “线路”,“线路输出插孔”, “耳机”、“耳机插孔”、 “扬声器”、“外部扬声器”;
我不是 ALSA 专家,很遗憾,我在阅读代码之前无法理解该文档。
【讨论】:
以上是关于ALSA ASoC 简单声卡驱动程序中的 DAPM 路由是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章