mt8735平台上状态栏耳机图标常显不消失的问题解决过程

  上周,拿到载着mt8735模块的开发板,开发板上配有一个7寸的显示屏,这开发板定位于平板开发板。我的工作是把mt6735的配置更新到这mt8735上,因为mt8735模块的驱动系统和mt6735基本一致,所以调试起来也比较方便。这mt8735开发板,一开机就看到上面有一些游戏,在驱动系统中找到这些游戏的安装包,删掉即可。

  回到本帖的主题--解决状态栏一直显示耳机图标的问题,如图所示:


  这么大的一个Android系统,找到状态栏显示耳机图标的相关的配置和控制程序,对于现在的我,不是那么容易的。开始认为,是电路出了问题,检测耳机的电平被改变了,因此将图中红色框里的排线(与耳机有关)拔掉,重启机器。


  重启机器之后,耳机图标还是没有消失。说明开发板上检测耳机的电路是正常的,同时暂时认为mt8735模块也是正常的。那么会不会是应用层,控制界面显示的代码出现异常,导致图标一直显示?

  返回去看与界面显示相关的Java代码,XML代码,查看系统广播是否异常。这里采用最简单的方式进行调试——更换耳机图标,更换了一个稍微大一点的耳机图标。下载程序,重新开机,耳机图标被改变,说明界面显示相关的程序正常运行(参考方法:http://www.it165.net/pro/html/201404/12621.html)。那么到底那里出了问题,实在想不到了,只能与TimKing讨论,说明情况,看看能不能得出其他结论。讨论中TimKing提到,这种情况,应用层是不会出现问题的,最可能出现问题的是底层驱动和硬件电路。以TimKing的经验,应用层按照规则执行,比较稳定,同时,经过上面的测试,也没发现界面显示异常。状态栏显示的图标是一种广播,那么顶层的状态显示需要得到底层驱动的发出来的一个标志,它才会发出这么一个广播。现在一直有广播,先查看检测耳机的电路是不是还有问题,插入耳机,检测电平没有发生改变,导致系统认为一直检测到耳机。当时只是测了开发板,没有测mt8735模块,因此,将排线接上,用万用表测量,查看电平是否发生改变!如图所示:


  第一个图是没有插耳机,电压0.123V,第二个图插上耳机,电压0.308V,同时测其他引脚,电压也相应的增加,说明是检测到耳机的。mt8735的模块也正常,硬件电路一切正常,那现在最有可能出现问题的就是驱动没有配置好。
  驱动没弄好,那么得去查看文档《Driver_All_In_One_V1》,这篇文档很实用,详细介绍了相关的驱动配置,之前没得去查看就来解决这个耳机图标的问题。在文档中查找搜索Audio,顺利的找到了关于耳机,麦克风等驱动的配置。查看文档的同时,对比mt6735的相关配置,发现mt8735没有与mt6735相同的配置,系统一直认为耳机是插入的,耳机被检测到了。

具体的驱动配置如下:
  依次进入下列文件,添加相关声明、模式的配置。前面带“+”号的,代表的是添加的内容;带“-”号的,代表的是删除的内容

 --- a/vendor/mediatek/proprietary/custom/elink8735_tb_l1/hal/audioflinger/audio/audio_custom_exp.h
+++ b/vendor/mediatek/proprietary/custom/elink8735_tb_l1/hal/audioflinger/audio/audio_custom_exp.h
@@ -106,10 +106,14 @@ typedef enum
     AUDIO_MIC_MODE_DCCECMSINGLE = 6,
 } AUDIO_MIC_MODE;
 *****************************************************/
-#define PHONE_MIC_MODE (1)   // for ACC mode
-#define HEADSET_MIC_MODE (1)
-#define HAVING_RCV_SPK_SWITCH
+//#define PHONE_MIC_MODE (1)   // for ACC mode
+//#define HEADSET_MIC_MODE (1)
+//#define HAVING_RCV_SPK_SWITCH
 #define USING_EXTAMP_HP

