[RK3288][Android6.0] 有线耳机驱动小结

本文详细介绍了在Rockchip平台,基于Android 6.0和Kernel 3.10.92环境下,有线耳机驱动的实现。驱动分为普通和ADC两种检测方式,注册过程通过switch子系统完成,耳机插拔事件通过中断处理,并通过input子系统上报。用户空间可以通过uevent事件监听耳机状态变化。
摘要由CSDN通过智能技术生成

Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92

Overview

Rockchip针对有线耳机的驱动单独建了目录, 在kernel/drivers/headset_observe/

这里写图片描述

  • rockchip_headset_core.c: 读取dts中的配置,根据配置不同决定使用adc还是普通的headset探测。
  • rk_headset.c: 普通方式headset驱动
  • rk_headset_irq_hook_adc.c: adc方式headset驱动

注册

耳机插拔事件通过switch子系统上报,目录: kernel/drivers/switch/

通过其switch_dev_register()接口把headset注册到switch子系统中

headset->sdev.name = “h2w”;
headset->sdev.print_name = h2w_print_name;
ret = switch_dev_register(&headset->sdev);

这样就能在/sys下看到h2w的子目录

这里写图片描述

然后,用户空间就能收到uevent事件得知耳机设备状态有变化,从state文件读取状态得知插入还是拔出来做相应处理。

插拔状态的改变是通过switch_set_state()来实现,本质上就是通知上层并改变state文件值。

dts的配置如下

&adc {
    status = "okay";

    rockchip_headset {
        compatible = "rockchip_headset";
        headset_gpio = <&gpio7 GPIO_A7 GPIO_ACTIVE_LOW>;
        pinctrl-names = "default";
        pinctrl-0 = <&gpio7_a7>;
        io-channels = <&adc 2>
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值