linux下矩阵键盘设备名,linux下矩阵键盘驱动

1_>路径:linux\drivers\input\keyboard

2_>文件名:matrix_keypad.c

说明:这是一个平台驱动程序,在上面的.c文件里没有建一个设备,只有驱动

static struct platform_driver matrix_keypad_driver = {

.probe= matrix_keypad_probe,

.remove= __devexit_p(matrix_keypad_remove),

.suspend= matrix_keypad_suspend,

.resume= matrix_keypad_resume,

.driver= {

.name= "matrix-keypad",

.owner= THIS_MODULE,

},

};首先在init函数里边要注册上面的驱动结构体。当然在这之前,就是我们需要在编译下载内核到开发板以前,需要在例如mach-mini2440.c这样的文件添加代表矩阵键盘的platform_device结构体。

3_>probe探测函数

一个重要思想,我们需要使用input子系统实现这个矩阵键盘,与其他方法的主要不同便是当我们按一次键时,接受包是一个input子系统的,其中按的哪一个键就藏在这个结构体的某一个成员里边。

当然一般都是填充input结构体,然后给input申请中断服务程序matrix_keypad_interrupt,一旦我们按键,就会跳到中断服务程序。

static irqreturn_t matrix_keypad_interrupt(int irq, void *id)

{

struct matrix_keypad *keypad = id;

unsigned long flags;

spin_lock_irqsave(&keypad->lock, flags);

/*

* See if another IRQ beaten us to it and scheduled the

* scan already. In that case we should not try to

* disable IRQs again.

*/

if (unlikely(keypad->scan_pending || keypad->stopped))

goto out;

disable_row_irqs(keypad);

keypad->scan_pending = true;

schedule_delayed_work(&keypad->work,

msecs_to_jiffies(keypad->pdata->debounce_ms));

out:

spin_unlock_irqrestore(&keypad->lock, flags);

return IRQ_HANDLED;

}这里的中断服务程序是消抖的作用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值