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.

[参考译文] TLV320AIC3007:Linux 驱动程序问题:alsa 混频器未列出芯片

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1397025/tlv320aic3007-linux-driver-issue-chip-not-listed-by-alsa-mixer

器件型号:TLV320AIC3007

工具与软件:

您好!

我们打算为我们的 IMX8载板制作 Yocto 图像。 Linux 内核为6.1.6、且我们采用的是现有的 TLV320AIC3x 驱动程序(

* ALSA SoC TLV320AIC3x 编解码器驱动程序 I2C 接口
*
*作者:Arun KS,
*版权所有:( c ) 2008 Mistral Solutions Pvt 有限公司,)在 Yocto .  它对芯片进行编译和初始化(我们可以对芯片执行一些 I2C 访问)、但 ALSA Mixer 不会"看到"芯片。 因此、我们将一些跟踪直接添加到驱动程序中、我们发现有些驱动程序的函数不是 Linux 调用的。

我的问题是:

-你知道是否有一个更新的驱动程序可用?

-您是否听说过用于检测 TLV320AIC3x 芯片的 alsixer 问题?

-你知道 最近的内核是否有问题吗?

非常感谢您的反馈。

Pascal

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

    尊敬的 Pascal:

    抱歉耽误你的时间。 您可在此处找到该器件的最新 Linux 驱动程序: https://www.ti.com/tool/TLV320AIC3XSW-LINUX

    由于驱动程序内置在 Linux 支持的音频器件中、因此该器件应由运行主线内核的 Linux 自动识别。 我可以使用 EVM 和 Raspberry Pi 在接下来的几天内测试 ALSA、以便识别该器件、但我知道这不是您的最终用例。

    这里是另一篇关于不同器件的 E2E 论坛帖子、但有一个类似的问题、此处提供的答案可能有助于: https://e2e.ti.com/support/audio-group/audio/f/audio-forum/989963/tlv320aic3104-alsa-soundcard-on-linux-for-xilinx-ultrascale-mpsoc-not-working

    我将尝试查找 EVM 并将其连接到我的 Pi 并测试是否向其发送 I2C 命令、然后查看 ALSA 是否能够识别器件。 可能需要几天时间-抱歉! 如果您有关于该错误的更多信息、请告诉我。

    此致!
    MIR

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

    嗨、Mir、

    非常感谢您的反馈。

    好的、"好的"消息是、我们已经在我们的内核中测试了最后一个驱动程序。

    我们在此驱动程序中添加了一些线迹、发现只 int aic3x_probe(struct device *dev, struct regmap *regmap, kernel_ulong_t driver_data)调用该函数。 因此、器件似乎已初始化、 因为我们设法发送 I2C 命令并得到解答。

    我想,以下函数是重要的 alsamixer ,但他们没有被调用,我们不明白为什么:  

    static int aic3x_component_probe(struct snd_soc_component *component) 

    static int aic3x_init(struct snd_soc_component *component) 

    如果您有一些线索...

    是的,如果你可以用覆盆子执行一些测试,并确保 alsa 混音器识别芯片,它可以帮助我们。 如果您的内核是 ~ 6.1.36、则可获得更好的性能。

    谢谢,让我知道你的测试,当你有时间做它;-)

    Pascal

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

    尊敬的 Pascal:

    我在 tlv320aic3x.c 中看不到 aic3x_component_probe、但未调用 init 对于初始化器件参数似乎很重要。 在 aic3x_probe 函数中、它在 tlv320aic.c 的第1629行调用"aic3x_init (component);"(对于我来说)、但您的版本可能不同。 如果从未调用 init、则可能是组件探测器中的其他内容出现故障或挂起。 或者、也许你正在检查 INIT 被调用过晚并且该函数被调用而没有留下跟踪吗? 也许可以尝试执行 I2C 请求、以查看是否设置了输出卷、或者 ADC 是否取消静音、检查是否曾一度调用 aic3x_init 的各个部分。  

    我正在等待 EVM 的发货、很抱歉、我还不能自己运行。

    此致!
    MIR

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

    嗨、Mir、

    感谢您的回答。 这是非常奇怪,因为我根据我的分析从你给我的链接驱动程序源: https://www.ti.com/tool/TLV320AIC3XSW-LINUX

    aic3x_init(component) 调用的频率  aic3x_component_probe() line 1599.

    Is it possible to send me your version of the tlv320aic3x.c ?

    Ok, no stress for the EVM, I understand and I can wait for your test. Meanwhile, I will perform some I2C tests as you advise.

    Thank you, have a nice day

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

    哦、我看到它们是如何不同的版本的。 不知道为什么。 您是否能够在特定的 Linux 发行版上查看驱动程序文件? 这将帮助我们进行调试。 我正在查看的驱动程序代码来自 TI 的 Linux git 存储库、而不是像您正在查看的 git.kernel.org 中的官方内核发行版。 我认为我们应该更信任内核发行版、因为它将在更多 Linux 系统上进行测试。 我们的版本之间最大的区别似乎是我的版本有更多的导入,所以可能在不同的函数内部调用了 component_probe ,但它似乎会更麻烦,而不是值得分析我正在看的整个发行版与分布式内核。 如果您的 Linux 内核与 git.kernel.org 版本相同、或者您有关于 I2C 的任何更新、请告诉我。 我仍在等待 EVM。

    此致!
    MIR

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

    您好、Mir、

    感谢您的反馈。

    我已经将 Yocto 的版本与官方 Linux 版本进行了比较。 主要在复位引脚的管理方面存在一些差异 (需要一个脉冲来启动芯片)。 我已附上我们的司机为您验证它与官方的相似性。

    我已经进行了 I2C 测试、可以读取/写入芯片的寄存器、确认没有硬件问题、并且驱动程序正确初始化芯片。

    敬请在 EVM 抵达时通知我。

    祝你度过愉快的一天。

    此致、
    Pascal

    e2e.ti.com/.../47562.tlv320aic3x.c

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

    您好!

    很抱歉耽误你的时间。 下周我会给您回复。 如果我在星期三之前没有回复,请回复此帖子,以便我收到提醒,但由于预订原因,请不要回复此消息,除非您有更新或我不回复。

    此致!
    MIR

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

    您好!

    我从从 TI.com 下载的最新 TI 驱动程序内核中对您的驱动程序文件进行了比较。 我可以在这里附加我的文件、因为我将引用特定行。  e2e.ti.com/.../1425.tlv320aic3x.c

    驱动程序文件之间最大的区别是我的版本包含驱动程序支持的设备的设备 ID。 这可能是您的系统无法在 ALSA 中识别该器件的原因。 我建议将我连接的驱动程序用作系统中设备的驱动程序。 您的代码添加了一些 DEV_WARN 命令、并且比我的代码添加了更多的播放音量控制、因此您希望重新添加播放控制。 这些寄存器位于代码中的383行附近、您的缩放位于318行。 可以在驱动程序的各部分(从 第88行、1758行和1917行开始)中找到器件 ID。

    如果您在这方面需要更多帮助、请告诉我。

    此致!
    MIR

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

    嗨、Mir、

    感谢您的答复。 我将把你的答案传递给我的同事,他从这个星期一休假回来(而我今晚休假)。 当我们测试您的驱动程序时、我会通知您。

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

    好的、谢谢。

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

    嗨、Mir、

    只是通知您、很遗憾、这无法解决问题。 我的同事说,我们的内核版本太新,与你给我的驱动程序不兼容。 他还告诉我、驱动程序支持的设备的设备 ID 在我们的 tlv320aic3x.h 和 tlv320aic3x-i2c.c 源代码中进行管理。

    用于我们使用的信息  

    我不确定你能帮我更多,但如果你有另一个想法...

    谢谢!

    祝您度过美好的一天!

    Pascal

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

    尊敬的 Pascal:

    我明天将与一位 Linux 专家会面、看看我是否能更深入地了解使用驱动程序进行的内核更改。 器件驱动程序应该位于每个已发布版本的 Linux 内核中。  您是否仍然遇到 ALSA 无法识别设备的问题?  

    此致!
    MIR

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

    嗨、Mir、

    是的、我们仍然遇到 ALSA 无法识别芯片的问题。 如果我们 在最后发现一些东西、我会随时向您通报最新情况

    感谢您的帮助。

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

    您好!
    此处附加了驱动程序的内核6.1.6版本。 驱动程序中音频路径的路由可能有问题。 尝试将 tlv320aic3x.c 文件替换为 i attach 文件、并包括 tlv320aic3x.h 和 include/sound/tlv.h。  

    是否可以附加 DTS 文件? 此外、您是否有可以检查错误的任何地方的内核日志?

    如果这些新文件不起作用、请告诉我、如果您有 DTS 和内核日志、请附上它们。

    此致!
    MIR

    e2e.ti.com/.../tlv.he2e.ti.com/.../7587.tlv320aic3x_2D00_i2c.ce2e.ti.com/.../tlv320aic3x_2D00_spi.ce2e.ti.com/.../7587.tlv320aic3x.ce2e.ti.com/.../1212.tlv320aic3x.h

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

    您好 MIR ,感谢您的文件和分析。

    我们目前正在测试您的文件、并将尽快提供反馈以及 dts 和 dmesg 日志文件。

    为了方便您参考、我们遇到了文件 tlv320aic3x-i2c.c 的编译错误 下面是我们为纠正错误而修改的内容:

    diff -- git a/sound/occircoccodecs/tlv320aic3x-i2c.c soc b/sound/ocrv320aic3x-i2c.c soc

    索引 d7e94d5..bb33fd3 100644

    --音/ soc codecs/tlv320aic3x-i2c.c

    +++ soc codecs/tlv320aic3x-i2c.c

    @@-61、7 +61、7 @@静态结构 i2c_driver aic3x_i2c_driver ={

        .name ="tlv320aic3x"、

        .of_match_table = aic3x_of_id、

      }、

    - .probe_new = aic3x_i2c_probe、

    + .probe = aic3x_i2c_probe、

      .remove = aic3x_i2c_remove、

      .id_table = aic3x_i2c_id、

     }

    祝您度过美好的一天!

    谢谢你

    Pascal

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

    您好!

    好的、我们已经测试了驱动程序。 不幸的是、它不起作用。 您可以 在此处下载我们的 Linux 日志和 DTS 文件:

    https://we.tl/t-dydgl4baeT

    另一个问题是、我们发现对于其他芯片、在 sound/ADSL/FSL/ soc 文件夹中有一个特定的附加文件(例如 IMX-da7213.c 或 FSL-ASOC-CARD.c)。 此文件夹中是否需要一个 TI 特定文件?

    谢谢

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

    您好!

    FSL 文件夹中似乎不需要其他文件、但我可以询问团队中的新 Linux 驱动程序专家有关这方面的信息。

    我看到错误调用: tlv320aic3x 0-0018:无法初始化 D 类:-6

    这取决于您在 D 类配置中的驱动程序或 DTS 文件。 我将于下周在 EVM 上对其进行测试、看看我能否弄清楚。 当我有进步时我会在这里回复-如果周二之前没有回复、请在此处发送消息提醒我(或者如果您取得了进步、请告诉我)!
    此致!
    MIR
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Mir、

    我希望你好。

    关于 D 类错误、硬件重置似乎有问题。 在驱动器的上一版本中、我们必须添加一个补丁来强制对 TLV320进行硬复位(根据数据表、需要一个复位脉冲来启动芯片)。 此脉冲可能不存在于最后一个 TI 驱动器中。

    我认为您是对的、器件树中有问题。

    此致、

    Pascal

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

    尊敬的 Pascal:

    我已经要求我们的 Linux 专家提供帮助,我不知道太多关于设备树。 对于复位脉冲、您可以使用 I2C 触发它、或者查看您是否可以再次添加补丁。 抱歉。 我认为我再也无法访问您的文件链接了、您能在此处附加您的设备树文件吗?

    此致!
    MIR

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

    嗨、Mir、  

    没问题、请在下面找到我们的补丁来配置内核和设备树。

    是的、我们将再次修补您的最后一个驱动器以添加硬件复位脉冲。

    谢谢你

    此致、

    e2e.ti.com/.../Lumiplan_5F00_patch.zip

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

    您好!

    硬件复位脉冲是否工作?  

    此致!
    MIR

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

    您好! 是的、它可以工作、但仅适用于以前版本的驱动程序(使用您给我的最后一个版本、由于缺少函数定义、修补程序无法编译)。

    如果 未应用补丁、则无法读取寄存器(i2cget 函数始终返回0xff)。

    在下面您可以找到 TLV320寄存器的 i2cdump (当应用复位脉冲补丁时):  

    此致、

    Pascal

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

    尊敬的 Pascal:

    只是为了确认、您是否仍然需要帮助? 如果该修复对您有利、我可以关闭该主题。

    此致!
    MIR

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

    嗨、Mir、

    我之前的文章是为了向您展示有无硬件复位脉冲的区别。 但我们的问题总是发生: ALSA 混频器不能识别芯片 ,即使我们可以使 i2c 传输。

    正如您所说的、设备树配置可能错误、也许您的 Linux 专家可以帮助我们?

    谢谢!

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

    您好!

    谢谢你让我知道,对不起,我不明白。 我正在尝试使 AIC3007 EVM 在 Raspberry Pi 上进行通信、我只是想弄清楚设置可能有什么问题。 我在网上发现的一点是、驱动程序或 ALSA 可能需要 I2C 总线1、但您提供的是 I2C 总线0、您是否可以尝试更改它预期/操作的总线? 我在论坛帖子 https://forums.raspberrypi.com/viewtopic.php?t=347811中看到此谈论过

    请告诉我、如果这对您有任何帮助、我问我们的 Linux 人员、但需要一些时间与他们交谈、他们可能无法提供帮助。 使用 I2C 寻址器件的方式与 ALSA 使用的驱动程序之间可能存在不匹配的问题。  

    如果这不起作用、您能告诉我您是如何测试器件的、您正在执行哪些命令以及它们返回了什么命令?

    此致!
    MIR

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

    嗨、Mir、

    我们在器件树中发现了错误参数。 这会阻止 Linux 完全下载驱动程序。 现在、该芯片在 alsamixer 中被识别。

    感谢您的帮助、您可以关闭 TT。

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

    您好!

    很棒的消息、很高兴它能正常工作。  

    -mir