QCOM耳机检测功能是如何注册input设备的
来源:互联网 发布:域名投资从入门到精通 编辑:程序博客网 时间:2024/06/02 09:16
//-------------------------------------------------------------------------------------------------------------
硬件:
PM-8909管脚HS_DET (J12)
//-------------------------------------------------------------------------------------------------------------
./arch/arm/boot/dts/qcom/msm-pm8909.dtsi
&spmi_bus {
qcom,pm8909@1 {
...
pm8909_conga_dig: 8909_wcd_codec@f000 {
compatible = "qcom,msm8x16_wcd_codec";
reg = <0xf000 0x100>;
interrupt-parent = <&spmi_bus>;
interrupts = <0x1 0xf0 0x0>,
<0x1 0xf0 0x1>,
<0x1 0xf0 0x2>,
<0x1 0xf0 0x3>,
<0x1 0xf0 0x4>,
<0x1 0xf0 0x5>,
<0x1 0xf0 0x6>,
<0x1 0xf0 0x7>;
interrupt-names = "spk_cnp_int",
"spk_clip_int",
"spk_ocp_int",
"ins_rem_det1", //中断
"but_rel_det",
"but_press_det",
"ins_rem_det",
"mbhc_int";
...
};
...
};
//-------------------------------------------------------------------------------------------------------------
kernel/sound/soc/codecs/msm8x16-wcd.c
static struct of_device_id msm8x16_wcd_spmi_of_match[] = {
{ .compatible = "qcom,msm8x16_wcd_codec",},
{ },
};
static int msm8x16_wcd_spmi_probe(struct spmi_device *spmi)
{
...
ret = snd_soc_register_codec(&spmi->dev, &soc_codec_dev_msm8x16_wcd, //注册
msm8x16_wcd_i2s_dai,
ARRAY_SIZE(msm8x16_wcd_i2s_dai));
...
}
static struct snd_soc_codec_driver soc_codec_dev_msm8x16_wcd = {
.probe = msm8x16_wcd_codec_probe, //开机时进入此函数
.remove = msm8x16_wcd_codec_remove,
};
static int msm8x16_wcd_codec_probe(struct snd_soc_codec *codec)
{
...
wcd_mbhc_init(&msm8x16_wcd_priv->mbhc, codec, &mbhc_cb, &intr_ids, //执行函数,最后实现input的注册
true);
...
}
//-------------------------------------------------------------------------------------------------------------
kernel/sound/soc/codecs/wcd-mbhc-v2.c
int wcd_mbhc_init(struct wcd_mbhc *mbhc, struct snd_soc_codec *codec,
const struct wcd_mbhc_cb *mbhc_cb,
const struct wcd_mbhc_intr *mbhc_cdc_intr_ids,
bool impedance_det_en)
{
...
if (mbhc->headset_jack.jack == NULL) {
ret = snd_soc_jack_new(codec, "Headset Jack", //"Headset Jack"是注册的input设备名字后缀
WCD_MBHC_JACK_MASK, &mbhc->headset_jack);
...
}
//-------------------------------------------------------------------------------------------------------------
kernel/sound/soc/soc-jack.c
int snd_soc_jack_new(struct snd_soc_codec *codec, const char *id, int type,
struct snd_soc_jack *jack)
{
...
return snd_jack_new(codec->card->snd_card, id, type, &jack->jack);
}
//-------------------------------------------------------------------------------------------------------------
kernel/sound/core/jack.c
int snd_jack_new(struct snd_card *card, const char *id, int type,
struct snd_jack **jjack)
{
...
static struct snd_device_ops ops = {
.dev_free = snd_jack_dev_free,
.dev_register = snd_jack_dev_register,
};
...
err = snd_device_new(card, SNDRV_DEV_JACK, jack, &ops); //xcz
if (err < 0)
goto fail_input;
...
}
static int snd_jack_dev_register(struct snd_device *device)
{
struct snd_jack *jack = device->device_data;
struct snd_card *card = device->card;
int err, i;
snprintf(jack->name, sizeof(jack->name), "%s %s",
card->shortname, jack->id); //注册的input设备最终显示名称
jack->input_dev->name = jack->name;
...
err = input_register_device(jack->input_dev); //最终注册input设备
if (err == 0)
jack->registered = 1;
return err;
}
- QCOM耳机检测功能是如何注册input设备的
- 字符设备 和 input 设备--input设备的注册
- 如何检测input框里面输入的全是数字
- 如何检测耳机的插入状态
- FFMPEG研究: avdevice库是如何注册V4L2设备的
- iOS 设备 检测声音输出设备及耳机麦克风的处理
- QCom MSM平台显示屏Framebuffer设备注册过程
- QCom MSM平台显示屏Framebuffer设备注册过程
- QCom MSM平台显示屏Framebuffer设备注册过程
- QCom MSM平台显示屏Framebuffer设备注册过程
- OTG接口设备主从功能是如何实现的
- 耳机输入设备注册(1)
- [Android开发常见问题-5] 如何检测耳机的插入状态
- 快速构建Spring boot项目(功能是检测访问页面的设备)
- 增加Input设备功能
- Linux Input子系统--设备的注册和打开
- Linux Input子系统(2)--设备的注册和打开
- Linux Input子系统--设备的注册和打开
- AngularJS中ng-class使用方法
- 安装ruby一定要注意的一步(ruby -v和 rbenv version结果不一致)
- 秒杀系统架构分析与实战
- SecureCRT 遇到一个致命的错误且必须关闭——解决
- NOJ1141 走迷宫
- QCOM耳机检测功能是如何注册input设备的
- Android中Preference的使用以及监听事件分析
- Linux中批量重命名的方法
- 面试题总结——JAVA高级工程师
- 解析几何:第六章 二次曲面(1)球面 椭球面 双曲面
- 创建守护进程并且接收信号
- POJ2391:Ombrophobic Bovines floyd+二分答案+最大流
- Android自动化测试(UiAutomator)介绍与学习
- C/CPP点滴积累—#define ,typedef