【问题标题】: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 设备,这些名称从未出现在用户空间中)?它们如何影响硬件编解码器?

【问题讨论】:

    标签: linux audio linux-device-driver 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";
    
    1. 它定义/创建机器级别(声卡级别)小部件,例如“扬声器”、“麦克风”、“耳机”。
    2. 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 专家,很遗憾,我在阅读代码之前无法理解该文档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-28
      • 2018-06-16
      • 2012-02-06
      • 2020-01-11
      • 2018-12-18
      • 2013-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多