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】 

      

  • 相关阅读:
    比较全的屏幕信息
    使用div实现progress进度条
    选项卡效果的菜单栏
    javascript写的轮播图
    centos6.5 命令行配置无线上网
    CentOS 6.5 BCM43142 80211无线网卡驱动安装
    [数据库] windows server 2003下mysql出现10048错误的解决办法 Can't connect to MySQL server on '127.0.0.1' (10048)
    桥接模式-多台虚拟机配置(重要)
    VMware虚拟机中如何配置静态IP
    MySQL5.7 mysql.user创建用户
  • 原文地址:https://www.cnblogs.com/Peter-Chen/p/3900498.html
Copyright © 2011-2022 走看看