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.
工具与软件:
由于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