耳机检测方案

检测方案1(主流方案):耳机插拔中断接的PMIC (HP_EINT+ACCDET)

CONFIG_ACCDET_EINT_IRQ  &&  CONFIG_ACCDET_SUPPORT_EINT0
CONFIG_ACCDET_EINT_IRQ  &&  CONFIG_ACCDET_SUPPORT_EINT1//平台默认的是EINT0,EINT1不确定具体作用

采用默认的方案,工程师不用调试,接上耳机,手机就能识别到耳机,很方便。

检测方案2:耳机插拔中断接AP(EINT_EAR+ACCDET)  这种方式,需要稍微修改下代码

共同点:ACCDET用来检测mic的存在

差异:用不同的中断来检测耳机的插拔,默认都是用PMIC上的中断来检测耳机的插入,使用AP中断的方式来检测耳机感觉像是替补。

先看下耳机检测流程(HP_EINT+ACCDET kernel4.14)

pmic_register_interrupt_callback(INT_ACCDET_EINT0,accdet_eint_handler);static void accdet_eint_handler(void)
{accdet_irq_handle();
}void accdet_irq_handle(void)
{
...pmic_eint_queue_work(eintID);
...
}static int pmic_eint_queue_work(int eintID)
{
...
#ifdef CONFIG_ACCDET_SUPPORT_EINT0if (cur_eint_state == EINT_PIN_PLUG_IN) {cur_eint_state = EINT_PIN_PLUG_OUT;} else {cur_eint_state = EINT_PIN_PLUG_IN;}queue_work(eint_workqueue, &eint_work); //INIT_WORK(&eint_work, eint_work_callback);
#endif
...
}static void eint_work_callback(struct work_struct *work)
{if (cur_eint_state == EINT_PIN_PLUG_IN) {accdet_init();/* set PWM IDLE  on */pmic_write(ACCDET_STATE_SWCTRL,(pmic_read(ACCDET_STATE_SWCTRL) | ACCDET_PWM_IDLE));
#ifdef CONFIG_ACCDET_EINT_IRQ
#ifdef CONFIG_ACCDET_SUPPORT_EINT0enable_accdet(ACCDET_EINT0_PWM_IDLE_B11 | ACCDET_PWM_EN);
#endif
#elseenable_accdet(ACCDET_PWM_EN);//开启micbias
#endif} else {/* clc Accdet PWM idle */pmic_write(ACCDET_STATE_SWCTRL,pmic_read(ACCDET_STATE_SWCTRL) & (~ACCDET_PWM_IDLE));disable_accdet();headset_plug_out();}#ifdef CONFIG_ACCDET_EINTenable_irq(accdet_irq);pr_info("accdet %s enable_irq !!\n", __func__);
#endif
}

这时就可以触发accdet中断(检测耳机类型)

pmic_register_interrupt_callback(INT_ACCDET, accdet_int_handler);
static void accdet_int_handler(void)
{accdet_irq_handle();
}void accdet_irq_handle(void)
{
...
#ifdef CONFIG_ACCDET_EINT_IRQeintID = get_triggered_eint();
#endifirq_status = pmic_read(ACCDET_IRQ_STS);if ((irq_status & ACCDET_IRQ_B0) && (eintID == 0)) {accdet_queue_work();}
}
...
}static void accdet_queue_work(void)
{
... ret = queue_work(accdet_workqueue, &accdet_work);//INIT_WORK(&accdet_work, accdet_work_callback);
...
}static void accdet_work_callback(struct work_struct *work)
{
... check_cable_type();
...
}

注意到了没有accdet_irq_handle函数跑了两遍,分别跑里面不同的部分。

以后的按键检测重复跑accdet_int_handler。

以上是根据代码分析到的流程。为什么要分析上述流程呢,因为楼主使用的硬件的需要用accdect only的方式来检测typce非标耳机(pmic不带cc脚,不能识别到标准typec耳机,如果使用其他ic来检测耳机会增加成本)。accdect only的方式,mtk说kernel3.18以后都没有维护了,只能自己来实现了,调完了再记录下吧。

