zoukankan      html  css  js  c++  java
  • 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表示中断处理函数是上升沿触发还是下降沿触发。

    1 static struct snd_soc_jack_gpio hs_gpio[] = {
    2     [HSDET] = {
    3         .name            = "AUDIOCODEC_INT",
    4         .report            = SND_JACK_HEADSET | SND_JACK_HEADPHONE |  SND_JACK_BTN_0,
    5         .debounce_time        = 100,
    6         .jack_status_check    = jack_gpio_detect_bp,
    7         .irq_flags        = IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
    8     },
    9 };

      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】 

      

  • 相关阅读:
    Drupal Coder 模块远程命令执行分析(SA-CONTRIB-2016-039)
    Python 实现 ZoomEye API SDK
    程序员互动联盟第一届编码大赛第二题解题分享
    python中各进制之间的转换
    记一次ctf比赛解密题的解决(可逆加密基本破解之暴力破解)
    使用JsonConfig控制JSON lib序列化
    openMRS项目
    Harmonic Number(调和级数+欧拉常数)
    Pairs Forming LCM(素因子分解)
    Uva 11395 Sigma Function (因子和)
  • 原文地址:https://www.cnblogs.com/Peter-Chen/p/3900498.html
Copyright © 2011-2022 走看看