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/TLV320AIC3106:HPCOM 多路复用器未随新驱动程序更改

Guru**** 2468470 points


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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/778986/linux-tlv320aic3106-hpcom-mux-is-not-changed-with-new-driver

器件型号:TLV320AIC3106

工具/软件:Linux

我需要将 HPCOM 多路复用器从差分模式更改为单端模式。 使用旧的3.3.0内核、工作正常。 现在我已经迁移到4.14.67内核、我通过 alsamixer 或从我的软件更改了 HPCOM 模式、软件中的模式发生了变化、但实际上并没有改变。 我在硬件中看到 HPCOM 驱动差分。

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

    如果您使用的是 TLV320AIC3x 驱动程序、则该驱动程序是为 Linux 2.7内核创建的。 恐怕我们自2010年左右就没有更新过。 我们正在将其更新为更新的内核、但它将在年中之后发生。

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

    我看到在 Linux 3.3.0和4.14.67源代码中、tlv320aic3x.c 有很大差异。

    无论如何、当我迁移到新内核时、芯片的行为会发生变化。 我应该如何解决这个问题?

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

    到目前为止、您采取了哪些故障排除步骤?

    您是否能够读取单个寄存器? 您能否读取寄存器37和38? (HPLCOM 使用寄存器37进行配置、HPRCOM 使用寄存器38进行配置)

    您是否看到 HPRCOM 和 HPLCOM 的行为相同?


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

    Steve Wilson、

    在3.3.0内核上:

    # cat /sys/bus/platform/devices/soc-audio.0/TLV320AIC3X/codec_reg
    ……
    25:E0
    26:10
    

    寄存器37和38正确、HPCOM 设置为单端。

    在4.14.67内核上、我在/sys/bus/platform/devices/sound/davinci-mcasp.0-tlv320aic3x-hifi 上找到 codec_reg、但它是空的。 如何启用此文件的寄存器打印?

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

    恐怕我依赖您的软件专业知识。 我很乐意为编解码器、寄存器配置等提供帮助...

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

    我做了一些调查:

    1) 1)在新的系统位0上、寄存器58和72中的"HPLCOM 完全上电"设置为1 -这会导致 HPLCOM/HPRCOM 引脚被主动驱动、即使 HPCOM 输出的单端模式被设置也是如此。 在旧内核上、该位设置为0。 驱动该引脚对我们来说是一个问题、因为它连接到了电路板上的接地端。

    现在、我已经在 sound/soc/codecs/tlv320aic3x.c 中添加了对这些位的控制:

    静态 const char * const aic3x_output_ptrl[]={"未完全上电"、"完全上电"};
    静态 SOC_enum_single_DECL (aic3x_HPL_pctrl_enum、HPLOC_CTRL、0、 aic3x_output_ptrl);
    静态 SOC_enum_single_DECL (aic3x_HPR_pctrl_enum、HPRCOM_CTRL、0、aic3x_output_ptrl);
    (笑声)
    SoC_enum ("左 HPCOM 电源控制"、aic3x_HPL_pctrl_enum)、
    SOC_enum ("右 HPCOM 电源控制"、aic3x_HPR_pctrl_enum)、
    
    

    我们可以从 alsa userapi 控制该位。

    2) 2)要启用寄存器、需要添加 sound/soc/codecs/tlv320aic3x.c:

    静态常量结构 snd_soc_codec_driver soc_codec_dev_aic3x ={
    .set_bias _level = aic3x_set_bias _level、
    
    +.reg_cache_size = array_size (aic3x_reg)、
    +.reg_word_size = sizeof (u8)、
    +.reg_cache_size = array_size=
    
    .ic3x、aid_probe =.icid_off、aid_probe =.ic3x、aide_probe =.icle_off、aide_probe =.
    
    

    希望、这对某人有所帮助。