工具/软件:Linux
我正在尝试解决嵌入式 Linux 系统上的 tlv320aic3104的麦克风输入削波问题。 为了实现这一点、我尝试在输入混合之前降低增益、然后再进入可编程增益放大器。
数据表指示我可以使用 MIC2L/R 来保留 ADC 控制寄存器(表23)。 第0页/寄存器17)要实现此目的、但我没有为我提供用户空间访问权限的 Linux 驱动程序。 相反、它似乎将该寄存 器映射到左 PGA 混频器的"Mic2L 开关"和"Mic2R 开关"。 通过查看驱动程序代码(Linux/sound/soc/codecs/tlv320aic3x.c)、可以看到正在声明此小工具选项、如下所示:
//左 PGA 混频器(用于 tlv320aic3104)*/
静态常量结构 snd_kcontrol_new aic3104_left_PGA_Mixer_control[]={
SoC_DAPM_SINGLE_AIC3X ("Line1L 开关"、LINE1L_2_LADC_CTRL、3、1、1)、
SoC_DAPM_SINGLE_AIC3X ("Line1R 开关"、LINE1R_2_LADC_CTRL、3、1、1)、
SoC_DAPM_SINGLE_AIC3X ("Mic2L 开关"、MIC3LR_2_LADC_CTRL、4、1、1)、
SoC_DAPM_SINGLE_AIC3X ("Mic2R 开关"、MIC3LR_2_LADC_CTRL、0、1、1)、
};
在打开 Mic2L 开关的情况下、i2cget 返回0x0F (0dB 增益)值、而在关闭时返回0xff (未连接)
我发现宏的定义为:
#define SOC_DAPM_SINGLE_AIC3X (xname、reg、shift、mask、invert)\
SoC_SINGLE_EXT (xname、reg、SHIFT、MASK、INVERK、 \
snd_soc_dapm_get_volsw、snd_soc_dapm_put _volsw_aic3x)
因此、作为黑暗中的一个镜头、我已经将其更改为这个、并重建了:
SoC_DAPM_SINGLE_AIC3X ("Mic2L 开关"、MIC3LR_2_LADC_CTRL、4、0xF、0)、
SoC_DAPM_SINGLE_AIC3X ("Mic2R 开关"、MIC3LR_2_LADC_CTRL、0、0xF、0)、
我希望这可以让我能够完全访问该寄存器、但这似乎使设置消失了、因此看起来没有效果。
最后请注意、我使用的是2014版驱动程序。 我已经将其与 github.com/torvalds/linux 上的最新版本进行了比较、但看不到可以解决此问题的任何差异。
我们非常感谢您的任何帮助或建议。