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/AM3352:TLV320AIC3204驱动程序

Guru**** 2604225 points
Other Parts Discussed in Thread: TLV320AIC3204, AM3352, TLV320AIC3106

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/648925/linux-am3352-tlv320aic3204-driver

器件型号:AM3352
主题中讨论的其他器件:TLV320AIC3204TLV320AIC3106

工具/软件:Linux

尊敬的 TI 团队:

我们正在设计 AI 智能扬声器项目。  我们在电路板上使用了 AM3352和 TLV320AIC3204器件。 我们在 4.4.4.30使用内核版本、并在  defconfig 文件中为 TLV320AIC3204音频添加了"CONFIG_SND_SOC_TLV320AIC32X4"、并将其构建到内核驱动程序(而不是内核模块)中。 除此之外、我修改 DTS 文件以将其集成到 ALSA 音频-简单-编解码器中。 下面是我的 DTS 文件。  

-引导后,我键入"aplay -l "命令,日志为:

 根目录@BeagleBone:~# aplay -l

aplay:device_list:268:找不到声卡...

- dmesg | grep tlv 查看日志:

 [2.327225] tlv320aic32x4 1-0018:获取 MCLK 失败。 如果没有 MCLK、当前的执行不支持使用这个编解码器。

 我还尝试使用链接 http://mailman.alsa-project.org/pipermail/alsa-devel/2015-June/094297.html 上的补丁文件传递此错误。 但是、它似乎不适合这种情况。

 

-您能帮助回答我的问题吗、如下所示:

 +如何在内核源代码中启用 tlv320aic32x4驱动程序?
 + DTS 文件非常重要。 您能否举几个例子来说明如何写 DTS 文件来解决此问题?

请参阅下面的 DTS 文件:

*版权所有(C) 2012德州仪器(TI)公司- http://www.ti.com/
*
*此程序是免费软件;您可以重新分发和/或修改
*根据 GNU 通用公共许可证第2版的条款,如所示
*由免费软件基金会发布。
*
/DTS-v1/;

#include "am33xx.dtsi"
#include "AM335x-bone-common.dtsi"

/*大圆:选择一个:*/

/*
*/etc/modprobe.d/pruss-blacklist.conf
*
*将 uio_pruss 列入黑名单
*

/*#include "am33xx-pruss-rproc.dtsi"*

/*
*/etc/modprobe.d/pruss-blacklist.conf
*
*黑名单桁架
*黑名单 pruss_intc
*将 PRU-rproc 列入黑名单
*

/*#include "am33xx-pruss-uio.dtsi"*

/{
型号="TI AM335x BeagleBone Black";
兼容="ti、am335x-bone-black"、"ti、am335x-bone-"、"ti、am33xx";
};

ldo3_reg{(&L)
稳压器最小微伏=<1800000>;
稳压器最大值微伏=<1800000>;
稳压器常开;
};

mmc1{(&M)
VMMC-SUPPLY =<&vmmcsd_fixed>;
};

mmc2{(&M)
VMMC-SUPPLY =<&vmmcsd_fixed>;
pinctrl-names ="default";
pinctrl-0 =<&eMMC_PINs>;
总线宽度=<8>;
状态="正常";
};

CPU0_OPP_TABLE{
/*
*所有 PG 2.0器件可能都不支持1GHz、但有些器件支持较早的频率
* BeagleBone Black 具有可保证的 PG 2.0器件
*支持1GHz OPP、因此请在此板上启用 PG 2.0。
*
硝基平@1000000000{
opp-supported-HW =<0x06 0x0100>;
};
};

am33xx_pinmux{(am33xx_pinmux)}
McASP0_Pins:McASP0_Pins{
pinctrl-single、pins =<
AM33XX_IOPAD (0x9A8、PIN_INPUT_PULLUGDOWN | MUX_MODE0)/* McASP0_axr1.McASP0_axr1 AM335X_McASP0_AXR1 *
AM33XX_IOPAD (0x998、PIN_INPUT 下拉| MUX_MODE0)/* McASP0_axr0.McASP0_axr0 AM335X_McASP0_AXR0 *
AM33XX_IOPAD (0x994、PIN_INPUT_PULLUGDOWN | MUX_MODE0)/* McASP0_FSX.McASP0_FSX AM335X_McASP0_FSX *
AM33XX_IOPAD (0x990、PIN_INPUT_PULLDOWN | MUX_MODE0)/* McASP0_aclkx.McASP0_aclkx AM335X_McASP0_ACLKX *
>;
};

i2c2_pins:pinmux_i2c2_pins{
pinctrl-single、pins =<
0x150 0x72 /* spi0_scl.i2c2_sda、SLEWCTRL_SLOW | INPUT_PULLUP |Mode2*/
0x154 0x72 /* spi0_d0.i2c2_SCL、SLEWCTRL_SLOW | INPUT_PULLUP | Mode2*/
>;
};

