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:从应用程序使用"snd_soc_component_WRITE"

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1390588/tlv320aic3106-using-snd_soc_component_write-from-an-application

器件型号:TLV320AIC3106

工具与软件:

由于3106编解码器驱动程序不支持 DMIC 或第1页滤波器参数、因此我需要能够直接访问寄存器。 在另一篇文章中、我被告知可以使用"snd_soc_component_write"来访问这些寄存器。

我已经谷歌了几个小时,我不能得到一个明确的答案如何使用它。 我看到了 它的原型、因此它看起来很明显、直到您意识到必须获得:

struct snd_soc_component * component  

当我寻找你应该如何得到"组件"时,它看起来很整齐地是戴结构的一部分。

DAI->COMPONENT

很好。 那么如何获得 Dai 结构呢? 这就是我被挂断的地方。 我看到它 在 大部分时间都作为一个参数在例行程序中传递、因此我想作为驱动程序的一部分、它是随时可用的。 但是、对于应用、我不确定如何获得 Dai 句柄。  

我可以使用一些指导来集会:我是不是走正确的路? 如何获得 Dai 句柄? 我是否不需要 Dai 句柄、并且有更直接的路线来获取组件? 我应该放弃并仅在 i2c 总线上使用 ioctl 吗?

提供帮助。

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

    您好!

    我正在 为您研究这个问题。 我假设您使用的是 Linux? 我明天会回来讨论戴手柄。

    与此同时、我编写了一些基本的 I2C 命令、以通过 Linux 命令行/Python 将其发送到其他编解码器、有一天、我会将其粘贴到这里、以防有所帮助:

    i2cdetect 2 //会显示总线2上的可用 I2C 器件地址、总线可能会有所不同、因此您可以尝试不同的值、直到读取到某些地址为止。 按照数据表中的说明、AIC3254器件地址为0x30。 按照 AIC3106数据表中的说明更改器件地址。

    i2cset 2 0x30 0x00 0x00 //在总线2上、器件地址0x30、选择寄存器0并设置0 (这会将 PAGE 设置为0)

    i2cset 2 0x30 0x04 0x04 //在总线2上、地址0x30、寄存器4、设置值00000100  

    如果您没有使用 Linux 或者有其他问题、请告诉我。

    此致!
    J·米尔

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

    您好!

    我建议您使用与 Linux 驱动程序相同的 Dai 结构; https://www.ti.com/tool/TLV320AIC31XX-DRIVERS

    您可以在重置后添加默认设置数组。

    此致

    Kevin

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

    我使用的是 Linux、它是一个嵌入式 Linux 项目

    驾驶员同样会在例程中作为参数访问 DAI。 我不知道从哪里获得 DAI

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

    看起来主结构可以在 include/sound 中的 soc-topology.h 中。 在公共 API 部分中、有一个名为"snd_soc_tplg_ops"的结构、DAI 初始化将 DAI 加载到 snd_soc_component 和 DAI 链接中。 从此处的第132行开始: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/include/sound/soc-topology.h

    如果可以在设备上编辑驱动程序、那么您应该能够使用与主驱动程序中的所有其他 snd_soc_component_write 调用相同的组件。  

    如果您需要更多帮助、请告诉我。

    此致!
    MIR

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

    我不是在编写驱动程序、我要在我的应用程序中执行此操作。  

    或者你说我可以呼叫:

    int (* dai_load)(struct sd_soc_component *、int index、
    struct snd_soc_di_di_driver * di_drv、
    struct sd_soc_tplg_pcm *pcm, struct sd_soc_dai *dai);

    它将允许我访问 DAI?

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

    遗憾的是、我们目前还没有直接支持您使用 Linux 驱动程序、但您绝对可以尝试使用。 如果您想要一些更具体的函数调用、我可以非常轻松地搜索 TI Linux 驱动程序、但团队中的当前应用工程师没有编写利用 Linux 驱动程序的应用程序的经验。 如果您需要有关特定函数的更多帮助、或者如果该 Dai_load 函数不起作用、请告诉我可以查找更多示例、在代码中调用 Dai 作为示例。

    此致!
    MIR

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

    因此、我不是在编写或更改驱动程序、而是在非驱动程序应用程序中尝试使用"sd_soc_component_write"。

    我不知道 Dai_load 如何帮助我、因为它要求我通过 DAI 尝试获取的确切项目: snd_soc_component  

    我猜、即使在这个论坛的人的帮助下、我也不能到达我想要的地方、所以它一定很难完成、或者只保留给驱动程序代码、而不是用户应用程序代码。 我将使用 I2C IOCTL 访问、希望它能正常工作

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

    听起来不错。 抱歉、我在应用开发方面无法再提供更多帮助了。 如果您需要 I2C 帮助、请告诉我。

    此致!
    MIR

x 出现错误。请重试或与管理员联系。