+#define PHONE_MIC_MODE (5)
+#define HEADSET_MIC_MODE (6)
+#define MAIN_REF_MIC_INVERSE 1
+
 #endif
 --- a/device/elink/elink8735_tb_l1/ProjectConfig.mk
+++ b/device/elink/elink8735_tb_l1/ProjectConfig.mk
@@ -1,8 +1,8 @@
 ALWAYSON_DFOSET = no
-AUTO_ADD_GLOBAL_DEFINE_BY_NAME = MTK_VT3G324M_SUPPORT MTK_HETCOMM_SUPPORT MTK_AUDIO_TUNNELING_SUPPORT CUSTOM_KERNEL_HEART_RATE_SENSOR CUSTOM_KERNEL_SENSORHU
+AUTO_ADD_GLOBAL_DEFINE_BY_NAME = MTK_VT3G324M_SUPPORT MTK_HETCOMM_SUPPORT MTK_AUDIO_TUNNELING_SUPPORT CUSTOM_KERNEL_HEART_RATE_SENSOR CUSTOM_KERNEL_SENSORHU
@@ -287,7 +287,7 @@ MTK_DRM_PLAYREADY_SUPPORT = no
 MTK_DSPIRDBG = no
 MTK_DTAG_DUAL_APN_SUPPORT = no
 MTK_DT_SUPPORT = no
-MTK_DUAL_MIC_SUPPORT = no
+MTK_DUAL_MIC_SUPPORT = yes
 MTK_DVFS_DISABLE_LOW_VOLTAGE_SUPPORT = no
 MTK_DX_HDCP_SUPPORT = no
 MTK_EAP_SIM_AKA = yes
@@ -405,7 +405,7 @@ MTK_IME_TURKISH_SUPPORT = no
 MTK_IME_VIETNAM_SUPPORT = no
 MTK_IMS_SUPPORT = no
 MTK_INCALL_HANDSFREE_DMNR = no
-MTK_INCALL_NORMAL_DMNR = no
+MTK_INCALL_NORMAL_DMNR = yes
 MTK_INCLUDE_MODEM_DB_IN_IMAGE = yes
 MTK_INPUTMETHOD_COOTEKIME_TOUCHPAL = yes
 MTK_INPUTMETHOD_PINYINIME_APP = no
--- a/kernel-3.10/drivers/misc/mediatek/mach/mt6735/elink8735_tb_l1/accdet/accdet_custom_def.h
+++ b/kernel-3.10/drivers/misc/mediatek/mach/mt6735/elink8735_tb_l1/accdet/accdet_custom_def.h
@@ -5,7 +5,7 @@ typedef enum
        ACCDET_MIC_MODE_LOW_COST_WITHOUT_IN_BIAS = 2,
        ACCDET_MIC_MODE_LOW_COST_WITH_IN_BIAS = 6,
 } ACCDET_MIC_MODE;
-#define ACCDET_MIC_MODE        (1)
+#define ACCDET_MIC_MODE        (6)

 // use accdet + EINT solution
 #define ACCDET_EINT
@@ -25,5 +25,5 @@ typedef enum
 #define ACCDET_SHORT_PLUGOUT_DEBOUNCE_CN 20
 //#define FOUR_KEY_HEADSET

-#define ACCDET_TS3A225E_PIN_SWAP
+//#define ACCDET_TS3A225E_PIN_SWAP

  配置完成之后,重新编译系统,下载到mt8735开发上,启动机器,耳机图标消失,插上耳机,耳机图标显示,如图所示:


总结:

  拿到一个新的板子或者代码,第一件事的确需要对照原理图把gpio全部配置一遍,再结合驱动文档(driver all in one)检查一遍。

猜你喜欢

转载自blog.csdn.net/m0_37526672/article/details/80318532
今日推荐