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.

[参考译文] TLV320DAC32:Linux 驱动程序和器件树有问题

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1178032/tlv320dac32-problem-with-linux-driver-and-device-tree

器件型号:TLV320DAC32

我遇到了有关 tlv320dac32的 Linux 驱动程序的问题。 如本文 https://e2e.ti.com/support/audio-group/audio/f/audio-forum/654414/linux-tlv320dac32-tlv320dac32-linux-drivers-apply 中所述 、我为我的器件使用了 tlv320aic3x-i2c 驱动程序。 我在内核配置中将其作为模块启用。 我创建了设备树:

i2c3{(&I)
   tlv320aic3x:tlv320aic3x@18{
      #sound-di-cells =<0>;
      兼容="ti、tlv320aic3x";
      reg =<0x18>;

      pinctrl-names ="default";
      pinctrl-0 =<&pinctrl_tlv32>;
      RESET-GPIO =<&GPIO3 20 GPIO_ACTIVE_LOW>;

      AVDD-SUPPLY =<&regulator >;
      IOVdd-supply =<&regulator >;
      DRVDD-SUPPLY =<&regulator >;
   };
};

我可以看到驱动程序已注册:

[6.080843]   i2c i2c-2:for_i2c:寄存器/SoC@0/bus@30800000/i2c@30a40000/tlv320aic3x@18.
[6.099482]   i2c i2c-2:注册总线 ID 为2-0018的客户端[tlv320aic3x]
[12.267136]  i2c 内核:已注册驱动程序[tlv320aic3x]

我还可以使用 i2cdetect 命令检测器件、但看起来驱动程序从未连接到器件。 它看起来不能识别它。 我放置一些调试 printk、看起来从未调用过探测函数。

