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.

[参考译文] Linux/TLV320AIC3104:驱动程序未调用编解码器

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/758297/linux-tlv320aic3104-driver-don-t-call-to-codec

部件号:TLV320AIC3104

工具/软件:Linux

您好!

我尝试在我自己的主板上运行带有imx6ul处理器的tlv320aic3104编解码器。 在DTS中,我描述如下:

i2c2{
       Clock_frequency =<10万>;
       pinctrl-names ="default";
       pinctrl-0 =<&pinctrl_i2c2>;
       状态="正常";

       编解码器:tlv320aic3x@18 {
               兼容="ti,tlv320aic3x";
               pinctrl-names ="default";
               pinctrl-0 =<&pinctrl_gPI_key>;
               REG =<0x18>;
               GPIO重置=<&GPIO5 0 GPIO主动_低>;
/*
               时钟=<&CLKS IMX6UL_CLK_SAI2>;
               Clock-names ="MCLK";
*/
               状态="正常";
       };
};
内核版本4.1 .15。

驱动程序报告成功注册:
12月25日09:44:35 MYD-y6ul14x14 user.debug内核:of_GET_NAMED_gpiod_FLAGS:节点'/ SoC / AIPS-bus @ 210万 / i2c @ 021a4000的解析'GPIO重置'属性
/ tlv320aic3x @ 18 [0]'-状态(0)
12月25日09:44:35 MYD-y6ul14x14 user.warn内核:1-0018 SUPPLY IOVDD not found,using mummy regulator (使用虚拟调节器时未找到IOVDD)
12月25日09:44:35 MYD-y6ul14x14 user.warn内核:1-0018 SUPPLY DVDD not found, using mummy regulator
12月25日09:44:35 MYD-y6ul14x14 user.warn内核:1-0018未找到SUPPLY AVDD,正在使用虚拟调节器
12月25日09:44:35 MYD-y6ul14x14 user.warn内核:1-0018 supply DRVDD not found,using mummy regulator (未找到DRVDD源,使用虚拟调节器)
12月25日09:44:35 MYD-y6ul14x14 user.debug内核:I2C-core:driver [tlv320aic3x-codec] registered
12月25日09:44:35 MYD-y6ul14x14 user.info内核:FSL - ASRC 203.4万。asrc:驱动程序已注册

但在i2c总线上不再执行任何操作。
我没有看到任何访问IC的尝试(内核配置中的CONFIG_I2C_DEBUG*= y)。
ALSA报告:
12月25日09:44:35 MYD-y6ul14x14 user.info内核:ALSA设备列表:
12月25日09:44:35 MYD-y6ul14x14 user.info内核:未找到声卡。
其他设备(例如ds1307)成功使用的i2c总线。
如果从DTS中删除编解码器描述,i2cdetect还定义地址0x18处的响应。


我尝试调试tlv320aic3x.c驱动程序:
aic3x_i2c_prob()过程已成功执行(return =0),但未调用aic3x_probe()过程。

我尝试用不同的方式描述DTS中的声节点,但得到了相同的结果:

