linux下GPIO按键驱动(一)

本文介绍了Linux平台驱动中的GPIO按键驱动,讲解了如何在内核中注册GPIO按键设备,并通过board_max6q_sabresd.c进行初始化。重点分析了driver/input/keyboard/gpio_keys.c驱动文件中的probe函数和gpio_keys_setup_key()函数,涉及中断、定时器和工作队列的设置。
摘要由CSDN通过智能技术生成

 

前言:

  linux下platform平台驱动是为了方便隔离bsp与driver,利于移植。体现好代码的高内聚,低耦合。Linux设备驱动模型中,关心总线,设备和驱动三个实体。总线将设备和驱动绑定。在系统每注册一个设备的时候,都会寻找与之相匹配的驱动,相反的,每加载一个驱动的时候,也会寻找与之匹配的设备。匹配由总线完成。linux发明了一种虚拟的总线,称之为platform总线,相应的设备称之为platform_device,驱动为platform_driver。

  基于这个模型,又根据面向对象的思想,同一类的事物定义为一个基类。因此在驱动中,将同一基类的驱动,再抽象一个核心层。因此又分为了input设备,I2C设备,SPI设备等驱动。我们今天说的标准按键驱动,就是基于input输入设备。

 

正题:

  在内核中,按键的驱动已经完成!!!不需要我们自己写。driver/input/keyboard/gpio_keys.c 就是驱动文件。刚才说了,有驱动,还要有设备啊~只有这两个匹配了,只有这样我们才能在应用层操作这个设备。这个设备我们在哪注册呢?一般的,在板级的初始化c文件里面。比如:board_max6q_sabresd.c。这里面我们怎么搞呢?看下面::::::

复制代码

 1 #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
 2 #define GPIO_BUTTON(gpio_num, ev_code, act_low, descr, wake, debounce)    \
 3 {                                \
 4     .gpio        = gpio_num,                \
 5     .type        = EV_KEY,                \
 6     .code        = ev_code,                \
 7     .active_low    = act_low,                \
 8     .desc        = "btn " descr,                \
 9     .wakeup        = wake,                    \
10     .debounce_interval = debounce,                \
11 }
12 
13 static struct gpio_keys_button imx6q_buttons[] = {
14     GPIO_BUTTON(SABRESD_KEY_USER1, KEY_VOLUMEUP, 1, "user-key-1", 0, 1),
15     GPIO_BUTTON(SABRESD_KEY_USER2, KEY_VOLUMEDOWN, 1, "user-key-2", 0, 1),
16     GPIO_BUTTON(SABRESD_KEY_WHIBUSB, KEY_F1, 1, "whibusb", 0, 1),
17     GPIO_BUTTON(SABRESD_KEY_WHIBUSL, KEY_F2, 1, "whibusl", 0, 1),
18     GPIO_BUTTON(SABRESD_KEY_WHIBUSR, KEY_F3, 1, "whibusr", 0, 1),
19 };
20 
21 static struct gpio_keys_platform_data imx6q_button_data = {
22     .buttons    = imx6q_buttons,
23     .nbuttons    = ARRAY_SIZE(imx6q_buttons),
24 };
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值