主题中讨论的其他器件: TLV320AIC3104
您好-
我正在尝试将 tlv320dac3100器件集成到我们基于站点的设计中。 从器件中取出 Ould 时遇到问题。
我不明白应该如何为 tlv320dac3100配置提供的驱动程序。 似乎要控制此驱动程序,基本驱动程序是 tlv320aic3104.c 驱动程序,而 tlv320dac3100是驱动程序用于查找用于配置设备的正确 i2c 命令集的选项。 我从中的这个枚举中得到了这个概念
AICaic31xx_type{ AIC3100 = 0、 AIC3110 = AIC31XX_Stereo 类_D_BIT、 AIC3120 = AIC31XX_miniDSP_BIT、 AIC3111 = AIC31XX_Stereo 类_D_BIT | AIC31XX_miniDSP_BIT、 DAC3100 = DAC31XX_BIT、DAC31XX_BIT = DAC31XX_BIT_BIT_BIT; | AIC31XX_CLASS _BIT | DAC3101立体声_BIT_BIT_BIT_BIT | DAC31XX_BIT |
我在 BeagleBone 构建下使用来自 ti 的内核 xxx
Linux BeagleBone 4.19.94-ti-R42 #1 buster SMP 抢占 Tue Mar 31 19:38:29 UTC 2020 armv7l GNU/Linux
我很感谢您不支持 BeagleBone、但您确实提供了驱动程序、因此我很高兴您能向正确的方向指出我、或者引导我使用 BeagleBone 提供的最佳资源。
我使用的是 Sitara AM335x
我已粘贴下面的 DTS 文件
结果是正确的串行音频信号从器件发送到主机、但没有声音输出(我正在使用扬声器测试进行测试) 当我在启动时对 i2c 端口发出的内容进行解码时、我会看到数据表显示不写入的寄存器写入、例如在启动时、我会得到如下对寄存器0x12第0页的写入
0x12 0x81
从 数据表的表6-45中可以看出、不需要写入该区域。
我猜、至少有一部分器件被视为 aic3104、而不是根据请求被视为 dac3100。
当我对大多数 i2c 命令进行解码时、它们对于 dac3100看起来是正确的。
是否有文档解释了这一切的工作原理以及如何编辑正确的文件以使其工作?
内核控制器件 i2c 总线、因此我无法使用 i2cget 或 i2cset 来写入或读取寄存器。
Linux 驱动程序的一般问题-
我认为我对 Linux 驱动程序过程的理解中缺少了一个 peice -我不知道谁在启动时调用驱动程序代码中的例程。 内核中的某些程序必须作为 uboot 的一部分运行、也许是为了调用驱动程序例程来设置器件。 您能告诉我这是谁(什么程序)。 如果我可以修改、我可能可以调试这个问题。
此外、是否有办法从该地址的驱动程序中解开 i2c 总线、以便能够独立访问寄存器?
感谢您在这方面的帮助。
DTS 文件
/*
*版权所有(C) 2012德州仪器(TI)公司- http://www.ti.com/
*
*此程序是免费软件;您可以重新分发和/或修改
*根据 GNU 通用公共许可证第2版的条款,如所示
*由免费软件基金会发布。
*
/DTS-v1/;
/插件/;
#include
#include
/{
/*
* Helper,在/proc/device-tree/chosen/overlays 下显示已加载的覆盖图
*
片段@0{
target-path="/";
_overlay__{
选择{
覆层{
BB-Bone-Audi-02-00A0 =__TIMESTAMP__;
};
};
};
};
/*
*从引脚多路复用器帮助器中释放 Cape 使用的引脚。
*
碎片@1{
Target =<&OCP>;
_overlay__{
P9_25_pinmux{status ="disabled";};// McASP0_ahclkx *
P9_28_pinmux{status ="disabled";};// McASP0_axr2 *
P9_29_pinmux{status ="disabled";};// McASP0_FSX *
P9_30_pinmux{status ="disabled";};// McASP0_axr0 *
P9_31_pinmux{status ="disabled";};// McASP0_aclkx *
};
};
碎片@2{
目标=<&am33xx_pinmux>;
_overlay__{
bon_audio_cape_audio_pins:pinmux_bon_audio_cape_audio_pins{
pinctrl-single、pins =<
//将音频引脚配置更新为 aclkx (V16)输入 FSX (U16)输入和 AXR1输出(V17)
AM33XX_IOPAD (0x860、PIN_INPUT 下拉| MUX_MODE6)/* McASP0_aclkx.McASP0_aclkx *
AM33XX_IOPAD (0x864、PIN_INPUT 下拉| MUX_MODE6)/* McASP0_FSX.McASP0_FSX、输入*/
AM33XX_IOPAD (0x86c、PIN_OUTPUT 下拉| MUX_MODE6)/* McASP0_axr0.McASP0_axr1 *
>;
};
};
};
碎片@3{
target-path="/";
_overlay__{
CLK_McASP0_FIXED:CLK_McASP0_FIXED{
#clock-cells =<0>;
兼容="固定时钟";
时钟频率=<12000000>;
};
CLK_McASP0:CLK_McASP0{
#clock-cells =<0>;
兼容="GPIO-GATE -时钟";
时钟=<&clk_McASP0_FIXED>;
ENABLE-GPIO =<&GPIO1 27 0>;//在 GPIO1_27上启用 BeagleBone Black Clk *
};
听起来{
兼容="简单音频卡";
simple-audio-card、name ="Audoccape Rev B";
simple-audio-card、小工具=
"扬声器"、"外部扬声器";
//"耳机"、"耳机插孔"、
//"线路"、"线路输入";
简单音频卡,路由=
"扬声器"、"SPK";
//"耳机插孔"、"HPLOUT"、
//"耳机插孔"、"HPROUT"、
//"LINE1L"、"线路输入"、
//"LINE1R"、"线路输入";
simple-audio-card、format ="DSP_b";
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-di-cells =<0>;
sound-dai =<&tlv320dac3100>;
时钟=<&clk_McASP0>;
时钟名称="MCLK";
};
};};
};
碎片@4{
目标=<&i2c2>;
_overlay__{
#address-cells =<1>;
#size-cells =<0>;
时钟频率=<100000 >;
状态="正常";
tlv320dac3100:tlv320dac3100@18{
#sound-di-cells =<0>;
兼容="ti、tlv320dac3100";
reg =<0x18>;
};
};
};
碎片@5{
目标=<&McASP0>;
_overlay__{
#sound-di-cells =<0>;
pinctrl-names ="default";
pinctrl-0 =<&bon_audio_cape_audio_pines>;
状态="正常";
OP-MODE =<0>;/* MCASP_IIS_MODE */
TDM-SLOTS =<2>;
num-serializer =<16>;
serial-dir =</* 0:非活动、1:TX、2:Rx *
//将 AXR1设置为 TX 数据输出禁用所有其他功能
0 1 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
>;
tx-num-evt =<1>;
Rx-num-evt =<1>;
};
};
};