一、常用调试方法:
1. adb
DCC模式:查看中断计数
magc6737t_65_n:/ $ cat /proc/interrupts | grep "pmic"
494: 6 mt-eint 206 pmic-eint
magc6737t_65_n:/ $ cat /proc/interrupts | grep "pmic"
494: 7 mt-eint 206 pmic-eint // 耳机拔出触发1次pmic中断
magc6737t_65_n:/ $ cat /proc/interrupts | grep "pmic"
494: 9 mt-eint 206 pmic-eint // 耳机插入触发2次pmic中断
magc6737t_65_n:/ $ cat /proc/interrupts | grep "pmic"
494: 10 mt-eint 206 pmic-eint
magc6737t_65_n:/ $ cat /proc/interrupts | grep "pmic"
494: 12 mt-eint 206 pmic-eint // 耳机按下音量+触发2次pmic中断
magc6737t_65_n:/ $ cat /proc/interrupts | grep "pmic"
494: 14 mt-eint 206 pmic-eint // 耳机按下音量-触发2次pmic中断
magc6737t_65_n:/ $ cat /proc/interrupts | grep "pmic"
494: 16 mt-eint 206 pmic-eint // 耳机按下暂停键触发2次pmic中断
2. 查看log
3.
4.
二、根据mtk-online介绍,耳机检测有三种模式:
Feature Phone主要有三种耳机检测方式:
1. EINT+AuxADC
【检测原理】
(1)耳机检测方式为EINT+AuxADC。
(2)EINT HISR为AUX_EINT_HISR,在aux_task_main中注册中断。插入耳机,若是高电平触发中断,需要保证AUX_EINT_STATE为1,否则为0。
(3)hook key的检测采用ADC。当耳机plug in,trigger AUX_EINT_HISR,此时turn on micbias, double check plug in state后,再发送msg AUX_ID_EARPHONE给UEM。
然后turn off micbias。当aux收到来电消息,也会turn on micbias,检测SENDKEY ADC,直到挂断电话,才turn off micbias。
【软件配置】ACCDET_SUPPORT=FALSE
【典型平台】MT6236,MT6252
2. ACCDET【即DCC模式】
【检测原理】
(1)耳机检测方式为ACCDET only。
(2)HISR为ACCDET_HISR,在ACCDET_INIT注册。
(3)hook key的检测采用ACCDET。
(4)耳机状态与accdet处的电压对应关系如下表:
表(一)
Earphone state Accdet voltage Comparator AB state
Plug out 1.9V A=1,B=1
Plug in 0.4V~1.7V A=0,B=1
Hook key pressed 0V A=0,B=0 //【可用万用表量mic脚电压,按键按住不松开即可】
【软件配置】ACCDET_SUPPORT=TRUE
【典型平台】MT6276,MT6250D/MT6250
3. EINT_ACCDET【即ACC模式】
【检测原理】
(1)耳机检测方式为EINT+ACCDET。
(2)EINT HISR为AUX_EINT2_HISR,在ACCDET_INIT注册。插入耳机,若是高电平触发中断,需要将AUX_EINT_STATE置为1,否则置为0。
(3)hook key的检测采用accdet。
(4)耳机状态与accdet处的电压对应关系同表(一)。
(5)耳机插入,触发eint之后,enable ACCDET,耳机拔出之后会disable ACCDET。
【软件配置】ACCDET_SUPPORT=EINT_ACCDET
【典型平台】MT6255,MT6250/MT6250D
三、如何分辨是【ACC】还是【DCC】
根据查看硬件原理图,对照BOM
ACC: R11+R12
DCC: R13
VIO18_PMU
|
ACCDET -------R13(47K)---| R11(470K)
| |
EINT_EAR -----R12(47K)-----------------HP_EINT
四、
ACC : 还需要而配置dws,dts中断脚accdet
magc6737m_65_n_debug_defconfig:
CONFIG_ACCDET_EINT=y
# CONFIG_ACCDET_EINT_IRQ is not set
DCC : 无需而配置中断脚
magc6737m_65_n_debug_defconfig:
# CONFIG_ACCDET_EINT is not set
CONFIG_ACCDET_EINT_IRQ=y
二、全插入: 耳机+mic
插入log:
// 第一次中断
[ 1294.690140] -(2)[0:swapper/2][name:irq_mt_eic&]EINT Module - expires:4295066764, jiffies:4295066763, deb_in_jiffies:1,
[ 1294.690180] -(2)[0:swapper/2][name:irq_mt_eic&]deb:1000, in mt_eint_set_timer_event
[ 1294.697499] (1)[54:pmic_thread][name:pmic&][PMIC] [PMIC_INT] addr[0x2c4]=0x2000
[ 1294.697542] (1)[54:pmic_thread][name:accdet&][accdet_eint_int_handler]....
[ 1294.697581] (1)[54:pmic_thread][name:accdet&][Accdet accdet_irq_handler]clear_accdet_eint_interrupt: ACCDE
30. accdet调试日志
最新推荐文章于 2023-05-14 18:04:54 发布
这篇博客详细介绍了MTK平台中耳机检测的三种模式:EINT+AuxADC、ACCDET(DCC模式)和EINT_ACCDET。通过adb调试方法查看中断计数和日志,分析了耳机插入、拔出时的中断处理流程。内容包括不同模式下的硬件原理和软件配置,并展示了全插入和半插入耳机时的中断日志,以及在快速按键操作下可能出现的误报问题。文章还提及了一个实际的误报问题案例,涉及MT6737平台,但尚未得到MTK的回复。
摘要由CSDN通过智能技术生成