一 耳机检测的硬件原理
headset不带mic 的耳机 headphone 带mic的耳机
1)通过类似耳机插座的中的检测引脚脚 与耳机中的GPIO 接触产生电平变化 引起GPIO中断 调用中断处理函数读取GPIO的值并判断 是否插拔
2)Android耳机插拔实现机制 inputevent uevent(默认机制)
二 android 耳机插拔检测流程
snd_soc_jack_add_pins
三 inputevent 机制
1)内核层处理
int snd_soc_jack_new() 创建jack 对象
snd_soc_jack_add_pins ()将对象加入到dapm
snd_soc_jack_add_gpios()
中断处理函数中 snd_jack_report() 发送inputevent
四 unevent 机制
1)基本术语 switch 检测开关量
switch class.c 实现switch_class 提供支持的函数供 switch_device 设备驱动使用
create_switch_class->class_create创建switch_class设备类
switch_dev_register switch_dev_unregister
state_show name_show 返回设备的名称 和状态
switch_set_state 发送uevent 通知用
gpio.c 实现switch设备
调用probe 函数完成初始化 (注册 switch_device 设备,分配中断)
2)内核层处理
/sys/devices/virtual/switch/h2w state 更新 state 值 从而通知上层耳机的状态改变