上周,拿到载着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)检查一遍。