音频之手机物理按键(Exynos7872)

(注:本文仅仅用于个人理顺代码流程思路)
手机物理按键驱动文件分析:
一、GPIO的DTS文件,代码段如下所示:

/*gpio口的DTS定义*/
gpio_keys {
    status = "okay";
    compatible = "gpio-keys";
    #address-cells = <1>;
    #size-cells = <0>;
    pinctrl-names = "default";
    pinctrl-0 = <&key_home &key_voldown &key_volup &key_power>;
    button@1 {
        label = "gpio-keys: KEY_HOMEPAGE";
        interrupts = <4 0 0>;
        interrupt-parent = <&gpa1>;
        linux,code = <172>;
        gpios = <&gpa1 4 0xf>;
        gpio-key,wakeup = <1>;
    };
    button@2 {
        label = "gpio-keys: KEY_VOLUMEDOWN";
        interrupts = <6 0 0>;
        interrupt-parent = <&gpa1>;
        linux,code = <114>;
        gpios = <&gpa1 6 0xf>;
    };
    button@3 {
        label = "gpio-keys: KEY_VOLUMEUP";
        interrupts = <5 0 0>;
        interrupt-parent = <&gpa1>;
        linux,code = <115>;
        gpios = <&gpa1 5 0xf>;
    };
    button@4 {
        label = "gpio-keys: KEY_POWER";
        interrupts = <0 0 0>;
        interrupt-parent = <&gpa0>;
        linux,code = <116>;
        gpios = <&gpa0 0 0xf>;
        gpio-key,wakeup = <1>;
    };
};

二、驱动文件gpio_keys.c:
几个重要的结构体:

/*该结构体用来定义GPIO的按键功能*/
struct gpio_keys_platform_data {
    struct gpio_keys_button *buttons;       //指向gpio_keys_button结构体数组,用于按键的参数设置
    int nbuttons;                           //按键数组内元素个数
    unsigned int poll_interval;             //轮询时间间隔
    unsigned int rep:1;                     //自动重复使能输入子系统
    int (*enable)(struct device *dev);      
    void (*disable)(struct device *dev);    
    const char *name;                       //输入设备名
};

/*用来关联input系统*/
struct gpio_keys_drvdata {
    const struct gpio_keys_platform_data *pdata;
    struct input_dev *input;
    struct mutex disable_lock;
    struct gpio_button_data data[0];
};

/**
 * struct gpio_keys_button - configuration parameters
 * @code:       input event cod
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值