mtk平台耳机检测流程记录相关推荐

  1. MTK平台的启动流程(secureboot)

  2. MTK 平台CTP bring up

    MTK 平台CTP bring up 记录MTK平台 CTP bring up的过程 一.TP的基础原理 二.bring up步骤 1.找到代码目录: 2.需要修改的地方一般为makefile,dts ...

  3. Android 功耗(4)---MTK平台待机功耗分析流程

    MTK平台待机功耗分析流程 MTK平台待机功耗分析流程 1.目的 2.MTK平台各个场景功耗数据测试方法 很多功耗问题都是因为测试手法不对,列出一些常用场景功耗测试手法.  测试功耗数据之前,请先确认 ...

  4. 记一次rk平台热点打开流程追踪记录

    记一次rk平台热点打开流程追踪记录 问题描述 rk平台偶现热点打开失败,错误日志如下: I/android.hardware.wifi@1.0-service: Starting legacy HAL ...

  5. mtk平台typec模拟耳机补丁

    typec模拟耳机在某些高端手机上已经很常见了,但拿到的代码默认不支持typec模拟耳机(在某些平台上默认就是typec模拟耳机),那只能自己修改了. 这里用的版本为Android11,kernel4 ...

  6. MTK平台待机功耗分析流程

    MTK平台待机功耗分析流程 版本信息: 作者 版本 日期 备注 陈征鼎 V1.0 2016/01/21 1.目的 2.MTK平台各个场景功耗数据测试方法 很多功耗问题都是因为测试手法不对,列出一些常用 ...

  7. android平板待机电流,Android 功耗(4)---MTK平台待机功耗分析流程

    MTK平台待机功耗分析流程 1.目的 2.MTK平台各个场景功耗数据测试方法 很多功耗问题都是因为测试手法不对,列出一些常用场景功耗测试手法. 测试功耗数据之前,请先确认以下配置: 1.关闭 WIFI ...

  8. MTK 驱动(67)---深入MTK平台bootloader启动之【 lk -amp;gt; kernel】分析笔记

    Pre-loader 运行在ISRAM,待完成 DRAM 的初始化后,再将lk载入DRAM中,最后通过特殊sys call手段实现跳转到lk的执行入口,正式进入lk初始化阶段. 一.lk执行入口: 位 ...

  9. 深入MTK平台bootloader启动之【 lk -> kernel】分析笔记

    接上一篇分析: <深入MTK平台bootloader启动之[ Pre-loader -> Lk]分析笔记> Pre-loader 运行在ISRAM,待完成 DRAM 的初始化后,再将 ...

  10. MTK平台性能优化---(1)综述

    1.概述 手机性能优化越来越重要,本文介绍了性能评估.分析和优化的方法.在接下来的章节中,将会分别介绍关于系统.开机启动时间.应用启动速度性能优化,同时也会介绍如何使用一些有用的工具去评测性能瓶颈. ...

最新文章

  1. android关于设置list_item高度问题
  2. HTC Link是仅适用于日本的6DOF VR头显
  3. spring boot: Bean的初始化和销毁 (一般注入说明(三) AnnotationConfigApplicationContext容器 JSR250注解)...
  4. Android—TableLayout自定义表格
  5. base64核心原理
  6. 计算机及其配件和参数知识科普
  7. sql如何实现明细账_SQL 如何实现动态的行列转置
  8. 运算符重载 - C++快速入门25
  9. rms归一化_将FFT频谱幅度归一化为0dB
  10. win10主机前置耳机孔无声音,但是后置有声音,按照下面的设置进行设计即可
  11. 苹果6怎样分屏_皮皮喵最新版下载安卓版更新 0.2.6
  12. Origin_8.0_crack(origin8.0序列号(origin8.0破解补丁))
  13. 一台计算机可以安装网络打印机和本地打印机,您在计算机上安装一台本地打印机。您共享这台打印机。您需要确保只有名为Grou - 问答库...
  14. CTF在线工具及学习资料汇总
  15. 虫虫 HTML5::初学者使用 Application Cache 指南
  16. Backtrader:用feather格式股票数据代替tushare进行数据回测
  17. matlab彩色转灰度图代码,彩色图转灰度图 matlab 实现代码
  18. 吸烟者问题C++实现
  19. 500万存款,45岁可以退休不干了吗?
  20. 学习笔记Java小游戏学习笔记

热门文章

  1. matlab卷积不从0开始,matlab 编辑卷积出错
  2. C/C++运行库简介
  3. coreldraw快速撤回_CorelDRAW操作技巧,教你CDR撤销操作方法与设置技巧
  4. stm32芯片超时无应答解决
  5. 中国传统节日端午节网页HTML代码 学生网页课程设计期末作业下载 春节大学生网页设计制作成品下载 DW春节节日网页作业代码下载
  6. python组合数据类型实验报告_Python程序设计实验七:组合数据类型
  7. 正弦波及FFT变换py程序
  8. java课程设计小组分工_java课程设计---团体
  9. tomcat启动startup出现闪退问题
  10. Delphi XE3 下载