This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TLV320AIC3106:如何在 Linux 中启用和使用数字麦克风?

Guru**** 2386610 points
Other Parts Discussed in Thread: SYSBIOS
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1322913/tlv320aic3106-how-do-i-enable-and-use-the-digital-mic-in-linux

器件型号:TLV320AIC3106
Thread 中讨论的其他器件:SYSBIOS

我们有一个使用数字麦克风的设计、但我在 DTS 文档的任何地方都看不到任何表明使用数字麦克风的东西

https://www.kernel.org/doc/Documentation/devicetree/bindings/sound/tlv320aic3x.txt

如何在设备树文件中设置数字麦克风、然后如何在程序中切换到该输入(我们以前一直在使用 ALSA 进行音频)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    有两种方式、一种是 asound、cof、另一种是 DTS

    为了节省时间、请向我提供 您之前为数字麦克风设置的音频路线。 谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如何在 DTS 中实现这种功能、如何在代码/应用中切换到这种功能是我的问题。 ALSA 是否无法做到? 我们需要在应用程序的麦克风之间切换,这样我就需要知道如何在代码中操作,而不是从终端操作(除非这是唯一的方法,在这种情况下,我知道我必须操作系统()))

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    因为我没有回答,我想我可能没有回答你的问题。 "请为我提供 您之前为数字麦克风设置的音频路由"是什么意思? 我们以前没有数字麦克风路线。 这是一种新设计。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Guy

    很抱歉回复延迟。 我是在春节假期。 我将于2月19日向您反馈。 感谢您的理解。

    春节快乐

    丁声道

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    请问您的数字麦克风是 PDM 吗? AIC3106不支持数字麦克风(PDM)、因此我们的 Linux 驱动程序无法在 DTS 级别完成。

    但是,如果您有另一个声卡用于数字麦克风,则可以通过在应用程序中切换声卡来切换。

    谢谢

    凯文

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    3106支持数字麦克风、它在数据表中说明、并且在 SYSBIOS 项目中可以正常工作。 我们正在尝试弄清楚如何让它在 Linux 环境中工作、

    在第一个答复申说:  

    "有两种方式,一种是猎犬,另一种是 DTS "

    这意味着可以通过一些方法来实现它。 为什么会出现反转? 沈部长是不是错了?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    抱歉、我对 AIC3106的 DMIC 的误解是、您应该设置 GPIO、应该在 DTS 中添加 a3x-gpi-func、并应该启用"左 ADC "或"右 ADC "的路由

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请提供一个您所讨论内容的示例。 我不是一个专家、不足以具体知道您在 DTS 文件中对我意味着什么

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我发现针对 DMIC 的 tlv320aic3x.c 代码不完整、建议手动设置寄存器以启用数字麦克风、可以将其放入一个默认数组中。

    谢谢  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当我想从普通模拟麦克风切换到数字麦克风时、是否还必须通过直接寄存器写入来实现? 我假设我必须进行 i2c 系统调用来实现此目的?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们稍后会改进这一部件、但不会很快改进。 您可以首先使用 i2c 系统。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这在我的脑海中浮现了一个问题-驱动程序是否能够操作输出 效果和去加重滤波器(第1页的寄存器)的寄存器?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    可以、但您可以在驱动程序中注释掉该部分。

    BTW、 我对代码进行了一些修改、需要对其进行验证。 我可以在 明天提供反馈。

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我希望它能够访问第1页寄存器。 是否有显示如何通过某些 API 访问这些寄存器的示例?

    我期待 DMIC 能够提供任何支持

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果您要访问 PAGE 1、则需要执行一个切换页的步骤、将寄存器0x00写入切换页、例如、如果将 reg0x00写入0x01、则 可以 得到 PAGE 1中的所有寄存器。

    我修改了内核6.7中的驱动程序代码,你可以 尝试验证它(如下),看看它是否可以工作,如果不是,请在记录前后与我分享 RegDump 的内容。

    e2e.ti.com/.../tlv320aic3x_2D00_i2c.c

    e2e.ti.com/.../8054.tlv320aic3x.c

    e2e.ti.com/.../3678.tlv320aic3x.h

    BTW 对于 DTS 配置、如果要启用 DMIC、则需要配置 GPIO、添加

                    ai3x-gpi-func =<
                        10 /* AIC3X_GPIO1_FUNC_DIGITAL_MIC_MODCLK */
                        5 /* AIC3X_GPIO2_FUNC_DIGITAL_MIC_INPUT */
                    >;
    此外、还需要在 simple-audio-card 中更改路由:
          simple-audio 卡、小工具=
            "线路""线路输入"
            "线路""线路输出"

          简单音频卡、路由=
            "DMICL""线路输入"
            "DMICR""线路输入"
            "线路输出""LLOut"、
            "线路输出""RLOUT"
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我知道如何写入第1页寄存器。 我们已经在 SYSBIOS 中做了这项工作。 我想知道是否有 API 可以在 Linux 中实现它、或者它是否需要直接 i2c 写入来更改它们?

    遗憾的是、我们至少有几周没有硬件可供我测试。 我写这篇文章的目的是在硬件推出时做好准备

    我的 DTS 看起来是这样的:

    simple-audio 卡、小工具=
    /* 1 */"扬声器"、"POTS 线路输出"、
    /* 2 */"扬声器"、"手机扬声器"、/*(2)*/
    /* 3 */"扬声器"、"外置扬声器"、/*(3)*/
    /* 5 */"线路"、"POTS 线路输入"、
    /* 6 */"麦克风"、"手机麦克风"、/*(7)*/
    /* 7 */"线路"、"外部麦克风";///*(8)*/
    简单音频卡、路由=
    /* 1 */"POTS 线路输出"、"Dono_lout"、
    /* 2 */"听筒扬声器"、"LLOut"、/*引脚29、30 */
    /* 3 */"外置扬声器"、"RLOUT"、/*引脚31、32 */
    /* 6 */"LINE2R"、"PTS 线路输入"、
    /* 7 */"LINE1L"、"手持终端麦克风"、/*引脚3、4 */
    /* 8 */"DMICR"、"外部麦克风"、/*引脚7、8 */
    /* 9 */"LINE1R"、"耳机麦克风"、
    /* 10 */"手持终端麦克风"、"麦克风偏置";/*引脚13 */

    当我需要切换到 dmic 时、可以使用 asla 发出:

    "正确的 PGA 混频器 DMICR 开关" 、对吗? 或者、我是否需要执行 i2c 写入以切换到 dmic 例程?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、无需执行 i2c 写入、驱动程序将执行相同的操作。 如果出现问题、请与我分享日志。

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我想您所说的是在 DMIC 和模拟 MIC 之间的切换、

    我的最后一个回复的这个部分:

    我知道如何写入第1页寄存器。 我们已经在 SYSBIOS 中做了这项工作。 我想知道是否有 API 可以在 Linux/代码中实现它、还是需要直接 i2c 写入才能更改它们?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您可以  在代码中利用 SND_SoC_Component_UPDATE_BITS 和 SND_SoC_Component_write 执行 i2c 写入、这些函数具有自动页面切换的特性。

    在 ALSA 中,我们使用 amixer 控件来切换输入和输出路由路径,您可以检查 终端设备上的 amixer 内容,并查看驱动程序代码。

    谢谢