使能i2c0 后,挂载在i2c1上的codec报错

本文讲述了在手表项目调试中,由于代码更改引入的nfc设备树变动导致音频问题。通过逐步排查,发现I2C0状态对I2C1及其挂载的音频设备产生影响,最终定位到aw882xx-aif命名冲突并提供了解决方案——修改代码中的固定命名。
摘要由CSDN通过智能技术生成

问题描述:

            在调试手表项目时候碰到一个问题:

           (1) 12月27号之前,audio bring up 是好的, 查看节点/proc/asound/cards , 是有注册声卡的.

           (2) 12月28号, 代码合入nfc的devicetree 改动后, 手机开机卡顿.上层充斥着因为audio device 找不到服务报错.

分析:

          因为暂时没有正面分析能力,仅由上层同事提醒卡顿原因是audio导致的,具体异常点一时没有从开机的dmesg log中识别出来.

问题定位:

           在不能正面分析问题情况,通过修改回退,和最小修改方法, 确认问题点与nfc本身节点无关,与i2c0 的status 使能enable有关.

           当i2c0 节点使能ok时候,  audio无声卡注册(查看节点/proc/asound/cards 为空);当i2c0的节点disable时候, audio 的声卡又是好的.

           因为audio是使用的i2c1的通路,与i2c0无关.

           定位发生一个错误, 在开机没有明显i2c1报错的情况下,还是判断问题大概率是i2c0使能导致i2c1工作不正常. 在查看节点d/gpio status后,

           发现i2c1的两个gpio 并没有工作在function 1的状态下.(0 : 是gpio 普通io状态;1是特殊通讯接口).

          问题反反复复在驱动强度, 上下拉属性方面. 问题一直处于未解决状态.

最终解决:

           这个之前定位虽然找到问题带来规律了,但是错误判断是i2c之间影响,并没有i2c0对i2c1上从设备的影响.

            后续确认三色灯,sensor等同样挂载在i2c1的从设备,他们都是ok的,单单就audio异常,这就说明大概率是i2c1是ok的,是i2c0 导入引起i2c1从设备异常.

后续log再分析,发现具有如下信息:

    Line 1682: [19:20:36.423]收←◆[   35.952590] bengal-asoc-snd soc:qcom,msm-audio-apr:qcom,q6core-audio:sound: ASoC: CODEC DAI aw882xx-aif-0-34 not registered

    Line 1684: [19:20:36.487]收←◆[   36.038627] bengal-asoc-snd soc:qcom,msm-audio-apr:qcom,q6core-audio:sound: ASoC: CODEC DAI aw882xx-aif-0-34 not registered

    Line 1703: [19:20:46.032]收←◆[   45.560907] bengal-asoc-snd soc:qcom,msm-audio-apr:qcom,q6core-audio:sound: ASoC: CODEC DAI aw882xx-aif-0-34 not registered

    Line 1706: [19:20:46.085]收←◆18567] bengal-asoc-snd soc:qcom,msm-audio-apr:qcom,q6core-audio:sound: ASoC: CODEC DAI aw882xx-aif-0-34 not registered

    Line 1715: [19:20:46.843]收←◆[   46.371975] bengal-asoc-snd soc:qcom,msm-audio-apr:qcom,q6core-audio:sound: ASoC: CODEC DAI aw882xx-aif-0-34 not registered

其中这个就是 声卡注册失败原因,  aw882xx-aif-0-34 这个名字是基于总线排序的,当没有i2c0时候, 这里名字因为对应i2c1是第一位,所以取0 ;当有i2c0是,这时候名字就应该是1.

又因为这个命名是代码完全写死的,所以就需要在代码中修改.

struct snd_soc_dai_link_component awinic_codecs[] = {

    {

        .of_node = NULL,

        .dai_name = "aw882xx-aif-0-34",

        .name = "aw882xx_smartpa.0-0034",

    },

};

改为:

truct snd_soc_dai_link_component awinic_codecs[] = {

    {

        .of_node = NULL,

        .dai_name = "aw882xx-aif-1-34",

        .name = "aw882xx_smartpa.1-0034",

    },

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值