《MT6582平台上调试耳机插尽后无响应问题》

日期:2015-04-10    星期五

 

一、相关说明
    1,在做耳机测试的时候发现当耳机插入一半的时候,机器就可以识别到有耳机;当耳机头完全插入机器后反而识别不到耳机。
        分析:首先,在插入耳机时机器是有产生过中断的。而在后期又不识别了,这个可能和里边的某个电平高低状态有关系。和耳机的驱动相关的代码都差不多是以accdet开头相关的,如accdet.c 、accdet_drv.c 、accdet_custom.c  等等。

二、Action
    1,我们找到 accdet.c  ,它在以下的路径:mediamek/platform/mt6582/kernel/drivers/accdet/accdet.c  。
    2,找到 accdet_eint_func(void) 这个函数,里边有一个
if(cur_eint_state == EINT_PIN_PLUG_IN)  这样的语句。这个就是查看当前的状态是否有耳机插入,这个 cur_eint_state 是一个全局变量。由于我们是能够识别到有耳机插入的(只插入一半时),所以进入这里是没问题的。在这里边之后,又出现了一个条件判断,
if(CUST_EINT_ADDDET_TYPE == CUST_EINTF_TRIGGER_HIGH)
{
    mt_eint_set_polarity(CUST_EINT_ACCDET_NUM , (1));
}
else
{
    mt_eint_set_polarity(CUST_EINT_ACCDET_NUM , (0));
}

        我们对 CUST_EINT_ADDDET_TYPE 做一次全搜索,会发现有这个:

mt_eint_registration(CUST_EINT_ACCDET_NUM,CUST_EINT_ADDDET_TYPE,accdet_eint_func,0);
        这个函数是注册中断的。中断号CUST_EINT_ACCDET_NUM  为 15,因为CUST_EINT_ADDDET_TYPE 在初始时给到的值为 Low,所以它的触发中断电平为低电平。看完整段:
        
if(cur_eint_state == EINT_PIN_PLUG_IN)
{
    ..............
}
else{
    ...............
}  
代码后,就一定要理清里边的状态逻辑,中断和耳机插入、拔出、触 发中断的电平所对应的逻辑关系。所以我们要在 cust_eint.h文件里将 
        CUST_EINT_ADDDET_TYPE =CUST_EINT_TRIGGER_LOW   修改为:
        CUST_EINT_ADDDET_TYPE =CUST_EINT_TRIGGER_HIGH
        这样问题就可以得到解决了。当然了,这个是要在dct工具里边改,eint里。

 

三、小结
    1,遇到问题的时候一定要先根据现象做定位,然后再去找它们在里边的关系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值