本文基于Android 4.4和4.2,检测所用codec为wm8994。
Android和Kernel下的mic检测是建立在headset检测的基础上的,具体过程如下:
1) kernel通过Jack检测脚中断检测到有耳机插入
2) 读取codec寄存器判断headset是否带mic
3) 通过InputEvent/UEvent机制通知Android上层
详情可以参看我的前一篇基于耳机插拔检测的文章。本文基于UEvent机制来实现,即 switch driver的方式。
1. mic检测原理
先看看带mic的耳机和不带mic的耳机的差别,如下图,不带mic的耳机为3段,带mic的耳机为4段,比对一下实物可以看出两者左右声道段没有差别,差别之处是不带mic的耳机将GND和MIC两段合并在一起。因而对于不带mic的耳机来说,GND和MIC两段是几乎短路的(有一定电阻),而mic检测就是基于这个原理。