在ALSA架构中,ASOC是由3个部分组成:Platform、CODEC & Machine。而耳机检测一般是在Machine driver里实现,当然也可以在CODEC driver里实现。耳机插拔接口Jack的结构图如图1所示(iPhone和Nokia耳机MIC & GROUND正好相反)。 

图1.Jack结构图

  耳机检测信号HP_DET#可以通过以下有两种方式传递到SOC端:

  1.直接将HP_DET#信号接到SOC端;

  2.将HP_DET#信号先接到CODEC端,再有CODEC端GPIO/IRQ引脚将信号传送到SOC端;

  若要实现方法2,需要在CODEC driver端进行一系列的配置,比如给COEDC端耳机检测引脚JD#上电、GPIO/IRQ输出用做JD#状态检测 & IRQ Debounce Clock选择Interal Clock等,这样才能开启CODEC端HP_DET#信号的接收和中断信号的上报。

  同样的,在Machine driver中也要做以下3个操作:

  1.定义一个类型为“snd_soc_jack_gpios”的结构体变量hs_gpio,该变量是用来配置用于耳机检测的gpio。hs_gpio结构体中初始化该gpio的name、report、debounce_time、jack_status_check & irq_flags等结构体变量,其中name表示gpio的名字;report表示会上报的状态种类,一共有HEADSET、HEADPHONE & BUTTON;debounce_time表示防抖动时延;jack_status_check表示中中处理函数;irq_flags表示中断处理函数是上升沿触发还是下降沿触发。

 static struct snd_soc_jack_gpio hs_gpio[] = {
[HSDET] = {
.name = "AUDIOCODEC_INT",
.report = SND_JACK_HEADSET | SND_JACK_HEADPHONE | SND_JACK_BTN_0,
.debounce_time = ,
.jack_status_check = jack_gpio_detect_bp,
.irq_flags = IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
},
};

  2.通过snd_soc_jack_new()函数新建一个新的jack,将该jack指向Machine对应的CODEC,使该jack与CODEC建立联系。

  3.通过snd_soc_jack_add_gpios()函数将定义好的GPIO pins与ASoC jack联系起来,并实现GPIO pins的中断申请irq_request & 通过snd_jack_report上报jack_status。

  

  总结,实现kernel层耳机检测,主要是通过系统release出来的函数接口实现GPIO pins的配置、GPIO pins与CODEC建立联系 & GPIO pins与ASoC建立联系这3部分组成。

  【参考文章:http://blog.csdn.net/piaozhiye/article/details/25101891】

  

Android4.4 耳机检测分析的更多相关文章

  1. android4.3 Bluetooth(le)分析之startLeScan分析

    BluetoothAdapter.java中有low enery(le)的一些方法,android提供了这些方法,但源码中并未找到这些方法的调用之处.本文档主要分析这类方法的执行流程,来了解下le到底 ...

  2. Graylog2进阶 打造基于Nginx日志的Web入侵检测分析系统

    对于大多数互联网公司,基于日志分析的WEB入侵检测分析是不可或缺的. 那么今天我就给大家讲一讲如何用graylog的extractor来实现这一功能. 首先要找一些能够识别的带有攻击行为的关键字作为匹 ...

  3. 【译】.NET 的新的动态检测分析

    随着 Visual Studio 16.9 的发布,Visual Studio 中的检测分析变得更好用了.本文介绍我们新的动态分析工具.这个工具显示了函数被调用的确切次数,并且比我们以前的静态检测工具 ...

  4. Android4.4 Telephony流程分析——彩信(MMS)发送过程

    本文代码以MTK平台Android 4.4为分析对象,与Google原生AOSP有些许差异,请读者知悉. 彩信收发依靠WAP网络,在Android4.4中的实现基于Http协议的应用.下图为几个彩信传 ...

  5. HoG SVM 目标检测分析

    前一段时间开始了解HoG跟SVM行人识别,看了很多包括Dalal得前辈的文章及经验分享,对HoG理论有了些初步的认识. HoG 的全称是 Histogram of Oriented Gradient, ...

  6. Android 蓝牙( Bluetooth)耳机连接分析及实现

    Android 实现了对Headset 和Handsfree 两种profile 的支持.其实现核心是BluetoothHeadsetService,在PhoneApp 创建的时候会启动它. if ( ...

  7. android4.2 telephone应用层分析

    InCallScreen.java 复制通话界面的显示和提供人机交互的接口.进入该界面第一个调用ONCreate.否则进入OnNewIntent,该配置文件是incall_screen.xml,当中i ...

  8. Android4.0 Surface机制分析

    1. java层面的Surface     对于Surface我们的认识主要是android的类Surface, android的文档描述Surface是"Handle onto a raw ...

  9. Android4.4 GPS框架分析【转】

    本文转载自:http://blog.csdn.net/junzhang1122/article/details/46674569 GPS HAL层代码在目录trunk/Android/hardware ...

随机推荐

  1. asp开发微信扫码支付

    这个任务已经给了.现在正在学习开发中.主要注意的是2点. 1:返回参数的验证. 2:通知后业务处理和处理后返回财付通.大部分操作,api中已经处理好. 现在需要的业务逻辑部分. 需要正确3个参数  r ...

  2. 用root直接登入ubuntu 14_04

    官网下载地址:http://www.ubuntu.com/download/desktop64位桌面版:http://www.ubuntu.com/ubuntu-releases/14.04/ubun ...

  3. linux学习之centos(三):网卡配置

    Linux系统版本:Centos 6.5 在linux学习之centos(二):虚拟网络三种连接方式和SecureCRT的使用中,使用远程工具SecureCRT,通过“ifconfig eth0 + ...

  4. Qt Creator快捷键

    简介 Qt Creator中提供了各种快捷键来加快开发进程. 如果需要查看或自定义快捷键,选择工具->选项->环境->键盘.快捷键按类别列出,可以在过滤器(Filter)处输入命令名 ...

  5. java之IO

    IO流主要用于硬板.内存.键盘等处理设备上得数据操作 一.IO流分类 java.io包中定义了多个流类型(类或抽象类)来实现输入/输出功能,可以从不同角度对其分类: 1.按数据流的方向不同分为:输入流 ...

  6. 想找个计算器当本命?来试试UWP应用《纸书科学计算器》

    久违了.上次在博客园发文还是4年前,正是高中参加NOIP的时候.这4年里发生了很多事,乃至再次看到过去的文章时,仿佛看到了自己也不熟悉的风景.最近很想把我的博客重新拾起来,慢慢灌溉,写一些微不足道的技 ...

  7. codevs 4927 线段树练习5

    赶在期末考试之前把这道傻逼题调了出来. #include<iostream> #include<cstdio> #include<cstring> #include ...

  8. 使用过的Linux命令

    1 在vim中编辑python,由于tab是8个空格,然而python中是4个,需要替换 :%s/\t/    /g 2 tar tar -czvf topic_dt_poi.0801.0818.ta ...

  9. 【解题报告】POJ-1106 Transmitters

    原题地址:http://poj.org/problem?id=1106 题目大意: 给定一些平面的点以及一个圆心和半径,过圆心作一个半圆,求点在半圆中点最多多少个. 解题思路: 首先将给定点中和圆心的 ...

  10. UVA 11796 - Dog Distance

    题意  两条狗啊,同时跑,,同时结束,各自跑各自的道路,问跑的过程中,他们最大距离和最小距离的差: 方法  恶心一点就是,最大最小距离的求解方法,假设两只狗都只有一条线段要跑,则可以判定在端点处有最大 ...