当前位置:   article > 正文

gpio-keys驱动程序的使用_linux,code=

linux,code=

目录

gpio_keys说明

内核部分

应用部分


gpio_keys说明

key是嵌入式开发中常用到的东西,linux内核中也早已为我们做了一套成熟的机制。

gpio-keys是基于input架构实现的一个通用GPIO按键驱动。该驱动基于platform_driver架构,实现了驱动和设备分离,符合Linux设备驱动模型的思想。


内核部分

linux内核驱动文件:

drivers/input/keyboard/gpio_keys.c 

实现了一个体系结构无关的GPIO按键驱动,使用此按键驱动,只需在相应的设备树定义相关的数据即可。

dts部分修改(方法一):

  1. key-pwr {
  2. compatible = "gpio-keys";
  3. autorepeat;
  4. pinctrl-names = "default";
  5. pinctrl-0 = <&pwr_key>;
  6. power {
  7. label = "GPIO Key Power";
  8. linux,code = <KEY_POWER>;
  9. gpios = <&gpio0 RK_PA0 GPIO_ACTIVE_LOW>;
  10. debounce-interval = <15>;
  11. wakeup-source;
  12. };
  13. };
  14. key-home {
  15. compatible = "gpio-keys";
  16. autorepeat;
  17. pinctrl-names = "default";
  18. pinctrl-0 = <&home_key>;
  19. home {
  20. label = "GPIO Home";
  21. linux,code = <KEY_HOME>;
  22. gpios = <&gpio1 RK_PD4 GPIO_ACTIVE_LOW>;
  23. debounce-interval = <15>;
  24. };
  25. };
  26. &pinctrl {
  27. pinctrl-names = "default";
  28. buttons {
  29. home_key: home-key {
  30. rockchip,pins = <1 RK_PD4 RK_FUNC_GPIO &pcfg_pull_up>;
  31. };
  32. pwr_key: pwr-key {
  33. rockchip,pins = <0 RK_PA0 RK_FUNC_GPIO &pcfg_pull_up>;
  34. };
  35. };

方法二:

  1. gpio-keys {
  2. compatible = "gpio-keys";
  3. autorepeat;
  4. pinctrl-names = "default";
  5. pinctrl-0 = <&s8_keys>;
  6. power {
  7. gpios = <&gpio0 RK_PA6 GPIO_ACTIVE_LOW>;
  8. linux,code = <KEY_POWER>;
  9. label = "GPIO Key Power";
  10. debounce-interval = <20>;
  11. };
  12. home {
  13. gpios = <&gpio1 RK_PC6 GPIO_ACTIVE_LOW>;
  14. linux,code = <KEY_HOME>;
  15. label = "GPIO Key Home";
  16. debounce-interval = <20>;
  17. };
  18. };
  19. &pinctrl {
  20. pinctrl-names = "default";
  21. pinctrl-0 = <&pwr_hold &default_gpios>;
  22. buttons {
  23. s8_keys: s8-keys {
  24. rockchip,pins = <0 RK_PA6 RK_FUNC_GPIO &pcfg_pull_up>,
  25. <1 RK_PC6 RK_FUNC_GPIO &pcfg_pull_up>;
  26. };
  27. };

相关配置说明可以看内核说明文档:

kernel/Documentation/devicetree/bingings/input/gpio-keys.txt(RK举例)

1. compatible 属性值一定要设置为“gpio-keys”。

2. autorepeat 支持按键自动重复

3. 所有的 KEY 都是 gpio-keys 的子节点,每个子节点可以用如下属性描述自己:

gpios:所连接的 GPIO 信息。

interrupts:KEY 所使用 GPIO 中断信息,不是必须的,可以不写。

label:KEY 名字

linux,code:KEY 要模拟的按键可以直接填数字

wakeup-source:可以被唤醒

debounce-interval:消抖时间,单位毫秒

linux,input-type:事件类型,默认<1> == EV_KEY


应用部分

  • 查看读取event

   方法一:

   /sys/class/input/inputX/name 或者/sys/class/input/eventX/device/name    如果与节点 key-pwr key-home一致

  方法二:

  /sys/class/input/inputX/name 或者/sys/class/input/eventX/device/name  如果与节点 gpio-keys一致

   

  对应设备/dev/input/eventX

  • 查看文件内容

   hexdump /dev/input/eventX

  • 具体应用实现

   可通过epoll监听

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/431341
推荐阅读
相关标签
  

闽ICP备14008679号