变量1:
        声音{
                兼容="简单音频卡";
                simple-audio-card,name ="OnboardTLV320";
                simile-audio-card,format ="I2S";
                simple-audio-card,bitclock-master =<&dailink_master>;
                simple-audio-card,frame-master =<&dailink_master>;

                简单音频卡,小工具=
                        "麦克风","麦克风插孔",
                        "线路","线路输入",
                        "线路","线路输出",
                        "扬声器","扬声器",
                        "耳机","耳机插孔";
                simple-audio-card,routing=
                        "线路输出","LLOOUt",
                        "线路输出","RLOUT",
                        "扬声器","SPOP",
                        "扬声器","SPOM",
                        "耳机插孔","HPLOUT",
                        "耳机插孔","HPROUT",
                        "MIC3L","麦克风插孔",
                        "MIC3R","Mic插孔",
                        "MIC插孔","Mic Bias",
                        LINE1L,Line In,
                        "LINE1R","线路输入";

                简单音频卡,CPU{
                        SOUND DAI =<&SAI2>;
                };

                dailink_master:simple音频卡,codec {
                        sound-dai =<&codec>;
                        Clocks =<&tlv320_MCLK>;
                };

变量2:
        声音{
                兼容="ti,tlv320aic3x";
                CPU-DAI =<&SAI2>;
                GPR =<&GPR>;

                TI,audio-codec =<&codec>;
                TI,ASRC控制器=<&AURC>;
                TI,codec-clock-rate =<1200万>;
                TI,音频路由=
                    "耳机插孔","HPLOUT",
                    "耳机插孔","HPROUT",
                    LINE1L,Line In,
                    "LINE1R","线路输入";
        };

SAI描述:

和SAI2 {
        pinctrl-names ="default";
        pinctrl-0 =<&pinctrl_SAI2>;

        Assigned-Clocks =<&CLKS IMX6UL_CLK_SAI2_SEL>,
                          <&CLKS IMX6UL_CLK_SAI2>;
        assigned-clock-parents =<& CLKS IMX6UL_CLK_PLL4_AUDIO_DIV>;
        assigned-clock-Rates =<0>,<1228.8万>;

        状态="正常";
};
内核配置:
$ grep -i snd .config |grep -v ^#
config_snd=y
config_snd_timer=y
config_snd_pcm=y
CONFIG_SND_DMANGINE_PCM=y
config_snd_HWDEP=y
config_snd_RAWMIDI=y
config_snd_compress_offload=y
config_snd_jack=y
config_snd_support_old_api=y
config_snd_verbose_procfs=y
config_snd_verbose_PRINTT=y
config_snd_debug=y
config_snd_debug_verbose=y
config_snd_arm=y
config_snd_spi=y
config_snd_usb=y
config_snd_usb_audio=y
config_snd_so=y
CONFIG_SND_SOC_GENERIC_DMANGINE_PCM=y
CONFIG_Snd_SOC_FSL_ASRC=y
CONFIG_Snd_SOC_FSL_SAI=y
CONFIG_SND_SOC_FSL_SSI=y
CONFIG_SND_SOC_IMX_PCM_DMA=y
CONFIG_SND_SOC_IMX_AUDMUX=y
CONFIG_Snd_IMX_SOC=y
CONFIG_SND_SOC_IMX_PCM_FIC=y
CONFIG_SND_SOC_I2C_AND_SPI=y
CONFIG_Snd_SOC_TLV320AIC3X=y

我可以检查或更改哪些内容?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好Vladimir,

    我回忆起,TLV320AIC3x驱动程序是为Kernal 2.7 创建的。 它非常旧,我们目前不积极支持该驱动程序。 我们希望尽快更新驱动程序。

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

    谢谢!

    我advancе 解决方案:也需要机器驱动程序IMX-tlv320aic3x.c. 它不是内核源树的一部分,但我在iNet中发现了一些例子。  但这不能解决我的问题:ALSA在列表中显示编解码器,但aplay确实挂起。

    事实上,sound / soC/codecs/tlv320aic3x.c确实调用了init编解码器的snd_so_write()过程,但i2c驱动程序不接收它的任务,因此i2c线缆上没有脉冲。

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

    弗拉基米尔

    很遗憾听到驱动程序无法为您正常工作。  我们确实希望尽快更新驱动程序,但我不能说您何时可以从我们的终端获得新的驱动程序

    如果您想处理驱动程序并尝试更新它,您可能会发现下面的文档很有帮助。 它显示了所有音频路由和相关寄存器。

    e2e.ti.com/.../1374.TLV320AIC3104_5F00_Functional_5F00_block_5F00_Diagram_5F00_With_5F00_Registers.pdf</s>3104

    此致,

    -Steve Wilson

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

    1)我使用了Variscite,Ltd 2014的IMX-tlv320aic3x.c版本。 应将其置于sound / soC/FSl/中,并应在Makefile中插入行,从而导致编译IMX-tlv320aic3xc. 查找"eukrea-tlv320"行并添加一些,将"eukrea-tlv320"更改为"imx-tlv320aic3x"。
    还需要添加文件Kconfig:
    配置Snd_SOC_IMX_TLV320AIC3X
           tristate "SoC音频支持带tlv320aic3x音频编解码器的i.MX6主板"
           取决于&& I2C
           选择Snd_SOC_TLV320AIC3X
           选择Snd_SOC_IMX_PCM_DMA
           选择Snd_SOC_IMX_AUDMUX
           选择Snd_SOC_FSL_SSI
           帮助
             连接编解码器TLV320AIC3x的i.MX6板的SoC音频
             SSI接口。
             如果您想在phyFLEX-i.MX6上添加对SoC音频的支持,请说Y
             主板。

    2)还需要在内核配置中设置参数config_snd_soc *TLV320AIC3X = y。
    CONFIG_SND_SOC_IMX_TLV320AIC3X=y
    CONFIG_Snd_SOC_TLV320AIC3X=y
    3)还需要内核修补程序(已在最新版本中,但我使用的是MCLK。15),它允许配置4.1 行以进行输出。
    应用修补程序并构建内核。

    4)在设备树中,您需要设置MCLK方向参数"FSL,SAI-MCLK-direction output"。 由于tlv320驱动程序不支持从属模式,因此CPU需要合成MCLK信号,因此编解码器将合成WCLK和BCLK信号。
    DTS总计:
    ...
    声音{
    兼容="FSL,IMX-audio-tlv320aic3x";
    型号="tlv320-audio-U";
    SSI-controller =<&SAI2>;
    CPU-DAI =<&SAI2>;
    audio-codec =<&codec>;
    MUX-int-port =<2>;/* 1,2,7 - SSI */
    MUX-ext-port =<5>;/* 3-6,IOMUX */
    音频路由=
    "LINE1L","Mic插孔",
    "耳机插孔","HPLOUT",
    "耳机插孔","HPROUT",
    "线路输出插孔","LLOOUt",
    "线路输出插孔","RLOUT",
    "MIC插孔","Mic Bias";
    };
    ...
    
    &SAI2{
    pinctrl-names ="default";
    pinctrl-0 =<&pinctrl_SAI2>;
    
    Assigned-Clocks =<&CLKS IMX6UL_CLK_SAI2_SEL>,
    <&CLKS IMX6UL_CLK_SAI2>;
    assigned-clock-parents =<&CLKS IMX6UL_CLK_PLL4_AUDIO_DIV>;
    assigned-clock-RAates =<0>,<1920万>;/* tlv320aic3104 */
    FSL,SAI-MCLK-方向-输出;
    状态="正常";
    };...
    
    
    i2c2{
    Clock_frequency =<10万>;
    pinctrl-names ="default";
    pinctrl-0 =<&pinctrl_i2c2>;
    状态="正常";
    
    编解码器:tlv320aic3x@18 {
    /* ai3x-micbias vg =<2>;*/
    兼容="ti,tlv320aic3104";
    REG =<0x18>;
    GPIO重置=<&GPIO5 0 GPIO主动_低>;
    
    时钟=<&CLKS IMX6UL_CLK_SAI2>;
    状态="正常";
    };
    };
    
    
x 出现错误。请重试或与管理员联系。