输入子系统驱动程序:
input_sys_key_drv.c
#include <linux/init.h>
#include <linux/module.h>
#include <linux/input.h>
#include <linux/interrupt.h>//中断用的
#include <linux/gpio.h> //gpio接口函数
static struct input_dev *key_inputdev;
static int irqno;
// 设计一个对象--描述一个按键--属性(irq, gpio, 触发方式, 名字, 码值code(数字))
struct key_desc{
char *name;
int irqno;
int gpio;
int flags;
int code;
};
struct key_desc allkeys[] = {
[0]= {
.name = "key1_up",
.irqno = IRQ_EINT(0),
.gpio = S5PV210_GPH0(0),
.flags = IRQF_TRIGGER_FALLING|IRQF_TRIGGER_RISING,
.code = KEY_UP,
},
[1] = {
.name = "key2_down",
.irqno = IRQ_EINT(1),
.gpio = S5PV210_GPH0(1),
.flags = IRQF_TRIGGER_FALLING|IRQF_TRIGGER_RISING,
.code = KEY_DOWN,
},
[2] = {
.name = "key3_left",
.irqno = IRQ_EINT(2),
.gpio = S5PV210_GPH0(2),
.flags = IRQF_TRIGGER_FALLING|IRQF_TRIGGER_RISING,
.code = KEY_LEFT,
},
[3] = {
.name = "key4_right",
.irqno = IRQ_EINT(3),
.gpio = S5PV210_GPH0(3),
.flags = IRQF_TRIGGER_FALLING|IRQF_TRIGGER_RISING,
.code = KEY_RIGHT,
},
[4] = {
.name = "key3_enter",
.irqno = IRQ_EINT(4),
.gpio = S5PV210_GPH0(4),
.flags = IRQF_TRIGGER_FALLING|IRQF_TRIGGER_RISING,
.code = KEY_ENTER,
},
[5] = {
.name = "key3_ESC",
.irqno = IRQ_EINT(5),
.gpio = S5PV210_GPH0(5),
.flags = IRQF_TRIGGER_FALL