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.

[参考译文] TAS5805M:音频播放之前、音量控制不起作用

Guru**** 2473270 points
Other Parts Discussed in Thread: TAS5805M

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/807785/tas5805m-volume-control-does-not-work-until-audio-is-played

器件型号:TAS5805M

我  已将驱动程序从 e2e.ti.com/.../2753684 添加到内核、并已使用 PPC3生成配置。 我还编写了一个 sysfs 例程来更改卷。

奇怪的是、我必须在放大器改变音量之前播放音频。 初始化序列将音量设置为-10dB、但放大器在0dB 时看起来会起作用。 我已验证我的音量设置实际上已存储在器件寄存器中、但它仍以0dB 的频率播放。 如果我尝试在以0dB 的频率播放声音后更改为音量、则可以正常工作。

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

    请与我分享您的音量控制代码以供进一步分析、但以下功能供您参考:

    注:卷是一个32位数据。
    静态空 tas5805m_set_volume (struct snd_soc_codec *编解码器、int vol)

    unsigned int index;
    uint32_t volume_hex;
    uint8_t 字节4;
    uint8_t 字节3;
    uint8_t 字节2;
    uint8_t 字节1;

    index = get_volume_index (vol);
    volume_hex = tas5805m_volume[index];

    字节4 =((volume_hex >> 24)和0xFF);
    字节3 =((volume_hex >> 16)和0xFF);
    字节2 =((volume_hex >> 8)和0xFF);
    字节1 =((volume_hex >> 0)和0xFF);

    //Page 0:W 58 00 00
    SND_SoC_WRITE (编解码器、TAS5805M_REG_00、TAS5805M_PAGE_00);
    //Book 8C:W 58 7f 8c
    SND_SoC_WRITE (编解码器、TAS5805M_REG_7F、TAS5805M_book_8C);
    //Page 2a:W 58 00 2a
    SND_SoC_WRITE (编解码器、TAS5805M_REG_00、TAS5805M_PAGE_2A);
    //volume_left:W 58 24 xx xx xx xx xx
    SND_SoC_WRITE (编解码器、TAS5805M_REG_24、字节4);
    SND_SoC_WRITE (编解码器、TAS5805M_REG_25、字节3);
    SND_SoC_WRITE (编解码器、TAS5805M_REG_26、字节2);
    SND_SoC_WRITE (编解码器、TAS5805M_REG_27、字节1);
    //Volume_Right:W 58 28 xx xx xx xx xx
    SND_SoC_WRITE (编解码器、TAS5805M_REG_28、字节4);
    SND_SoC_WRITE (编解码器、TAS5805M_REG_29、字节3);
    SND_SoC_WRITE (编解码器、TAS5805M_REG_2A、字节2);
    SND_SoC_WRITE (编解码器、TAS5805M_REG_2B、字节1);


    我假设如果没有播放音频、I2S 时钟将停止。 然后:
    1、对于初始化周期、当 I2C 初始化正在进行时、I2S 时钟必须开启。 更多详细信息、请参阅数据表的第43页。
    2.初始化后、上述函数应该可以设置卷。

    如果问题仍然存在、请尝试并返回给我。 但建议提供更多详细信息和代码。

    此致、
    Alix Wan。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的音量控制代码是相同的、就像我说过的、它在我播放声音后工作正常。

    我想您可能正在做一些事情。 I2S 时钟在未播放音频时停止、我们实际上不会在初始化放大器时启动它们。 我将研究如何解决这个问题。 谢谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请确保大家按照启动过程初始化 TAS5805M。 请参阅 TAS5805M 数据表的9.5.3.1。 基本上、在通过 i2c 对 TAS5805M 进行编程之前和之后、I2S 时钟(BCLK 和 LRCLK)必须稳定且运行。

    Andy