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.

[参考译文] TLV320AIC3254-Q1:TLV320AIC3254-Q1启动问题

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1348902/tlv320aic3254-q1-tlv320aic3254-q1-bringup-issue

器件型号:TLV320AIC3254-Q1
主题中讨论的其他器件: TLV320AIC3254

大家好、

我们在 Qualcomm SA525M 平台上使用 TI TLV320AIC3254-Q1

驱动程序似乎启动了

使用第三个 MI2S

但在播放声音时、会出现这样的日志、

请帮助我们进行此日志检查,非常感谢。

[ 480.977977973][T1486] aic3x_hw_params (): 无法设置 PLL

[ 480.984100][ T1486] tlv320aic3x 2-0018:aSOC:tlv320aic3x-hifi 上的 snd_soc_dai_hw_params 出错:-22

[ 480.994214][T1486] MI2S-ASOC LPAIF-RX-TERTIARY:SoC_PCM_HW_params ()出现故障(-22)

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

    您好,应用团队:   

      我是否可以知道是否有问题的任何更新?  

    谢谢!  

    罗伊

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

    您好、Lee、

    TLV320AIC3254-Q1内核中有更合适的驱动程序、您当前使用的驱动程序可能不支持该器件、请替换以下驱动程序并重试:

    https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/sound/soc /编解码器

    谢谢

    凯文

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

    尊敬的 

    该补丁适用于新内核版本

    我们在 QC sa525m 平台下使用 Yocto 系统的内核5.15

    此补丁使用 i2c_get_match_data、但它被添加 在内核6.5之后

    https://elixir.bootlin.com/linux/v6.5/source/include/linux/i2c.h#L370

    TTP://elixir.bootlin.com/linux/v6.4/source/include/linux/i2c.h #L367

    我更改了为使用 tlv320aic32x4驱动程序、  

      dtsi 的时钟名称和时钟是否 需要配置?

    因为我们使用从模式、所以我删除了 时钟名称、 时钟以及关系代码。

    到目前为止、器件无法探测通过。

    该命令在 regmap_WRITE( regmap, AIC32X4_RESET, 0x01 )失败;

    你还有其他评论吗?

    非常感谢

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

    尊敬的 

    我可以通过标记某些错误代码来探测通过一些错误日志。

    请检查错误日志

    非常感谢

    e2e.ti.com/.../0425_5F00_tlv320aic32x4_5F00_log.txt

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

    尊敬的 

    您能否提供 Linux 平台下探测器通道的 UART 日志?

    非常感谢  

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

    Daniel、您好!

    实际上、我们内核5.15在其路径中有相同的驱动程序、我们无需修改即可使用

    https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/sound/soc /编解码器?h=v5.15.156

    请进行编译

    谢谢

    凯文

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

    尊敬的 

    感谢您的信息。

    还有一个问题、您能否提供基准 DTCI 配置?

    是否需要这两个节点?

     // Clocks =<&CLKS 201>;
    //时钟名称="MCLK";

    我们使用 BLCK 而不是 MLCK、这意味着我可以标记这两个配置。

    如果我对其进行标记、则探测器将失败、

    REt = aic32x4_pars_dt (aic32x4、np);对于 aic32x4_probe

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    if (pdata) {
    dev_err(dev, "111\n");
    aic32x4->power_cfg = pdata->power_cfg;
    aic32x4->swapdacs = pdata->swapdacs;
    aic32x4->micpga_routing = pdata->micpga_routing;
    aic32x4->rstn_gpio = pdata->rstn_gpio;
    aic32x4->mclk_name = "mclk";
    } else if (np) {
    dev_err(dev, "222\n");
    ret = aic32x4_parse_dt(aic32x4, np);
    if (ret) {
    dev_err(dev, "Failed to parse DT node\n");
    return ret;
    }
    } else {
    dev_err(dev, "333\n");
    aic32x4->power_cfg = 0;
    aic32x4->swapdacs = false;
    aic32x4->micpga_routing = 0;
    aic32x4->rstn_gpio = -1;
    aic32x4->mclk_name = "mclk";
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    您是否已通过此  TLV320AIC3254的日志?

    非常感谢

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

    尊敬的 

    我已经修复了"regmap_WRITE"问题。

    但是、我将错误日志

    启动阶段:

    [ 25.573066][T1419] tlv320aic32x4 6-0018:ASOC:无法添加 MI2S 模式:-16

    播放阶段:

    [ 161.077215][T1558] tlv320aic32x4 6-0018:无法设置时钟来支持采样率。
    [ 324.725601][ T1558] tlv320aic32x4 6-0018:无法设置时钟来支持采样率。

    您对这两个错误有什么看法吗?

    您也可以通过查看完整的日志、

    非常感谢

    e2e.ti.com/.../0426_5F00_tlv320aic32x4_5F00_log_5F00_3.txt

    我添加了更多日志、发现 fmt 为0而不是1 (SND_SOC_DAIFMT_I2S)
    [ 76.306491][ T1565] tlv320aic32x4 2-0018:aic32x4->fmt (0x0)
    [ 76.313054][T1565] tlv320aic32x4 2-0018:无法设置时钟来支持采样率。

    是这样吗?
    e2e.ti.com/.../0427_5F00_tlv320aic32x4_5F00_regmap_5F00_pass_5F00_log3.txt

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

    Daniel、您好!

    您不需要删除这两行、驱动程序默认使用 MCLK、如果您删除它、则探测过程将失败。

    我建议您在 tlv320aic32x4-clk.c 中做一些小的更改、如下所示:

    静态 int clk_aic32x4_PLL_set_parent (struct clk_HW *HWu8索引)
    {
        结构 clk_aic32x4 * pll = TO_clk_aic32x4 (HW);
         
        index = 1;/*将 PLL 父级设置为 BLCK*/
        返回 regmap_update_bits (PLL->regmap
                    AIC32X4_CLKMUX
                    AIC32X4_PLL_CLKIN_MASK、
                    索引<< AIC32X4_PLL_CLKIN_SHIFT);
    请让我知道它是否起作用。
    谢谢
    丹尼尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Kevin

    删除它、则探测过程将失败。

    =>是的、因为我们没有使用 MLCK 作为默认值、所以我标记了这个链接。

    我添加以下更改以修复构建错误

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    static int aic32x4_parse_dt(struct aic32x4_priv *aic32x4,
    struct device_node *np)
    {
    struct aic32x4_setup_data *aic32x4_setup;
    // int ret;
    aic32x4_setup = devm_kzalloc(aic32x4->dev, sizeof(*aic32x4_setup),
    GFP_KERNEL);
    if (!aic32x4_setup)
    return -ENOMEM;
    // ret = of_property_match_string(np, "clock-names", "mclk");
    // if (ret < 0)
    // return -EINVAL;
    aic32x4->mclk_name = "mclk";//of_clk_get_parent_name(np, ret);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    目前为止、我遇到了以下两个错误

    启动:

    [ 25.365491][ T1401] tlv320aic32x4 2-0018:ASOC:无法添加 MI2S 模式:-16

    回放

    [ 76.306491][ T1565] tlv320aic32x4 2-0018:aic32x4->fmt (0x0)
    [ 76.313054][T1565] tlv320aic32x4 2-0018:无法设置时钟来支持采样率。


    fmt 是否会导致此错误?

    非常感谢

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

    如果您注释这些行, devm_clk_bulk_get ()将失败,因此无法删除它,I2S 的格式是什么?

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

    尊敬的 Kevin:  

    但是、我们的器件没有真正连接到主机的 MCLK。

    没有要添加它的配置。

    只需添加以下内容?

     时钟=<&CLKS 201>;
     时钟名称="MCLK";

    另一件事,我没有失败在  devm_clk_bulk_get ()

    调用流未返回失败

    Fullscreen
    1
    2
    3
    ret = devm_clk_bulk_get(component->dev, ARRAY_SIZE(clocks), clocks);
    if (ret)
    return ret;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    I2S 的格式是什么

    =>您是指 PCM 吗?

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

    尊敬的 Kevin

    另一个问题

    我发现错误是"无法设置时钟来支持采样率。"

    但是、fmt 在 0427_tlv320aic32x4_regmap_pass_log3.txt 日志中为0

    aic32x4的 SND_SoC_DAI_ops 如下所示:

    静态常量结构 snd_soc_dai_ops aic32x4_ops ={

    .hw_params = aic32x4_hw_params、

    .mute_stream = aic32x4_mute、

    .set_fmt = aic32x4_SET_DAI_fmt

    .SET_SYSCLK = aic32x4_SET_DAI_SYSCLK、

    .no_capture_mute = 1、

    };

     

    但我没有看到任何有关.set_fmt = aic32x4_set_di_fmt 的函数、

    你对这一点有什么评论吗?

    非常感谢

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

    尊敬的 Kevin

    您是否有关于"无法设置时钟以支持采样率"的任何更新?

    非常感谢

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

    尊敬的 Kevin:  

     aic32x4_setup_Clocks()具有什么任务?

    为什么环路中的环路会出现这种情况?

    非常感谢

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    for (nadc = max_nadc; nadc > 0; --nadc) {
    adc_clock_rate = nadc * madc * aosr * sample_rate;
    dev_err(component->dev, "adc_clock_rate(%d x %d x %d)(%d)\n", ndac, mdac, dosr, adc_clock_rate);
    for (dosr = max_dosr; dosr >= min_dosr;
    dosr -= dosr_increment) {
    min_mdac = DIV_ROUND_UP((32 * dac_resource_class), dosr);
    max_ndac = AIC32X4_MAX_CODEC_CLKIN_FREQ /
    (min_mdac * dosr * sample_rate);
    for (mdac = min_mdac; mdac <= 128; ++mdac) {
    for (ndac = max_ndac; ndac > 0; --ndac) {
    dac_clock_rate = ndac * mdac * dosr *
    sample_rate;
    if (dac_clock_rate == adc_clock_rate) {
    dev_err(component->dev, " dac_clock_rate(%d x %d x %d)(%d)\n", ndac, mdac, dosr, dac_clock_rate);
    if (clk_round_rate(clocks[0].clk, dac_clock_rate) == 0)
    continue;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    尊敬的 Kevin

    我更新日志以了解更多信息  

    e2e.ti.com/.../0501_5F00_log_5F00_4.txt

    e2e.ti.com/.../0385.tlv320aic32x4.c

    以下日志正确吗?

    谢谢!

     [ 160.23334][ T1635] tlv320aic32x4 2-0018:aic32x4_SET_DAI_FMT:FMT (0x1001)
    [ 160.249863][ T1635] tlv320aic32x4 2-0018:aic32x4_SET_DAI_SYSCLK:clk_id (1)、freq (1536000)
    [ 160.258958][ T1635] tlv320aic32x4 2-0018:aic32x4_HW_params:
    [ 160.265416][ T1635] tlv320aic32x4 2-0018:aic32x4_setup_Clocks sample_rate (48000)、通道(2)、位深度(16)
    [160.276144][T1635] tlv320aic32x4 2-0018:时钟[0~5].clk (123533,184,123535104,123531648,123532672,123534848,113750016)535,104,123)</s>531,648,123 532,672,123534,848,113
    [ 160.290270][ T1635] tlv320aic32x4 2-0018:aic32x4->fmt (0x1001)

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

    尊敬的 Kevin

    我改回使用 MLCK 并检查 MLCK/BLCK/WLCK 的波形

    有  

    MCLK:12MHz

    BCLK:1.5 MHz

    WCLK:48kHz

    我添加了一些日志作为附件源代码

    e2e.ti.com/.../1462.tlv320aic32x4.ce2e.ti.com/.../tlv320aic32x4_2D00_clk.c

    请检查以下日志是否正确

    e2e.ti.com/.../0503_5F00_log_5F00_3_5F00_mclk.txt

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    [ 97.869662][ T1631] tlv320aic32x4 2-0018: aic32x4_set_dai_fmt: fmt(0x1001)
    [ 97.884755][ T1631] tlv320aic32x4 2-0018: aic32x4_set_dai_sysclk:clk_id(0), freq(12288000)
    [ 97.893756][ T1631] tlv320aic32x4 2-0018: aic32x4_hw_params:
    [ 97.900118][ T1631] tlv320aic32x4 2-0018: aic32x4_setup_clocks sample_rate(48000), channels(2), bit_depth(16)
    [ 97.911174][ T1631] tlv320aic32x4 2-0018: clocks[0~5].clk(63480832,63483520,81642880,81642368,81643520,81641856)
    [ 97.923970][ T1631] tlv320aic32x4 2-0018: aic32x4->fmt(0x1001)
    [ 97.930426][ T1631] tlv320aic32x4 2-0018: aosr(128), adc_resource_class(6), dac_resource_class(8), dosr_increment(8)
    [ 97.942532][ T1631] tlv320aic32x4 2-0018: madc(2), max_dosr(128), min_dosr(56), max_nadc(8)
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     PARNTER_RATE 含义是什么? 即 205273320

    非常感谢

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

    尊敬的 Kevin:  

    请帮助检查这些评论并尽快答复。

    非常感谢

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

    Daniel、您好!

    对于 PLL 计算、您可以将 PLL 设置与 GUI 设置进行比较。 PUREPATHSTDIO 可用于 PLL 计算。

    https://www.ti.com/tool/AICPUREPATH_STUDIO

     PARTNER_RATE 是 PLL_CLKIN 的速率、取决于您选择的 PLL 源。

    从日志中、我认为 PLL 设置不正确、如果您将时钟源更改为 MCLK、则请检查您的 dtsi、您是否设置了正确的 MCLK 频率?

    谢谢

    凯文

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

    尊敬的 Kevin:  

    我将 MLCK 设置为 12288000、您也可以检查波形。
    日志有什么问题吗?

    为什么无法找到时钟设置?
    您是指"PLL 设置不正确"?

    "请检查您的 dtsi、 您是否设置了正确的 MCLK 频率?"

    =>您是指哪个 dtsi 节点? 您是指 tlv320aic3254的节点吗?

    是否需要让 TLV320AIC3254知道"12288000"?
    我曾致电 aic32x4_SET_DAI_SYSCLK ()以通知 TLV320AIC3254

    非常感谢

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

    Daniel、您好!

    Fmt (0x1001)表示主模式和 I2S 模式、 在主模式下、BCLK 和 WCLK 通过编解码器输出、  

    如果一切正常、那么输出 BCLK 和 WCLK 为1.536Mhz 和48kHz。  

    从经常被阻止的日志中、您能否在此函数中添加更多日志进行检查?

    凯文

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

     parent_rate 不正确、我不知道值为什么为205273320、这会导致初始化失败

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

    尊敬的 Kevin

    "Fmt (0x1001)表示主模式和 I2S 模式、  在主模式下、BCLK 和 WCLK 通过编解码器输出"

    这是否意味着编解码器 是主模式、SOC 是从模式?

    我想将 SOC 设置为主模式、将编解码器设置为从模式、因为 SOC 配置为主模式。

    我将尝试配置为 SND_SOC_DAIFMT_CBS_CFS、并让您知道结果

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

    "这是否意味着编解码器 是主模式、SOC 是从模式?"

    --是

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

     parent_rate 应该是多少?

    谢谢!  

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

    尊敬的 Kevin

    请检查新的日志和源代码

    我添加一些日志

    e2e.ti.com/.../0507_5F00_log_5F00_2_5F00_mclk.txte2e.ti.com/.../0654.tlv320aic32x4_2D00_clk.c

     parent_rate 始终为0。

    (205273320应为上一图像中的地址非值)

    CLK_aic32x4_PLL_calc_muldiv 将返回-1

    我发现父级也在初始时为0

    Fullscreen
    1
    [ 6.785024][ T41] tlv320aic32x4 2-0018: clk_aic32x4_pll_recalc_rate, parent_rate(0)
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    谁需要配置 PARTNER_RATE ?

    非常感谢

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

    尊敬的 Kevin

    "parent_rate"是什么意思? MLCK 或其他?

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

    Daniel、您好!

    实际上、我不确定如何配置  parent_rate、因为这个驱动程序不是由我设计的、我仍在检查它。

    在那之前、我会建议您确认 dtsi 配置、  

    这里是一个参考 DTS、您可以将其与您的

    e2e.ti.com/.../udrc_2D00_overlay.dts

    谢谢

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

    尊敬的 Kevin:  

    我发现日志没有调用函数 clk_aic32x4_pll_set_parent()

    可能是问题吗?

    父级是否意味着 mlck 时钟?

    驱动器从何处获得它、是如何获得它的?

    非常感谢

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

    Daniel、您好!

    是的,这是正确的,驱动程序没有调用 clk_set_parent()来设置 PLL 父速率。 我们注意到驱动程序 MCLK 是12.288Mhz、但我们没有将其设置为 PLL 的父频率

    也许我们可以做一些实验,修改 aic32x4_SET_DAI_SYSCLK ()的函数,在第611行~ 616行之间添加以下内容,  

    你怎么看待这种方式? 可以试试吗?

    谢谢

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

    尊敬的 Kevin

    您能否提供补丁文件?

    非常感谢

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

    Daniel、您好!

    我只是根据您的代码对其进行修改、这不是最终修改、因此我无法生成补丁

    谢谢

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

    尊敬的 Kevin

    该序列是否与该部分正确有关、

    Fullscreen
    1
    2
    3
    4
    5
    mclk = clk_get_parent(pll);
    ...
    clk_set_parent(clocks[0].clk, mclk);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    抱歉、出现了错误、好的、现在我明白了、  

    CLK_aic32x4_PLL_SET_RATE ()根本不能调用,我们应该先调用它, 如果 clk_SET_RATE ()有效,那么 clk_aic32x4_PLL_SET_RATE ()应该调用,但从日志来看,它没有,请尝试 clk_SET_RATE (ppll,  freq );谢谢!
    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    static int aic32x4_set_dai_sysclk(struct snd_soc_dai *codec_dai,
    int clk_id, unsigned int freq, int dir)
    {
    struct snd_soc_component *component = codec_dai->component;
    struct clk *mclk;
    struct clk *pll;
    dev_err(component->dev, "%s:clk_id(%d), freq(%d)\n", __FUNCTION__, clk_id, freq);
    pll = devm_clk_get(component->dev, "pll");
    if (IS_ERR(pll))
    return PTR_ERR(pll);
    mclk = clk_get_parent(pll);
    /* for debug */
    return clk_set_rate(pll, freq);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Kevin:  

    即使做了该更改、结果仍然失败、

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    static int aic32x4_set_dai_sysclk(struct snd_soc_dai *codec_dai,
    int clk_id, unsigned int freq, int dir)
    {
    struct snd_soc_component *component = codec_dai->component;
    struct clk *mclk;
    struct clk *pll;
    int ret;
    dev_err(component->dev, "%s:clk_id(%d), freq(%d)\n", __FUNCTION__, clk_id, freq);
    pll = devm_clk_get(component->dev, "pll");
    if (IS_ERR(pll)){
    dev_err(component->dev, "%s:IS_ERR(pll)(%d)\n", __FUNCTION__, IS_ERR(pll));
    return PTR_ERR(pll);
    }
    mclk = clk_get_parent(pll);
    //ret=clk_set_rate(mclk, freq);
    /* for debug */
    ret=clk_set_rate(pll, freq);
    dev_err(component->dev, "%s:clk_set_rate(pll, %d) ret(%d)\n", __FUNCTION__, freq, ret);
    return ret;//clk_set_rate(mclk, freq);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    e2e.ti.com/.../0508_5F00_log_5F00_1_5F00_mclk.txt

    Fullscreen
    1
    2
    3
    4
    [ 457.829407][ T1601] tlv320aic32x4 2-0018: aic32x4_set_dai_sysclk:clk_id(0), freq(12288000)
    [ 457.839180][ T1601] tlv320aic32x4 2-0018: clk_aic32x4_pll_round_rate, rate(12288000), parent_rate(0)
    [ 457.849210][ T1601] tlv320aic32x4 2-0018: clk_aic32x4_pll_round_rate, clk_aic32x4_pll_calc_muldiv err ret(-1)
    [ 457.859845][ T1601] tlv320aic32x4 2-0018: aic32x4_set_dai_sysclk:clk_set_rate(pll, 12288000) ret(0)
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     clk_aic32x4_pll_calc_muldiv ()有什么作用。

    我始终返回-1失败

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

    clk_aic32x4_pll_calc_muldiv ()是 PLL 计算的一部分、必须进行处理、

    如果尝试仍然失败,我认为  devm_clk_get ()没有返回 PLL 的正确结构指针,因为 clk_get_parent (pll)和 clk_set_rate (ppll, freq)都不工作。  

    我想我们应该使用 devm_clk_bulk_get (),这里是

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    static int aic32x4_set_dai_sysclk(struct snd_soc_dai *codec_dai,
    int clk_id, unsigned int freq, int dir)
    {
    struct snd_soc_component *component = codec_dai->component;
    struct clk *pll;
    int ret = -1;
    dev_err(component->dev, "%s:clk_id(%d), freq(%d)\n", __FUNCTION__, clk_id, freq);
    static struct clk_bulk_data clocks[] = {
    { .id = "pll" },
    };
    ret = devm_clk_bulk_get(component->dev, ARRAY_SIZE(clocks), clocks);
    if (ret)
    return ret;
    pll = clocks[0].clk;
    return clk_set_rate(pll, freq);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

     

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

    尊敬的 Kevin

    请检查日志、仍然失败

    e2e.ti.com/.../0508_5F00_log_5F00_2_5F00_mclk.txt

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    static int aic32x4_set_dai_sysclk(struct snd_soc_dai *codec_dai,
    int clk_id, unsigned int freq, int dir)
    {
    struct snd_soc_component *component = codec_dai->component;
    //struct clk *mclk;
    struct clk *pll;
    static struct clk_bulk_data clocks[] = {
    { .id = "pll" },
    };
    int ret = -1;
    dev_err(component->dev, "%s:clk_id(%d), freq(%d)\n", __FUNCTION__, clk_id, freq);
    #if 0
    pll = devm_clk_get(component->dev, "pll");
    if (IS_ERR(pll)){
    dev_err(component->dev, "%s:IS_ERR(pll)(%d)\n", __FUNCTION__, IS_ERR(pll));
    return PTR_ERR(pll);
    }
    mclk = clk_get_parent(pll);
    #else
    dev_err(component->dev, "%s:devm_clk_bulk_get \n", __FUNCTION__);
    ret = devm_clk_bulk_get(component->dev, ARRAY_SIZE(clocks), clocks);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    零件日志

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [ 150.949678][ T1521] tlv320aic32x4 2-0018: aic32x4_set_dai_fmt: fmt(0x4001)
    [ 150.963357][ T1521] tlv320aic32x4 2-0018: aic32x4_set_dai_sysclk:clk_id(0), freq(12288000)
    [ 150.971919][ T1521] tlv320aic32x4 2-0018: aic32x4_set_dai_sysclk:devm_clk_bulk_get
    [ 150.981982][ T1521] tlv320aic32x4 2-0018: clk_aic32x4_pll_round_rate, rate(12288000), parent_rate(0)
    [ 150.991958][ T1521] tlv320aic32x4 2-0018: clk_aic32x4_pll_round_rate, clk_aic32x4_pll_calc_muldiv err ret(-1)
    [ 151.002610][ T1521] tlv320aic32x4 2-0018: aic32x4_set_dai_sysclk:clk_set_rate(pll, 12288000) ret(0)
    [ 151.012655][ T1521] tlv320aic32x4 2-0018: aic32x4_hw_params:
    [ 151.018912][ T1521] tlv320aic32x4 2-0018: aic32x4_setup_clocks sample_rate(48000), channels(2), bit_depth(16)
    [ 151.029468][ T1521] tlv320aic32x4 2-0018: clocks[0~5].clk(925117184,925116672,789276288,97731968,931314688,931312896)
    [ 151.046687][ T1521] tlv320aic32x4 2-0018: aic32x4->fmt(0x4001)
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    目标是使 clock[0~5].clk(925117184...)成为 12288000吗?

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

    "目标是否使 Clocks[0 ~5].clk(925117184...)变成 12288000?" ——仅适用于 PLL parent_rate

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    static int aic32x4_set_dai_sysclk(struct snd_soc_dai *codec_dai,
    int clk_id, unsigned int freq, int dir)
    {
    struct snd_soc_component *component = codec_dai->component;
    struct clk *pll;
    int ret = -1;
    dev_err(component->dev, "%s:clk_id(%d), freq(%d)\n", __FUNCTION__, clk_id, freq);
    static struct clk_bulk_data clocks[] = {
    { .id = "pll" },
    };
    ret = devm_clk_bulk_get(component->dev, ARRAY_SIZE(clocks), clocks);
    if (ret)
    return ret;
    pll = clocks[0].clk;
    pll->core->parent->rate = freq;
    pll->core->new_parent->rate = freq;
    return clk_set_rate(pll, freq);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    如何强制设置 parent_rate 为12288000?  

    谢谢

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

    尊敬的 Kevin

    我有一个问题、驱动程序在哪里获取 mlck 时钟?

    我没有看到任何像 clk_get ()这样的函数  

    非常感谢

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

    构建错误

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /home/fihtdc/Workspace1/Daniel/RTCU/SA525M_apps/apps_proc/src/kernel-5.15/kernel_platform/msm-kernel/sound/soc/codecs/tlv320aic32x4.c:626:5: error: incomplete definition of type 'struct clk'
    pll->core->parent->rate = freq;
    ~~~^
    /home/fihtdc/Workspace1/Daniel/RTCU/SA525M_apps/apps_proc/src/kernel-5.15/kernel_platform/msm-kernel/include/linux/clk.h:17:8: note: forward declaration of 'struct clk'
    struct clk;
    ^
    /home/fihtdc/Workspace1/Daniel/RTCU/SA525M_apps/apps_proc/src/kernel-5.15/kernel_platform/msm-kernel/sound/soc/codecs/tlv320aic32x4.c:627:5: error: incomplete definition of type 'struct clk'
    pll->core->new_parent->rate = freq;
    ~~~^
    /home/fihtdc/Workspace1/Daniel/RTCU/SA525M_apps/apps_proc/src/kernel-5.15/kernel_platform/msm-kernel/include/linux/clk.h:17:8: note: forward declaration of 'struct clk'
    struct clk;
    ^
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    尊敬的 Kevin

    我强制  在 aic32x4_setup_Clocks()上设置12288000。

    e2e.ti.com/.../4846.tlv320aic32x4.c

    没有其他错误日志。

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [ 53.162581][ T1924] tlv320aic32x4 2-0018: aic32x4_set_dai_fmt: fmt(0x4001)
    [ 53.178360][ T1924] tlv320aic32x4 2-0018: aic32x4_set_dai_sysclk:clk_id(0), freq(12288000), dir(1)
    [ 53.187671][ T1924] tlv320aic32x4 2-0018: aic32x4_set_dai_sysclk:devm_clk_bulk_get
    [ 53.195633][ T1924] tlv320aic32x4 2-0018: clk_aic32x4_pll_round_rate, rate(12288000), parent_rate(12288000)
    [ 53.205726][ T1924] tlv320aic32x4 2-0018: clk_aic32x4_pll_round_rate, rate(12288000), calc_rate(12288000)
    [ 53.215650][ T1924] tlv320aic32x4 2-0018: clk_aic32x4_pll_round_rate, rate(12288000), parent_rate(12288000)
    [ 53.225716][ T1924] tlv320aic32x4 2-0018: clk_aic32x4_pll_round_rate, rate(12288000), calc_rate(12288000)
    [ 53.241055][ T1924] tlv320aic32x4 2-0018: clk_aic32x4_pll_set_rate, rate(12288000), parent_rate(0)
    [ 53.250390][ T1924] tlv320aic32x4 2-0018: clk_aic32x4_pll_recalc_rate, parent_rate(0)
    [ 53.264877][ T1924] tlv320aic32x4 2-0018: clk_aic32x4_pll_recalc_rate, clk_aic32x4_pll_calc_rate ret(0)
    [ 53.295146][ T1924] tlv320aic32x4 2-0018: aic32x4_set_dai_sysclk:clk_set_rate(pll, 12288000) ret(0)
    [ 53.305355][ T1924] tlv320aic32x4 2-0018: aic32x4_hw_params:
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    但是、声音也无法输出。

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

    Daniel、您好!

    好的、如果您强制设置 PARTNER_RATE 而不出现错误、那么您能否检查您是否可以获得正确的 BCLK 和 WCLK? 我们还需要 regdump 来检查配置。(使用 i2cdump 命令)

    不过、我认为这不应该是最终解决方案、这个驱动器应该能够支持从模式、但它看起来不像目前支持的那样、我们应该使用 BCLK 作为 PLL 输入源、不需要添加 MCLK、我与其他一些驱动器进行了检查。 并在 aic32x4_SET_DAI_SYSCLK ()中进行了一些修改, 您能否恢复更改并使用以下代码? 让我们看看会发生什么情况

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    static int aic32x4_set_dai_sysclk(struct snd_soc_dai *codec_dai,
    int clk_id, unsigned int freq, int dir)
    {
    struct snd_soc_component *component = codec_dai->component;
    struct aic32x4_priv *aic32x4 = snd_soc_component_get_drvdata(component);
    struct clk *pll;
    int ret = -1;
    dev_err(component->dev, "%s:clk_id(%d), freq(%d)\n", __FUNCTION__, clk_id, freq);
    static struct clk_bulk_data clocks[] = {
    { .id = "mclk" },
    { .id = "bclk" },
    { .id = "pll" }
    };
    ret = devm_clk_bulk_get(component->dev, ARRAY_SIZE(clocks), clocks);
    if (ret)
    return ret;
    if (aic32x4->fmt & SND_SOC_DAIFMT_MASTER_MASK == SND_SOC_DAIFMT_CBS_CFS) { //slave mode
    clk_set_rate(clocks[1].clk, 32*48000);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    谢谢

    凯文

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

    尊敬的 Kevin

    请提供所需的寄存器。

    请告诉我  i2cdump 命令、

    非常感谢

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

    i2cdump 命令:

    #i2cdump - FY 2 0x18

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

    在"播放"下、请检查它、

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    # i2cdump -fy 2 0x18
    No size specified (using byte-data access)
    WARNING! This program can confuse your I2C bus, cause data loss and worse!
    I will probe file /dev/i2c-2, address 0x18, mode byte
    Continue? [Y/n] y
    0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
    00: 00 00 60 00 03 11 04 00 00 00 00 00 00 00 80 02 ..`.???.......??
    10: 00 08 00 00 80 01 00 04 00 00 01 00 00 01 00 00 .?..??.?..?..?..
    20: 00 00 00 00 44 00 00 00 00 00 00 00 00 00 00 00 ....D...........
    30: 00 00 00 00 08 12 03 02 04 00 00 00 01 01 00 14 ....?????...??.?
    40: 00 00 00 00 6f 38 00 00 00 00 00 ee 10 d8 7e e3 ....o8.....???~?
    50: 00 00 88 00 00 00 00 00 7f 00 00 00 00 00 00 00 ..?.....?.......
    60: 7f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?...............
    70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    尊敬的 Kevin

    "此驱动程序应能够支持从模式、但看起来目前不受支持"、这意味着什么?
    另一个驱动程序是否适用于 Linux? 它可以正常工作吗?
    非常感谢

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

    无需其他 AIC3254驱动程序。

    我的意思是,当前的驱动程序可能有一些问题,在 salve 模式下无法使用,所以我想在  aic32x4_set_dai_SYSCLK()中进行一些更改,要修复它,您能帮助尝试一下吗?

    谢谢

    凯文

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

    从 i2cdump 开始、DAC 通道不会加电... 可能需要配置路径。

    您能否通过电子邮件向我发送日志、我的电子邮件地址是 kevin-lu@ti.com、 我们可以加快调试过程

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

    应用补丁后出现错误

     关于您的评论

    "然而、我认为这不应该是最终解决方案、这个驱动器应该能够支持从模式、但它看起来不像目前支持的那样、我们应该使用 BCLK 作为 PLL 输入源、无需添加 MCLK"

     

    您是说 IC 在从模式下不需要 MCLK 吗?

    因此、我们可以忽略 MCLK 配置、对吧?

    非常感谢

    e2e.ti.com/.../0509_5F00_log_5F00_2_5F00_mclk_5F00_failed.txt

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

    尊敬的 Kevin  

    IC 驱动程序是否支持主模式 AD 默认设置?

1 2
x 出现错误。请重试或与管理员联系。