我是靠谱客的博主 愤怒狗,最近开发中收集的这篇文章主要介绍高通平台调试Nxp Smart PA-TFA9897,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前言

新项目对speaker的输出响度和声音质量有一定的要求,所有选择了Nxp smart PA-TFA9897,其实高通平台有WSA系列的smart PA,由于后期tuning的复杂性,选择了Nxp smart PA-9897.

1.连接实现和MI2S的选择

Tfa9897提供了I2S和I2C的接口和高通平台连接实现的,但选择高通平台的MI2S是需要注意,不是任意一组MI2S都可以使用的,通过高通网站上下载你使用对应平台的参考文档。类似这样的:*_external_mi2s_interface.pdf。我们选择的是Quinary MI2S这组MI2S。

2.驱动程序的集成

驱动代码是Nxp提供的,我们只需要把他集成就可以,这个过程中你需要在DTS中的Pin-control配置I2C和MI2S功能。在DTS添加驱动信息,开机时加载驱动程序,这些步骤在这里省略,后需要会单独写关于驱动添加。如果这个过程你都添加正确了,从开机kernel log中你可以看到驱动的加载信息了。

static const struct i2c_device_id tfa98xx_i2c_id[] = {
    { "tfa98xx", 0 },
    { }
};
MODULE_DEVICE_TABLE(i2c, tfa98xx_i2c_id);

#ifdef CONFIG_OF
static struct of_device_id tfa98xx_match_tbl[] = {
    { .compatible = "nxp,tfa98xx" },
    { },
};
MODULE_DEVICE_TABLE(of, tfa98xx_match_tbl);
#endif

static struct i2c_driver tfa98xx_i2c_driver = {
    .driver = {
        .name = "tfa98xx",
        .owner = THIS_MODULE,
        .of_match_table = of_match_ptr(tfa98xx_match_tbl),
    },
    .probe =    tfa98xx_i2c_probe,
    .remove =   tfa98xx_i2c_remove,
    .id_table = tfa98xx_i2c_id,
};

3.Dailink的添加

我选择的Quinary MI2S,高通平台原生设计是给HDMI使用的。所以我是在这个基础上进行修改的。高通平台会根据声卡的名字来使用不同的Dailink配置,如果Dailink配置不正确,Audio HAL在open声卡时会报错,如果Quinary MI2S对应的Dailink配置没有被添加到声卡,驱动中的Codec注册也不会被触发调用。这些都是我在调试过程中遇到的。
写下面的Dai配置是需要注意,tfa98xx_dai 中的name和msm8952_quin_dai_link中的codec_dai_name要一样,smart PA是作为一个CODEC设备添加到声卡的,所以名字不一样,Codec驱动的probe不会被触发。

static struct snd_soc_dai_driver tfa98xx_dai = {
    .name = "nxp-tfa9897-codec-rx",
    .playback = {
             .stream_name = "Playback",
             .channels_min = 1,
             .channels_max = 2,
             .rates = TFA98XX_RATES,
             .formats = TFA98XX_FORMATS,},
    .ops = &tfa98xx_ops,
    .symmetric_rates = 1,
};
static struct snd_soc_dai_link msm8952_quin_dai_link[] = {
    {
        .name = LPASS_BE_QUIN_MI2S_RX,
        .stream_name = "Quinary MI2S Playback",
        .cpu_dai_name = "msm-dai-q6-mi2s.5",
        .platform_name = "msm-pcm-routing",
        .codec_dai_name = "nxp-tfa9897-codec-rx",
        .codec_name = "tfa98xx.2-0034",
        .no_pcm = 1,
        .dpcm_playback = 1,
        .be_id = MSM_BACKEND_DAI_QUINARY_MI2S_RX,
        .be_hw_params_fixup = msm_quin_be_hw_params_fixup,
        .ops = &msm8952_quin_mi2s_be_ops,
        .ignore_pmdown_time = 1, /* dai link has playback support */
        .ignore_suspend = 1,
    },
};

3.speaker的阻抗校准

在工厂生产时,测试分为两个阶段:1.板级测试 2.整机测试。板级测试一般是通过夹具更换不同的主板来测试的,夹具上的引线不较长,所以阻抗会比整机时要大,所以在组装成整机后,在基本功能测试时要做speaker的阻抗校准。这点是值得注意的。

最后

以上就是愤怒狗为你收集整理的高通平台调试Nxp Smart PA-TFA9897的全部内容,希望文章能够帮你解决高通平台调试Nxp Smart PA-TFA9897所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(73)

评论列表共有 0 条评论

立即
投稿
返回
顶部