V663/V669/V662耳機半插,圖標不消失問題測試
問題反饋——What:線程
1.2017.11.29號 V663 K29客戶在組裝廠組裝發現耳機存在屢次插拔後,圖標不消失的問題rest
2.2017.11.30號 V669 Z1因V663小星客戶報有插耳機圖標不消失的,因此此項目在公司內部進行的驗證,發現也有此問題three
3. 2017.11.30號 在發現V663和V669都有此耳機圖標不消失的狀況,因此對V662的項目也進行驗證,也發現有此問題get
4.後又發現v663耳機音量加功能爲減,減鍵無功能cmd
緣由——Why:it
分析方向:io
WHO (負責人)thread
何謙,薛鬆基礎
解決措施:
代碼修改部分:
(1) 在v662 mk文件中配置KST_USING_ACCDET_EINT=yes
(2) dts中加入
&accdet {
accdet-mic-vol = <7>;
headset-mode-setting = <0x500 0x200 1 0x1F0 0x800 0x800 0x20>;
accdet-plugout-debounce = <20>;
/*1:ACC mode, 2:low cost without in bias, 6:low cost with in bias*/
accdet-mic-mode = <1>;
/*0--MD_MAX--UP_MAX--DW_MAX*/
headset-three-key-threshold = <0 80 285 500>;
/*0--MD_MAX--VOICE_MAX--UP_MAX--DW_MAX*/
headset-four-key-threshold = <0 60 126 201 450>;
/* ACCDET GPIO standardization ACC mode use */
pinctrl-names = "default", "state_eint_as_int";
pinctrl-0 = <&ACCDET_pins_default>;
pinctrl-1 = <&ACCDET_pins_eint_as_int>;
status = "okay";
};
&pio {
ACCDET_pins_default: eint0default {
};
ACCDET_pins_eint_as_int: eint@0 {
pins_cmd_dat {
pins = <PINMUX_GPIO0__FUNC_ GPIO6>;
slew-rate = <0>;
bias-disable;
};
};
};
(3) 將Z:\37_n_base\v618_v662\alps\kernel-3.18\drivers\misc\mediatek\accdet\mt6735\accdet.c
中原來DCC的代碼用CONFIG_ACCDET_EINT_IRQ包起來
CONFIG_ACCDET_EINT_IRQ
pmic_register_interrupt_callback(13, accdet_eint_int_handler);
#endif
#ifdef CONFIG_ACCDET_EINT_IRQ
void accdet_eint_int_handler(void)
{
int ret = 0;
ACCDET_DEBUG("[accdet_eint_int_handler]....\n");
ret = accdet_irq_handler();
if (0 == ret)
ACCDET_DEBUG("[accdet_int_handler] don't finished\n");
}
#enfif
因爲ACCDET接地後偏置電壓被拉爲0,因此考慮不斷去打開偏置電壓,由於不知道半插拔出時機,因此要建立一盒內核線程不停的去打開MICBIAS1偏置電壓
查看mt6328芯片手冊,
0xD00寄存器的第四位爲控制MICBIAS1的寄存器
代碼修改部分以下:具體可對比Z:\37_n_base\v618_v662\update\alps\kst\drv\headset_typec_general\accdet.c
在accdet.c裏添加以下代碼
int get_interrupt_pin_status(void);
static int accdet_detect_thread(void *data)
{
do {
//printk(KERN_INFO "accdet_detect_thread: running");
//read accdet gpio to detect accdet
get_interrupt_pin_status();
msleep(1000);
}while(!kthread_should_stop() );
return 0;
}
//#endif
//add by hqian end
int get_interrupt_pin_status(void)
{
static int ret = 0;
//volatile int curstatus;
//static int prestatus = 1;
//int temp1 = 0;
int temp2 = 0;
int temp3 = 0;
temp3=pmic_pwrap_read(0x0D00);
// printk("temp3=%x\n",temp3);
//if(cable_type==HEADSET_NO_MIC)
{
//accdet_init();
//enable_accdet(ACCDET_SWCTRL_EN);
temp2=temp3|0x0010;
pmic_pwrap_write(0x0D00, temp2);
//printk("temp2=%d\n",temp2);
}
//ret=Accdet_PMIC_IMM_GetOneChannelValue(1);
return ret;
}
TPPEC的項目只需在mk裏配置KST_HEADSET_TYPEC_GENERAL=y,腳本會把update\alps\kst\drv\headset_typec_general\accdet.c拷貝到基礎代碼
防範措施: