Android4.4 耳机检测分析
在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 耳机检测分析的更多相关文章
- android4.3 Bluetooth(le)分析之startLeScan分析
BluetoothAdapter.java中有low enery(le)的一些方法,android提供了这些方法,但源码中并未找到这些方法的调用之处.本文档主要分析这类方法的执行流程,来了解下le到底 ...
- Graylog2进阶 打造基于Nginx日志的Web入侵检测分析系统
对于大多数互联网公司,基于日志分析的WEB入侵检测分析是不可或缺的. 那么今天我就给大家讲一讲如何用graylog的extractor来实现这一功能. 首先要找一些能够识别的带有攻击行为的关键字作为匹 ...
- 【译】.NET 的新的动态检测分析
随着 Visual Studio 16.9 的发布,Visual Studio 中的检测分析变得更好用了.本文介绍我们新的动态分析工具.这个工具显示了函数被调用的确切次数,并且比我们以前的静态检测工具 ...
- Android4.4 Telephony流程分析——彩信(MMS)发送过程
本文代码以MTK平台Android 4.4为分析对象,与Google原生AOSP有些许差异,请读者知悉. 彩信收发依靠WAP网络,在Android4.4中的实现基于Http协议的应用.下图为几个彩信传 ...
- HoG SVM 目标检测分析
前一段时间开始了解HoG跟SVM行人识别,看了很多包括Dalal得前辈的文章及经验分享,对HoG理论有了些初步的认识. HoG 的全称是 Histogram of Oriented Gradient, ...
- Android 蓝牙( Bluetooth)耳机连接分析及实现
Android 实现了对Headset 和Handsfree 两种profile 的支持.其实现核心是BluetoothHeadsetService,在PhoneApp 创建的时候会启动它. if ( ...
- android4.2 telephone应用层分析
InCallScreen.java 复制通话界面的显示和提供人机交互的接口.进入该界面第一个调用ONCreate.否则进入OnNewIntent,该配置文件是incall_screen.xml,当中i ...
- Android4.0 Surface机制分析
1. java层面的Surface 对于Surface我们的认识主要是android的类Surface, android的文档描述Surface是"Handle onto a raw ...
- Android4.4 GPS框架分析【转】
本文转载自:http://blog.csdn.net/junzhang1122/article/details/46674569 GPS HAL层代码在目录trunk/Android/hardware ...
随机推荐
- supersocket中quickstart文件夹下的MultipleCommandAssembly的配置文件分析
首先确认下配置文件中的内容 第一部分configSections[需要注意的是name=superSocket] <configSections> <section name=&qu ...
- android 启动第三方程序的代码
//启动媒体库 Intent i = new Intent(); ComponentName comp = new ComponentName("com.android.camera&q ...
- xcode快捷键的使用
1.统计Xcode项目代码行数 1 打开终端. 2 用ls和cd进到你项目的路径. 3 输入下面的指令: grep -r "\n" classes | wc -l (cl ...
- PhpStorm 获取注册码
另一种方法是:直接用浏览器打开 http://idea.lanyus.com/ ,点击页面中的“获得注册码”,然后在注册时切换至Activation Code选项,输入获得的注册码一长串字符串,便可以 ...
- IOS中用UIFont返回字体的行高、动态改变tableView中Cell的高度
一.动态改变Cell的高度 1.利用tableView代理方法的返回值决定每一行cell的高度 - (CGFloat)tableView:(UITableView *)tableView height ...
- UML和模式应用
引言 Applying UML and Patterns,以一个商店POS系统NextGen和一个掷骰子游戏Monopoly为例,围绕OOA/D的基本原则GRASP,以迭代作为基本方法.以UML为表达 ...
- Java 碰撞的球 MovingBall (整理)
package demo; /** * Java 碰撞的球 MovingBall (整理) * 声明: * 这份源代码没有注释,已经忘记了为什么要写他了,基本上应该是因为当时觉得好玩吧. * 有时候想 ...
- HDU 5375 Gray code 格雷码(水题)
题意:给一个二进制数(包含3种符号:'0' '1' '?' ,问号可随意 ),要求将其转成格雷码,给一个序列a,若转成的格雷码第i位为1,则得分+a[i].求填充问号使得得分最多. 思路:如果了 ...
- Windows Azure移动终端云服务管理(公测版)
概览 云在远方,管理在您手中.在这个移动为先 云为先的世界,服务不再是基于请求才提供,而是主动来到身边方便您的模式了.我们最近将会陆续推出几大移动端利器帮助您随时随地管理您的云服务. 首批利器之中排名 ...
- modeler与activiti进行整合
整合Activiti Modeler到业务系统(或BPM平台) http://www.kafeitu.me/activiti/2013/03/10/integrate-activiti-modeler ...