高通按键驱动(gpio) + 耳机插入检测

kernel/drivers/input/keyboard/gpio_keys.c

自己添加一个按键

vir_1 {

label = "virtual_1";

gpios = <&msm_gpio 15 0x0>;

linux,input-type = <1>; //上报的类型

linux,code = <250>;  //上报的键值

gpio-key,wakeup;

debounce-interval = <15>; //防反跳间隔时间 ms

};

gpios = <&msm_gpio 15 0x0>; // 0x0为未按下按键时的状态

可以用来做耳机插入检测:

rb_handset {

label = "handset_det";

gpios = <&msm_gpio 94 0x1>;

linux,input-type = <5>;

linux,code = <2>;

gpio-key,wakeup;

debounce-interval = <50>;

};

从中高通本身的耳机检测得到的类型和键值:kernel\sound\core\jack.c

高通按键驱动(gpio) + 耳机插入检测_第1张图片

kernel\sound\soc\soc-jack.c

高通按键驱动(gpio) + 耳机插入检测_第2张图片

--------------------------------------------2019-5-22-------------------------------------------------------------------

wcd_mbhc_mech_plug_detect_irq -> wcd_mbhc_swch_irq_handler->

wcd_cancel_hs_detect_plug---取消work-- correct_plug_swch(wcd_correct_swch_plug函数)

if(current_plug)--- 判断耳塞类型

wcd_mbhc_detect_plug_type ----如果目前是没有耳塞 -> wcd_schedule_hs_detect_plug->schedule_work(work);开始correct_plug_swch -> wcd_correct_swch_plug

wcd_correct_swch_plug里面做什么事情:

连续调用4次wcd_check_cross_conn检测塞子类型,如果是MBHC_PLUG_TYPE_GND_MIC_SWAP类型

你可能感兴趣的:(高通)