i2c1_pins:pinmux_i2c1_pins{
pinctrl-single、pins =<
0x168 (PIN_INPUT_PULLUP | MUX_MODE3)/* uart0_CTSN.i2c1_sda AM335X_I2C1_SDA *
0x16C (PIN_INPUT_PULLUP | MUX_MODE3)/* uart0_rtsn.i2c1_SCL AM335X_I2C1_SCL *
>;
};
};

i2c1{(&I)
pinctrl-names ="default";
pinctrl-0 =<&i2c1_PINs>;

状态="正常";
时钟频率=<100000 >;

tlv320aic32x4:tlv320aic32x4@18{
#sound-di-cells =<0>;
兼容="ti、tlv320aic32x4";
reg =<0x18>;
};
};

&McASP0{
#sound-di-cells =<0>;
pinctrl-names ="default";
pinctrl-0 =<&McASP0_PINs>;
状态="正常";
OP-MODE =<0>;/* MCASP_IIS_MODE */
TDM-SLOTS =<2>;/*表示通过一个串行器发送或接收的通道数。 *
serial-dir =</* 0:非活动、1:TX、2:Rx *
1 2 0 0
>;
tx-num-evt =<32>;
Rx-num-evt =<32>;
};

/{
听起来{
兼容="简单音频卡";
simple-audio-card、name ="tlv320aic32x4";
simple-audio-card、小工具=
"耳机"、"耳机插孔"、
"线路"、"线路输入";
简单音频卡,路由=
"耳机插孔"、"HPL"、
"耳机插孔"、"HPR"、
"IN1_L"、"线路输入"、
"IN1_R"、"线路输入";
simple-audio-card、format ="I2S";
simple-audio-card、bitclock-master =<&sound_master>;
simple-audio-card、frame-master =<&sound_master>;
简单音频卡、位时钟反转;

简单音频卡、CPU{
Sound-Dai =<&McASP0>;
};

sound_master:simple-audio-card、codec{
sound-dai =<&tlv320aic32x4>;
系统时钟频率=<12000000>;
};
};

};

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    软件团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Nguyen:

    [引用 user="Thinh Nguyen "]我们使用 的内核版本为4.4.3.30

    我建议您使用 AM335x TI PSDK。 AM335x TI PSDK v3.02附带最接近的内核版本(4.4.432)。 此外、如果可能、我建议您切换到内核4.9.41附带的最新 AM335x TI PSDK v4.01。

    [引用 user="Thinh Nguyen "] +如何在内核源代码中启用 tlv320aic32x4驱动程序?

    该驱动程序在 PSDK 4.01内核中默认启用:

    Linux-4.9.41/sound/soc/codecs/Makefile

    linux-4.9.41/sound/soc/codecs/kconfig

    linux-4.9.41/sound/soc/codecs/tlv320aic32x4.c

    Linux-4.9.41/sound/soc/codecs/tlv320aic32x4.h

    Linux-4.9.41/include/sound/tlv320aic32x4.h

    Linux-4.9.4/Documentation/devicetree/bindings/sound/tlv320aic32x4.txt

    您可以参考该4.9.41内核以供参考。

    [引用 user="Thinh Nguyen "] + DTS 文件非常重要。 您能否举几个例子来说明如何写 DTS 文件来解决此问题?

    您可以参阅以下 PSDK 4.01 AM335x DTS 文件以获取示例(TLV320AIC3106用于 AM335x TI 电路板):

    Linux-4.9.41/arch/arm/boot/dts/AM335x-evm.dts

    Linux-4.9.41/arch/arm/boot/dts/AM335x-evmsk.dts

    另请参阅以下 DTS 文件:

    linux-4.9.41/arch/arm/boot/dts/am335x-wega.dtsi

    Linux-4.9.41/arch/arm/boot/dts/AM335x-pepo.dts

    Linux-4.9.41/arch/arm/boot/dts/AM335x-sl50.dts

    此致、
    帕维尔

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

    非常感谢您的支持。

    我们将尝试执行此操作、并在稍后通知您结果。

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

    另请参阅以下 wiki 页面:

    processors.wiki.ti.com/.../Processor_SDK_Linux_Audio
    processors.wiki.ti.com/.../Sitara_Linux_Audio_Driver_Overview
    processors.wiki.ti.com/.../Sitara_Linux_Audio_Porting_Guide
    processors.wiki.ti.com/.../Linux_Core_Audio_User's_Guide

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

    您好、Pavel、

    我以前使用过最新的 AM335x TI PSDK v4.01、其中随附内核4.9.41作为您的建议。

    -启动后,TLV320AIC 模块似乎检测到:

    根目录@BeagleBone:~# aplay -l

    ****播放硬件设备列表****

    卡0:TLV320AIC32X4 [TI TLV320AIC32X4]、器件0:AIC32X tlv320aic32x4-hifi-0 []

     子器件:0/1

     子设备#0:子设备#0

    -我尝试通过 I2C 总线设置 I2S 模式,但失败了。 日志是:

    root@BeagleBone:~# i2cset -y 2 0x18 0x22 0x20

    错误:无法将地址设置为0x18:设备或资源忙

    -如何设置 TLV320AIC 的 I2S 模式接口?

    -我向 TLV320AIC MCLK 引脚提供了11、2898 MHz 时钟。 我想将 WCLK 设置为44、1KHz、BCLK 设置为1、1112MHz (16位立体声、2个通道)。 如何设置 WCLK 和 BCLK?

    -请参阅以下日志文件:

    root@BeagleBone:~# dmesg | grep tlv

    [18.095176] tlv320aic32x4 2-0018:获取 MCLK 失败。 当前实施不支持使用 ofk

    [ 23.028420] DaVinci_EVM 声音:tlv320aic32x4-hifi <-> 48038000 McASP 映射正常

    root@BeagleBone:~# dmesg | grep sound

    [22.405119] DaVinci_EVM 声音:ASOC:DAPM 未知引脚 MONO_LOUT

    [22.602224] DaVinci_EVM 声音:ASOC:DAPM 未知引脚 HPLOCOM

    [22.807010] DaVinci_EVM 声音:ASOC:DAPM 未知引脚 HPRCOM

    [ 23.028420] DaVinci_EVM 声音:tlv320aic32x4-hifi <-> 48038000 McASP 映射正常

    [23.150948] DaVinci_EVM 声音:ASOC:找不到 HPLOUT 的源小工具

    [23.157679] DaVinci_EVM 声音:ASOC:添加路由 HPLOUT ->直接->耳机插孔失败

    [23.166157] DaVinci_EVM 声音:ASOC:找不到 HPROUT 的源小工具

    [23.172745] DaVinci_EVM 声音:ASOC:添加路由 HPROUT ->直接->耳机插孔失败

    [23.181163] DaVinci_EVM 声音:ASOC:未找到针对 LINE1L 的接收器小工具

    [23.187569] DaVinci_EVM 声音:ASOC:无法在-> Direct -> LINE1L 中添加线路

    [23.195181] DaVinci_EVM 声音:ASOC:未找到针对 LINE1R 的接收器小部件

    [23.201776] DaVinci_EVM 声音:ASOC:无法在-> Direct -> LINE1R 中添加线路

    根目录@BeagleBone:~# aplay -l

    ****播放硬件设备列表****

    卡0:TLV320AIC32X4 [TI TLV320AIC32X4]、器件0:AIC32X tlv320aic32x4-hifi-0 []

     子设备:1/1

     子设备#0:子设备#0

    -请参阅下面的 DTS 文件:

    /*

    *版权所有(C) 2012德州仪器(TI)公司-  

    *

    *此程序是免费软件;您可以重新分发和/或修改

    *根据 GNU 通用公共许可证第2版的条款,如所示

    *由免费软件基金会发布。

    *

    /DTS-v1/;

    #include "am33xx.dtsi"

    #include "AM335x-bone-common.dtsi"

    /*大圆:选择一个:*/

    /*

    */etc/modprobe.d/pruss-blacklist.conf

    *

    *将 uio_pruss 列入黑名单

    *

    /*#include "am33xx-pruss-rproc.dtsi"*

    /*

    */etc/modprobe.d/pruss-blacklist.conf

    *

    *黑名单桁架

    *黑名单 pruss_intc

    *将 PRU-rproc 列入黑名单

    *

    /*#include "am33xx-pruss-uio.dtsi"*

    /{

    型号="TI AM335x BeagleBone Black";

    兼容="ti、am335x-bone-black"、"ti、am335x-bone-"、"ti、am33xx";

    };

    ldo3_reg{(&L)

    稳压器最小微伏=<1800000>;

    稳压器最大值微伏=<1800000>;

    稳压器常开;

    };

    mmc1{(&M)

    VMMC-SUPPLY =<&vmmcsd_fixed>;

    };

    mmc2{(&M)

    VMMC-SUPPLY =<&vmmcsd_fixed>;

    pinctrl-names ="default";

    pinctrl-0 =<&eMMC_PINs>;

    总线宽度=<8>;

    状态="正常";

    };

    CPU0_OPP_TABLE{

    /*

    *所有 PG 2.0器件可能都不支持1GHz、但有些器件支持较早的频率

    * BeagleBone Black 具有可保证的 PG 2.0器件

    *支持1GHz OPP、因此请在此板上启用 PG 2.0。

    *

    硝基平@1000000000{

    opp-supported-HW =<0x06 0x0100>;

    };

    };

    am33xx_pinmux{(am33xx_pinmux)}

    McASP0_Pins:McASP0_Pins{

    pinctrl-single、pins =<

    AM33XX_IOPAD (0x9ac、PIN_INPUT 下拉| MUX_MODE0)/* McASP0_ahcklx.McASP0_ahclkx *

    AM33XX_IOPAD (0x994、PIN_INPUT_PULLUGDOWN | MUX_MODE0)/* McASP0_FSX.McASP0_FSX *

    AM33XX_IOPAD (0x990、PIN_INPUT 下拉| MUX_MODE0)/* McASP0_aclkx.McASP0_aclkx *

    AM33XX_IOPAD (0x998、PIN_INPUT 下拉| MUX_MODE0)/* McASP0_axr0.McASP0_axr0 *

    AM33XX_IOPAD (0x9a8、PIN_INPUT_PULLUGDOWN | MUX_MODE0)/* McASP0_axr1.McASP0_axr1 *

    >;

    };

    };

    i2c2{(&I)

    pinctrl-names ="default";

    pinctrl-0 =<&i2c2_PINs>;

    状态="正常";

    时钟频率=<100000 >;

    tlv320aic32x4:tlv320aic32x4@18{

    #sound-di-cells =<0>;

    兼容="ti、tlv320aic32x4";

    reg =<0x18>;

    };

    };

    &McASP0{

    #sound-di-cells =<0>;

    pinctrl-names ="default";

    pinctrl-0 =<&McASP0_PINs>;

    状态="正常";

    OP-MODE =<0>;/* MCASP_IIS_MODE */

    TDM-SLOTS =<2>;/*表示通过话机串行器发送或接收的信道数。 *

    serial-dir =

    1 0 0 0 0

    >;

    tx-num-evt =<32>;

    Rx-num-evt =<32>;

    };

    /{

    听起来{

    兼容="ti、tlv320aic32x4-evm-音频";

    TI、模型="TI TLV320AIC32X4";

    TI、audio-codec =<&tlv320aic32x4>;

    TI、McASP-controller =<&McASP0>;

    TI、CODEC 时钟速率=<24000000>;

    TI、小工具=

    "耳机"、"耳机插孔"、

    "线路"、"线路输入";

    TI、音频路由=

    "耳机插孔"、   "HPLOUT"、

    "耳机插孔"、   "HPROUT"、

    "LINE1L"、        "线路输入"、

    "LINE1R"、        "线路输入";

    };

    };

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

    [引用用户="Thinh Nguyen "]

    -我尝试通过 I2C 总线设置 I2S 模式,但失败了。 日志是:

    root@BeagleBone:~# i2cset -y 2 0x18 0x22 0x20

    错误:无法将地址设置为0x18:设备或资源忙

    -如何设置 TLV320AIC 的 I2S 模式接口?

    [/报价]

    我建议您首先尝试使用 i2cdetect 工具。 另请检查 AM335x I2C 和外部 AIC32x 编解码器时钟是否被启用。

    关于 I2C 工具的使用、您可以查看以下 wiki 页面:

    [引用用户="Thinh Nguyen "]

    i2c2{(&I)

    pinctrl-names ="default";

    pinctrl-0 =<&i2c2_PINs>;

    状态="正常";

    时钟频率=<100000 >;

    tlv320aic32x4:tlv320aic32x4@18{

    #sound-di-cells =<0>;

    兼容="ti、tlv320aic32x4";

    reg =<0x18>;

    };

    };

    [/报价]

    您缺少"status=oke"和 x-supply 条目。 请参阅 AM335x-evmsk.dts 和 tlv320aic32x4.txt 文件。

    此致、
    帕维尔

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

    [引用 USER="Thinh Nguyen ]我向 TLV320AIC MCLK 引脚提供了11、2898 MHz 时钟。 我想将 WCLK 设置为44、1KHz、BCLK 设置为1、1112MHz (16位立体声、2个通道)。 如何设置 WCLK 和 BCLK?[/QUERP]

    根据我的理解、您需要从 AM335x McASP 向 AIC32x 编解码器提供 MCLK/BCLK/WCLK? 在这种情况下、McASP 是主器件、AIC32x 是从器件。

    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    有关 McASP 时钟信号的主/从配置的更多信息、请参阅以下文档:

    www.ti.com/.../sprac09a.pdf

    5.2数据格式和时钟
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Pavel、

    感谢您的大力支持。

    我的板运行良好。

    谢谢。
    Thinh Nguyen