16. V663/V669/V662耳机半插,图标不消失问题
V663/V669/V662耳机半插,图标不消失问题
问题反馈——What:
1.2017.11.29号 V663 K29客户在组装厂组装发现耳机存在多次插拔后,图标不消失的问题
2.2017.11.30号 V669 Z1因V663小星客户报有插耳机图标不消失的,所以此项目在公司内部进行的验证,发现也有此问题
3. 2017.11.30号 在发现V663和V669都有此耳机图标不消失的情况,所以对V662的项目也进行验证,也发现有此问题
4.后又发现v663耳机音量加功能为减,减键无功能
原因——Why:
分析方向:
- v662 查看原理图和对应bom表,发现v622硬件上贴了ACC MODE,而软件配置了DCC,跟硬件确认,v618之后的项目硬件改成了ACC MODE
- v663 查看原理图发现耳机检测部分仅靠mic端,无中断脚,半插实际为accet脚短地,实际测量accdet脚短地后,电平一直为0,且无法自动恢复,音量加减键不正常,实测电压后发现R1123电阻多贴
WHO (负责人)
何谦,薛松
解决措施:
- v662 硬件原理配置为ACC MODE即可
代码修改部分:
(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
- v663
由于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拷贝到基础代码
防范措施:
- V663 v669 图标不消失为bug,因测试时是一体式耳机,无插拔动作,无法预知,耳机加键为减,减无功能,因客户提供耳机只有一个播放暂停键,后面建议用标准三键线控耳机测试,贴错料的,以后硬件应加强原理及bom审核
- V662建议硬件修改相关硬件原理模式,gpio口时时能给出提醒,加强与驱动沟通
浙公网安备 33010602011771号