野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8014|回复: 0

[求助] input子系统注册下面 event几是怎么弄的

[复制链接]
发表于 2022-6-25 16:02:03 | 显示全部楼层 |阅读模式
照着文档代码写,然后发现我按键注册的是event0,不是event1,
如果要注册成event1是哪个过程呢

我的代码 如下:
  1. #include <linux/init.h>
  2. #include <linux/kernel.h>
  3. #include <linux/module.h>

  4. #include <linux/fs.h>
  5. #include <linux/cdev.h>
  6. #include <linux/uaccess.h>


  7. #include <linux/delay.h>
  8. #include <linux/ide.h>
  9. #include <linux/errno.h>
  10. #include <linux/gpio.h>
  11. #include <asm/mach/map.h>
  12. #include <linux/of.h>
  13. #include <linux/of_address.h>
  14. #include <linux/of_gpio.h>
  15. #include <asm/io.h>
  16. #include <linux/device.h>
  17. #include <linux/irq.h>
  18. #include <linux/of_irq.h>
  19. #include <linux/types.h>

  20. #include <linux/input.h>
  21. #include <linux/semaphore.h>
  22. #include <asm/uaccess.h>



  23. /*------------------字符设备内容----------------------*/


  24. struct device_node *button_device_node = NULL; //定义按键设备节点结构体
  25. unsigned button_GPIO_number = 0;                           //保存button使用的GPIO引脚编号
  26. u32 interrupt_number = 0;                                           // button 引脚中断编号

  27. /*input 子系统相关内容*/
  28. #define BUTTON_NAME "button"
  29. struct input_dev *button_input_dev = NULL; //定义按键对应的输入子系统结构体

  30. //按键中断处理函数
  31. static irqreturn_t button_irq_hander(int irq,void *dev_id){
  32.     //按键状态加1
  33.     int button_status = 0;
  34.     button_status = gpio_get_value(button_GPIO_number);
  35.     //printk(KERN_ERR"buttoning %d\n",button_status);
  36.    
  37.     if(0 == button_status){
  38.        // printk(KERN_ERR"request 0n",button_status);
  39.         input_report_key(button_input_dev,KEY_1,0);
  40.         input_sync(button_input_dev);
  41.     }
  42.     else{
  43.         //printk(KERN_ERR"request 1n",button_status);
  44.         input_report_key(button_input_dev,KEY_1,1);
  45.         input_sync(button_input_dev);
  46.     }

  47.     return IRQ_HANDLED;
  48. }


  49. static int __init button_driver_init(void){
  50.     int error;
  51.     printk(KERN_ERR"button_driver_init \n");
  52.    
  53.     button_device_node = of_find_node_by_path("/button_interrupt");
  54.     if(NULL == button_device_node){
  55.         printk(KERN_ERR "of_find_node_by_path error");
  56.         return -1;
  57.     }
  58.     button_GPIO_number = of_get_named_gpio(button_device_node,"button_gpio",0);
  59.     if(0 == button_GPIO_number){
  60.         printk(KERN_ERR"of_get_named_gpio error");
  61.         return -1;
  62.     }
  63.     //申请GPIO
  64.     error = gpio_request(button_GPIO_number,"button_gpio");
  65.     if(error<0){
  66.         printk(KERN_ERR " gpio_request error");
  67.         gpio_free(button_GPIO_number);
  68.         return -1;
  69.     }
  70.     error = gpio_direction_input(button_GPIO_number);//设置输入;
  71.     //获取中断号
  72.     interrupt_number = irq_of_parse_and_map(button_device_node,0);
  73.     printk(KERN_ERR"\n interrupt_number = %d \n",interrupt_number);

  74.     //申请中断
  75.     error = request_irq(interrupt_number,button_irq_hander,IRQF_TRIGGER_RISING|IRQF_TRIGGER_FALLING,"button_interrupt",NULL);
  76.     if(error != 0)
  77.         {
  78.                 printk("request_irq error");
  79.         gpio_free(button_GPIO_number);
  80.                 free_irq(interrupt_number, NULL);
  81.                 return -1;
  82.         }

  83.         //申请输入子系统
  84.     button_input_dev = input_allocate_device();
  85.     if(NULL == button_input_dev){
  86.         printk(KERN_ERR "input_allocate_device failed");
  87.         return -1;
  88.     }
  89.     button_input_dev->name = BUTTON_NAME;
  90.     //设置输入类型
  91.     button_input_dev->evbit[0] = BIT_MASK(EV_KEY);
  92.     input_set_capability(button_input_dev,EV_KEY,KEY_1);///标记设备能够触发的事件
  93.     //注册输入设备
  94.     error = input_register_device(button_input_dev);
  95.     if(0!=error){
  96.                 printk(KERN_ERR "input_register_device error");
  97.                 gpio_free(button_GPIO_number);
  98.                 free_irq(interrupt_number, NULL);
  99.                 input_unregister_device(button_input_dev);
  100.                 return -1;
  101.     }
  102.         return 0;

  103. }

  104. /*
  105. *驱动注销函数
  106. */
  107. static void __exit button_driver_exit(void)
  108. {
  109.         printk(KERN_ERR "button_driver_exit\n");

  110.         /*释放申请的引脚,和中断*/
  111.         gpio_free(button_GPIO_number);
  112.         free_irq(interrupt_number, NULL);
  113.        
  114.         /*释放输入子系统相关内容*/
  115.         input_unregister_device(button_input_dev);
  116. }



  117. module_init(button_driver_init);
  118. module_exit(button_driver_exit);

  119. MODULE_LICENSE("GPL");

复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 18:32 , Processed in 0.054753 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表