6735平台上耳机配置
(2016-07-05 19:57:29)
6735平台上耳机相关的宏有下面三个:
Audio define@
alps\vendor\mediatek\proprietary\custom\${project_name}\hal\audioflinger\audio\audio_custom_exp.h
#define HEADSET_MIC_MODE (1)………………………….For Headset Mic
Accdet define@
alps\kernel-3.10\drivers\misc\mediatek\mach\mt6735\${project_name}\accdet\accdet_custom_def.h
#define ACCDET_MIC_MODE (1)
#define ACCDET_EINT
Audio Speech部分参考设计有修改:
1.外部EINT怎么配置:看三颗电阻--R11/ R12/ R13
请注意:ACC Mode不可以用ACCDET as EINT,只能使用AP EINT。
2. ACC Mode还是 DCC Mode? == > 看AU_VIN1_P和AU_VIN1_N两个Pin上是否有接隔直电容?
有 ==> ACC Mode : ACCDET_MIC_MODE = 1
没有 ==> DCC Mode : ACCDET_MIC_MODE = 2 或者 6
3. DCC Mode下 ACCDET_MIC_MODE 设 2还是设 6? == > 看 AU_MICBIAS1 上的 R10(2.5K ohm)是否有贴(如下图红框部分)?
6735平台上耳机配置
![此博文包含图片](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
Audio define@
alps\vendor\mediatek\proprietary\custom\${project_name}\hal\audioflinger\audio\audio_custom_exp.h
#define HEADSET_MIC_MODE (1)………………………….For Headset Mic
Accdet define@
alps\kernel-3.10\drivers\misc\mediatek\mach\mt6735\${project_name}\accdet\accdet_custom_def.h
#define ACCDET_MIC_MODE (1)
#define ACCDET_EINT
Audio Speech部分参考设计有修改:
1.外部EINT怎么配置:看三颗电阻--R11/ R12/ R13
![6735平台上耳机配置 6735平台上耳机配置](https://i-blog.csdnimg.cn/blog_migrate/5fad261574e6a4969404ede5cad00591.png)
请注意:ACC Mode不可以用ACCDET as EINT,只能使用AP EINT。
2. ACC Mode还是 DCC Mode? == > 看AU_VIN1_P和AU_VIN1_N两个Pin上是否有接隔直电容?
3. DCC Mode下 ACCDET_MIC_MODE 设 2还是设 6? == > 看 AU_MICBIAS1 上的 R10(2.5K ohm)是否有贴(如下图红框部分)?
Headset]如何在ADB shell中读取耳机状态和读取ACCDET寄存器
[Description]
如何在ADB shell中读取耳机状态和读取ACCDET寄存器
[Solution]
获取耳机状态
cat /sys/class/switch/h2w/state
state值为0表示headset plug out;
state值为1表示有mic的耳机插入(四段式耳机);
state值为2表示没有mic的耳机插入(三段式耳机)。
读取寄存器
cd /sys/devices/platform/Accdet_Driver/driver
echo 1 >start_debug
echo1 >dump_register
这样Accdet的reg会每500ms 抓到一次寄存器值,保存在log中
Mt6589参考值(仅供参考):
无耳机:
<3>[31366.722403](0)[16408:ACCDET] ACCDET_BASE + 582=1090
<3>[31366.723021](0)[16408:ACCDET] ACCDET_BASE + 584=0
<3>[31366.723606](0)[16408:ACCDET] ACCDET_BASE + 586=0
<3>[31366.724191](0)[16408:ACCDET] ACCDET_BASE + 588=8ff
<3>[31366.724799](0)[16408:ACCDET] ACCDET_BASE + 58a=1ff
<3>[31366.725406](0)[16408:ACCDET] ACCDET_BASE + 58c=81f0
<3>[31366.726025](0)[16408:ACCDET] ACCDET_BASE + 58e=800
<3>[31366.726632](0)[16408:ACCDET] ACCDET_BASE + 590=800
<3>[31366.727240](0)[16408:ACCDET] ACCDET_BASE + 592=10
<3>[31366.727836](0)[16408:ACCDET] ACCDET_BASE + 594=20
<3>[31366.728433](0)[16408:ACCDET] ACCDET_BASE + 596=333
<3>[31366.729040](0)[16408:ACCDET] ACCDET_BASE + 598=0
<3>[31366.729625](0)[16408:ACCDET] ACCDET_BASE + 59a=0
<3>[31366.730211](0)[16408:ACCDET] ACCDET_BASE + 59c=ff
<3>[31366.733668](0)[16408:ACCDET] ACCDET_BASE + 59e=20
<3>[31366.735256](0)[16408:ACCDET] ACCDET_BASE + 5a0=0
<3>[31366.735882](0)[16408:ACCDET] ACCDET_BASE + 5a2=0
<3>[31366.737017](0)[16408:ACCDET] 0x00000114 =0
<3>[31366.737537](0)[16408:ACCDET] 0x0000017E =12
<3>[31366.738068](0)[16408:ACCDET] 0x00000180 =0
<3>[31366.738588](0)[16408:ACCDET] 0x00000182 =0
<3>[31366.739109](0)[16408:ACCDET] 0x00000102 =4607
<3>[31366.739662](0)[16408:ACCDET] 0x00000104 =0
<3>[31366.740183](0)[16408:ACCDET] 0x00000106 =0
<3>[31366.742454](0)[16408:ACCDET] 0x00004000 =0
有耳机:
<3>[31595.222402](0)[16408:ACCDET] ACCDET_BASE + 582=1090
<3>[31595.223020](0)[16408:ACCDET] ACCDET_BASE + 584=1
<3>[31595.223606](0)[16408:ACCDET] ACCDET_BASE + 586=77
<3>[31595.224202](0)[16408:ACCDET] ACCDET_BASE + 588=8ff
<3>[31595.224810](0)[16408:ACCDET] ACCDET_BASE + 58a=1ff
<3>[31595.225417](0)[16408:ACCDET] ACCDET_BASE + 58c=81f0
<3>[31595.226035](0)[16408:ACCDET] ACCDET_BASE + 58e=400
<3>[31595.226643](0)[16408:ACCDET] ACCDET_BASE + 590=800
<3>[31595.227250](0)[16408:ACCDET] ACCDET_BASE + 592=10
<3>[31595.227846](0)[16408:ACCDET] ACCDET_BASE + 594=20
<3>[31595.228443](0)[16408:ACCDET] ACCDET_BASE + 596=333
<3>[31595.229050](0)[16408:ACCDET] ACCDET_BASE + 598=0
<3>[31595.229636](0)[16408:ACCDET] ACCDET_BASE + 59a=0
<3>[31595.230222](0)[16408:ACCDET] ACCDET_BASE + 59c=7055
<3>[31595.232650](0)[16408:ACCDET] ACCDET_BASE + 59e=800
<3>[31595.233258](0)[16408:ACCDET] ACCDET_BASE + 5a0=0
<3>[31595.233842](0)[16408:ACCDET] ACCDET_BASE + 5a2=0
<3>[31595.234428](0)[16408:ACCDET] 0x00000114 =0
<3>[31595.234948](0)[16408:ACCDET] 0x0000017E =16
<3>[31595.235480](0)[16408:ACCDET] 0x00000180 =0
<3>[31595.236000](0)[16408:ACCDET] 0x00000182 =0
<3>[31595.236521](0)[16408:ACCDET] 0x00000102 =607
<3>[31595.237063](0)[16408:ACCDET] 0x00000104 =0
<3>[31595.237584](0)[16408:ACCDET] 0x00000106 =0
<3>[31595.238104](0)[16408:ACCDET] 0x00004000 =0
![](http://static.blog.csdn.net/images/category_icon.jpg)
版权声明:本文为博主原创文章,未经博主允许不得转载。
MTK6797 Accdet驱动分析总结
一、相关概念介绍
1、EINT+ACCDET检测中断
EINT中断:主要用来检测耳机的插入和拔出,即plug in 和plug out
ACCDET中断:主要用来检测耳机的事件类型,包括PLUG_OUT、PLUG_IN、MIC_BIAS(耳机上的mic)和HOOK_SWITCH(耳机按键)
a、采用AP端的中断作为EINT,(3 steps:a0 a1 a2)
a0、如果采用此方式,需要打开宏
CONFIG_ACCDET_EINT=y
# CONFIG_ACCDET_EINT_IRQ is not set
a1、also config the dws for eint
a2、meanwhile reconfig the gpio in the dts
b、采用PMIC的中断作为EINT,
如果采用此方式,需要打开宏(only)
CONFIG_ACCDET_EINT_IRQ =y
#CONFGI_ACCDET_EINT is not set
2、耳机按键的检测
耳机按键的原理图如下:
PMIC有内部ADC通道可以读取不同的耳机电压,其中不同事件类型对应的电压如下:
plug out:1.77<=voltage<=1.9
mic bias:0.5v<=voltage<1.77v
hook switch:0v<=voltage<=0.5v
如上三个状态是通过ACCDET_STATE_RG寄存器获取的,通过2个bit A=bit1、B=bit0判断,对应如上的事件如下:
plug out:1.77<=voltage<=1.9 A=1,B=1,AB=3,
mic bias:0.5v<=voltage<1.77v A=0,B=1,AB=1,
hook switch:0v<=voltage<=0.5v A=0,B=0,AB=0,
其中hook switch包括了up、middle、down三个按键,对应的电压如下;
0v<=middle<=0.09v<=up<=0.24v<=down<=0.5v
二、耳机插入流程分析
当插入耳机按键时,首先是触发了EINT中断,然后再触发ACCDET中断,这2个中断都是PMIC函数中注册的,属于PMIC端的中断。
在probe初始化函数中注册了之前提到的两个中断函数,此为中断上半部分:
然后又初始化了两个工作队列accdet_work和accdet_eint_work,对应如上两个中断的下半部分。
1、总的大体流程如下,具体的耳机事件插拔检测在下一副流程图会介绍,
2、这里主要介绍两种耳机模式:MIC_BIAS和HOOK SWITCH
a、MIC_BIAS模式,即插入耳机后的默认模式,状态从PLUG_OUT----->MIC_BIAS,主要代码如下
b、HOOK_SWITCH模式,即耳机按键按下的状态,状态从MIC_BIAS----->HOOK_SWITCH,按键松开时HOOK_SWITCH----->MIC_BIAS,主要代码如下:
代码对应的耳机按键处理流程如下:
三、总结
耳机按键处理主要依靠2个中断EINT+ACCDET,然后按键检测依靠内部ADC检测,上报按键事件时,按下和松开都要通过send_key_event进行上报。