我的配置是否有问题?

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

    您好、Borys、

    我们的软件驱动程序专家将查看您的问题描述。 请留出几天时间、以便他们提供更多意见。

    此致、
    -Ivan Salazar
    应用工程师

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

    您能否提供更多项目信息? 哪种平台? 内核版本?

    根据您的描述,您没有在 DTS 文件中设置声卡。 有关详细信息、请参阅附件。

    e2e.ti.com/.../sound-card-register.pptx

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

    我正在处理 IMX8MM。 内核版本5.15。

    我之前设置了声卡、但它不起作用、因此我尝试了较小的步骤、仅尝试了 tlv320dac32设置/驱动程序、并认为驱动程序至少可以识别设备、或者我会在 dmesg 中看到一些消息。 它是否应该在没有声卡设置的情况下执行某些操作、或者是否需要偶数探头 tlv32?


    下面是我的 DTS 及声卡:

    sound-tlv320aic3x{
       兼容="简单音频卡";
       simple-audio-card、name ="TLV320DAC32";
       simple-audio-card、format ="I2S";
       simple-audio-card、bitclock-master =<&codec1>;
       simple-audio-card、frame-master =<&codec1>;
       simple-audio-card、widget ="蜂鸣器";
       简单音频卡,路由=
          "蜂鸣器"、"SPR";
       简单音频卡、CPU{
       ??Sound-Dai =<?Sa义3>;
       };
    };
       
    codec1:简单音频卡、编解码器{
       sound-dai =<&tlv320aic3x>;
       系统时钟频率=<&clk IMX8MM_CLK_SAI3_ROOT>;
    };

    Saa3{(&S)
       pinctrl-names ="default";
       pinctrl-0 =<&pinctrl_sa3>;
       状态="正常";

       分配的时钟=<&clk IMX8MM_CLK_SAI3>;
       分配的时钟父级=<&clk IMX8MM_AUDIO_PLL1_OUT>;
       分配的时钟速率=<12000000>;
    };

    i2c3{(&I)
       tlv320aic3x:tlv320aic3x@18{
          #sound-di-cells =<0>;
          兼容="ti、tlv320aic3x";
          reg =<0x18>;

          pinctrl-names ="default";
          pinctrl-0 =<&pinctrl_tlv32>;
          RESET-GPIO =<&GPIO3 20 GPIO_ACTIVE_LOW>;

          AVDD 电源=<Registered>;
          IOVdd-supply =<Registered>;
          DRVDD 电源=<Registered>;
       };
    };



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

    您能和我分享原始 DTS 吗? 还有一个问题、您是否将 TLV320DAC32设置为主器件或从器件?

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

    原始 DTS 是什么意思? 我有定制板和自己的 DTS。 我将包括 https://github.com/torvalds/linux/blob/v5.15/arch/arm64/boot/dts/freescale/imx8mm.dtsi 、并在其他 dtsi 文件中启用了 i2c3:

    i2c3{(&I)
       时钟频率=<100000 >;
       pinctrl-names ="default";
       pinctrl-0 =<&pinctrl_i2c3>;
       状态="正常";
    };

    关于主/从设置、我没有在 DTS 示例或其他地方看到过这些设置、我自己也没有执行任何寄存器读取/写入操作、我认为这是设置器件的驱动程序任务。

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

    我已经取得了一些进展。 我删除了、
          AVDD-SUPPLY =<&regulator >;
          IOVdd-supply =<&regulator >;
          DRVDD-SUPPLY =<&regulator >;

    部件。 现在、我在虚拟稳压器方面遇到了一些错误:

    [13.248007]  tlv320aic3x 2-0018:未找到电源 IOVDD、使用虚拟稳压器
    [13.259241]  tlv320aic3x 2-0018:未找到电源 DVDD、使用虚拟稳压器
    [13.276491]  tlv320aic3x 2-0018:未找到电源 AVDD、使用虚拟稳压器
    [13.283680]  tlv320aic3x 2-0018:未找到电源 DRVDD、正在使用虚拟稳压器
    [13.297426]  tlv320aic3x 2-0018:无效电源电压 AVDD:-22、DVDD:-22

    但器件是探测和注册的。 调用 i2cdetect -y 2时、我可以在地址0x18上看到`uU`

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

    在您的新 DTS 中、声卡是否已注册?

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

    不幸的是、不是。 我认为我必须研究 DTS 的第3部分。 但是、至少在此时 tlv320dac32的工作方式符合预期

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

    imx8mm dtsi 只是头文件、哪个文件是 DTS 文件?

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

    sound-tlv320aic3x{
       兼容="简单音频卡";
       simple-audio-card、name ="TLV320DAC32";
       simple-audio-card、format ="I2S";
       simple-audio-card、bitclock-master =<&codec1>;
       simple-audio-card、frame-master =<&codec1>;
       simple-audio-card、widget ="蜂鸣器";
       简单音频卡,路由=
          "蜂鸣器"、"SPR";
       简单音频卡、CPU{
       ??Sound-Dai =<?Sa义3>;
       };

      codec1:简单音频卡、编解码器{
      sound-dai =<&tlv320aic3x>;
       系统时钟频率=<&clk IMX8MM_CLK_SAI3_ROOT>;
      };
    };

    将编解码器1放入 sound-tlv320aic3x 中、然后尝试它

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

    我有自己的 DTS 文件、因为它是定制板。 我在上面已经分享了其中的一部分。 这里没有其他与 tlv32或 SAI 相关的东西

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

    还有一个部分,但只有这一部分与这个问题有关:

    i2c3{(&I)
       时钟频率=<100000 >;
       pinctrl-names ="default";
       pinctrl-0 =<&pinctrl_i2c3>;
       状态="正常";
    };

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

    i2c3{(&I)
       时钟频率=<100000 >;
       pinctrl-names ="default";
       pinctrl-0 =<&pinctrl_i2c3>;
       状态="正常";

    #address-cells=<1>;
    size-cells=<0>;

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

          pinctrl-names ="default";
          pinctrl-0 =<&pinctrl_tlv32>;
          RESET-GPIO =<&GPIO3 20 GPIO_ACTIVE_LOW>;

          AVDD 电源=<Registered>;
          IOVdd-supply =<Registered>;
          DRVDD 电源=<Registered>;
       };
    };

    sound-tlv320aic3x{
       兼容="简单音频卡";
       simple-audio-card、name ="TLV320DAC32";
       simple-audio-card、format ="I2S";
       simple-audio-card、bitclock-master =<&codec1>;
       simple-audio-card、frame-master =<&codec1>;
       simple-audio-card、widget ="蜂鸣器";
       简单音频卡,路由=
          "蜂鸣器"、"SPR";

    simple-audio-card、di-link@0{
       简单音频卡、CPU{
       ??Sound-Dai =<?Sa义3>;
       };

      codec1:简单音频卡、编解码器{
      sound-dai =<&tlv320aic3x>;
       系统时钟频率=<&clk IMX8MM_CLK_SAI3_ROOT>;
      };

    };
    };

    请尝试此操作

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

    这实际上有所帮助。 我还必须更改小工具、因为这是错误的。
    simple-audio-card、小工具=
       "扬声器"、"左耳机输出";
    简单音频卡,路由=
       "左侧 HP 输出"、"HPLOUT";

    我可以在/sys/class/sound 下看到 card0

    我还没有声音、但感觉就像我在那里。

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

    期待您提供更多好消息。

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

    大家好、我想让它最终工作。 我必须更改编解码器设置和设置时钟:

    codec1: simple-audio-card,codec {
    	sound-dai = <&tlv320aic3x>;
    	clocks = <&clk IMX8MM_CLK_SAI3_ROOT>;
    };

    以及小工具路由设置:
    simple-audio-card,widgets = 
    	"Headphone", "Right HP Out";
    simple-audio-card,routing =
    	"Right HP Out", "HPROUT";


    现在、我可以使用获得声音
    speaker-test -f 1000 -t sine 


    我只需要做一件事、就是使用 alsamixer 增加这些设置值
    PCM, HP, HP DAC, RIGHT HP MIXER DACR1


    它看起来还可以、或者我可以在 DTS 中做更多的事情吗? 我不确定我的路由是否正常、但如果正常、我认为是这样。

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

    您好、Borys、

    我将在下周初与我们的软件专家核实这一点、并向您提供一些反馈。

    此致、
    -Ivan Salazar
    应用工程师

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

    在我看来、小工具主要在代码中定义。 在 DTS 中可以忽略它们。

    如果您删除了 DTS 中的小工具、您是否有一些异常?

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

    我删除了小工具、一切都很好。 使用 DTS 中定义的小工具 、我收到了有关被覆盖的小工具的消息、因此您是对的。

    我认为这个主题现在可能已经关闭了。

    再次感谢您的支持。